在 Linux 上使用 docker 设置自动接收 LetsEncrypt 证书

我最近更改了虚拟服务器,并且必须重新配置所有内容。 我更喜欢该网站可以通过 https 访问,并且可以自动获取和更新加密证书。 这可以通过使用两个 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. 然后安装docker社区版
    $ 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 管理器和 virtualenv 安装,以免不必要的软件包使系统混乱。

  1. 安装点子
    $ sudo yum install python-pip
  2. 安装虚拟环境
    $ 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 LetsEncrypt 容器必须能够看到代理容器。 /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
          - [email protected]

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

    剩下的就是运行 docker-compose

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

来源: habr.com

添加评论