我最近更改了虚拟服务器,并且必须重新配置所有内容。 我希望可以通过https访问该站点,并自动获取letencrypt证书并进行续订。 这可以通过使用两个docker映像nginx-proxy和nginx-proxy-companion来实现。
这是在docker上设置站点的指南,该站点具有自动接收SSL证书的代理。 使用了CentOS 7虚拟服务器。
我假设服务器已经被购买,配置,通过密钥登录到服务器,安装了fail2ban等。
首先,您需要安装docker。
- 首先,您需要安装依赖项
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 连接存储库
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 然后安装社区版泊坞窗
$ sudo yum install docker-ce docker-ce-cli containerd.io
- 将docker添加到自动加载并运行
$ sudo systemctl enable docker $ sudo systemctl start docker
- 将用户添加到docker组中以便能够在没有sudo的情况下运行docker
$ usermod -aG docker user
下一步是安装docker-compose。 该实用程序可以通过多种方式安装,但是我更喜欢通过pip Manager和virtualenv安装,以免不必要的软件包阻塞系统。
- 安装点子
$ sudo yum install python-pip
- 安装virtualenv
$ pip install virtualenv
- 接下来,您需要使用项目创建一个文件夹并对其进行初始化。 包含软件包管理所需所有内容的文件夹将称为ve。
$ mkdir docker $ cd docker $ virtualenv ve
- 要开始使用虚拟环境,您需要在项目文件夹中运行以下命令。
$ source ve/bin/activate
- 您可以安装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