距离上次把博客改用 docker 部署已经过去快半年了,旧的服务器性能有点过剩( 续不起了 ),所以另购置了台新的云主机,考虑到备案迁移的问题,我还是选择了同一家供应商,免除了再次申请备案信息更改的麻烦。
我之前的主机上跑了三个容器,一个是 Nginx 用来部署博客,然后一个 Trilium 云笔记本再加上一个 Minecraft 服务器。解析的域名都是同一个,分别用不同的端口访问。这真是一点不🆒。
那么有没有办法通过二级域名分别访问指定端口的容器呢?如果还能一键部署 SSL 就更妙了。那么就要请出本篇的主角:Nginx Proxy Manager
Nginx Proxy Manager 实际上就是一个带前端管理界面的 Nginx 服务器,通过Let’s encrypt 来自动申请 SLL 证书并自动部署,反向代理你所需要的容器,甚至是任何目的地,让一个不懂 Nginx 的小白也能轻松配置。
本篇文章就来简单介绍一下在 Cent 8.3 下如何部署。
1. 配置环境
1.1 安装 docker
1 | sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo |
1 | sudo dnf install docker-ce --nobest |
配置自动启动
1 | sudo systemctl enable --now docker |
1.2 安装 docker-compose
下载 Docker Compose
1 | sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
修改文件的权限
1 | sudo chmod +x /usr/local/bin/docker-compose |
1.3 更改镜像源
内地访问 Docker Hub 的速度慢得可怕,所以我建议可以选择用国内的镜像源替代。如果你用的是阿里的服务,那么可以在控制台申请一个 docker 加速的网址,替换到文件里即可。下面的代码中用的是网易和百度的源。
1 | sudo mkdir -p /etc/docker |
2. 编写 Docker Compose.xml
先在任意位置创建一个文件夹,然后创建 docker-compose.yml
文件,用于部署容器。
1 | cd /home/ |
在 vim 中 :i
把写好的文配置直接粘贴进去,esc 退出插入模式,:w
保存文件然后运行 :q
退出编辑器。
下面是我的配置文件。
1 | version: "3.7" |
在文件夹下继续运行 docker-compose up -d
即可部署。
部署完毕后,你就可以通过 docker container ls
查看容器的运行情况。
到这里,工作已经运行大半,接下来我们就要配置域名解析和转发。
3. 配置域名
首先你需要去服务器安全组配置中,把 81
端口开放。然后转到你的域名提供商控制台,把需要解析的域名全部指向你的服务器 IP
。然后通过域名或者 IP:81 在浏览器直接登陆 Nginx Proxy Manager 的前端界面。
注意,默认的登陆邮箱和密码是:
1 | admin@example.com |
登陆成功后,系统会要求你修改新的密码。完成后,就可以开始配置了。
点击 New Proxy Host 创建一个代理规则,在 Domin Names 中填写一个或多个你想要用来访问该容器的域名。
如果你没有特殊配置 https ,这里使用默认的 http 第二栏的 Forward Hostname / IP 处,填写容器所在 Docker 网桥的虚拟 IP,这个 IP 可以通过下面的命令查到。
1 | docker network inspect bridge |
在结果中,找到 IPAM-Config-Gateway
节点,后面的 IP 就是我们所需要的。
如果你在
docker-compose.yml
自定义了一个网桥,那么请用你自定义的网桥名称替换掉上面命令中的bridge
参数。
而端口,则是你最开始配置中对应容器暴漏在外面的端口。
如果你不需要为网站配置 SSL 的话到这里,点击 Save 就可以了。否则,请点击 SSL 选项卡,证书一栏选择申请一个新的 SSL 证书,填写邮件地址,同意协议即可。如果需要强制 https 访问,请打开 Force SSL 选项。最后点 Save 就可以了。
其余的容器的配置也都是一样的。
最后,你可能注意到了,这个前端页面并不安全,我们需要给他自己也套个代理(套娃警告)。
配置同刚刚的例子差不多,端口号改为 81
即可。
用域名测试,能够正常访问的话,就可以在安全组关掉 81
端口的访问了。
到这里就大功告成咯~
完整的文档你可以在 Nginx Proxy Manager 的官网找到,另外还有一个 Youtube 博主做的视频,希望能对你有所帮助。
参考
[1] 写代码的厨师, 2020.Docker Compose的安装和使用.CSDN
[2] 雪梦科技, 2020.如何在 RHEL 8 / CentOS 8上安装 Docker CE.腾讯云社区