在Linux中使用Docker配置Letencrypt证书的自动接收

我最近更改了虚拟服务器,并且必须重新配置所有内容。 我希望可以通过https访问该站点,并自动获取letencrypt证书并进行续订。 这可以通过使用两个docker映像nginx-proxy和nginx-proxy-companion来实现。


这是在docker上设置站点的指南,该站点具有自动接收SSL证书的代理。 使用了CentOS 7虚拟服务器。


我假设服务器已经被购买,配置,通过密钥登录到服务器,安装了fail2ban等。


首先,您需要安装docker。


  1. 首先,您需要安装依赖项

    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
  2. 连接存储库

     $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 
  3. 然后安装社区版泊坞窗

     $ sudo yum install docker-ce docker-ce-cli containerd.io 
  4. 将docker添加到自动加载并运行

     $ sudo systemctl enable docker $ sudo systemctl start docker 
  5. 将用户添加到docker组中以便能够在没有sudo的情况下运行docker

     $ usermod -aG docker user 

下一步是安装docker-compose。 该实用程序可以通过多种方式安装,但是我更喜欢通过pip Manager和virtualenv安装,以免不必要的软件包阻塞系统。


  1. 安装点子

     $ sudo yum install python-pip 
  2. 安装virtualenv

     $ pip install virtualenv 
  3. 接下来,您需要使用项目创建一个文件夹并对其进行初始化。 包含软件包管理所需所有内容的文件夹将称为ve。

     $ mkdir docker $ cd docker $ virtualenv ve 
  4. 要开始使用虚拟环境,您需要在项目文件夹中运行以下命令。

     $ source ve/bin/activate 
  5. 您可以安装docker-compose。

     pip install docker-compose 

    为了使容器彼此可见,请创建一个网络。 默认情况下,使用桥驱动程序。

     $ docker network create network 

    接下来,您需要配置docker-compose,代理将位于proxy文件夹中,测试站点位于test文件夹中。 例如,我使用域名example.com

     $ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml 

    内容代理/ docker-compose.yml



     version: '3' networks: default: external: name: network services: nginx-proxy: container_name: nginx-proxy image: jwilder/nginx-proxy ports: - 80:80 - 443:443 volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro nginx-proxy-letsencrypt: container_name: nginx-proxy-letsencrypt image: jrcs/letsencrypt-nginx-proxy-companion volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro environment: - NGINX_PROXY_CONTAINER=nginx-proxy volumes: certs: vhost.d: html: 

    需要环境变量NGINX_PROXY_CONTAINER ,以便letencrypt容器可以看到代理容器。 /etc/nginx/certs/etc/nginx/vhost.d和/ usr / share / nginx / html文件夹必须由两个容器共享。 为了使letsencrypt容器正常工作,该应用程序必须在端口80和443上均可用。


    测试/ docker-compose.yml的内容


     version: '3' networks: default: external: name: network services: nginx: container_name: nginx image: nginx:latest environment: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - LETSENCRYPT_EMAIL=admin@example.com 

    在这里,代理需要正确的环境变量,以正确处理对服务器的请求并为正确的域名请求证书。


    它仍然只运行docker-compose


     $ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d 

Source: https://habr.com/ru/post/zh-CN445448/


All Articles