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