![cover](https://ziyuan.xiaofuma.top/halo/jtjpnjig.webp)
Halo的https访问及 ssl 部署
Halo & https配置及ssl设置
之前一直懒得对站点增加 https 的支持。本文的方案希望在一台机器上完成所有功能,不去借助类似 vercel 等服务的部署,所有组件均运行在 docker 中,方便后续迁移和升级
在宝塔上想要使用https,本来是可以在网站设置里设置SSL的,但是halo需要用到反向代理,这里如果设置反向代理就不可以设置ssl,这里我推荐一个反向代理管理软件 Nginx Proxy Manager
Nginx Proxy Manager
同样我们可以在 官方文档 中找到 dcoker compose 的配置内容
你可以可以看下halo的新版的说明:与 Nginx Proxy Manager 配合使用 | Halo 文档
首先,我们创建一个文件夹来存放 NPM 的 docker-compose.yml
文件:
mkdir -p ~/data/docker_data/nginxproxymanager # 创建一个 npm 的文件夹
cd ~/data/docker_data/nginxproxymanager # 进入该文件夹
vi docker-compose.yml
在英文状态的输入法下,按下 i
,左下角出现 --INSERT--
后,粘贴填入下面的内容:
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 不建议修改端口
- '81:81' # 可以把冒号左边的 81 端口修改成你服务器上没有被占用的端口
- '443:443' # 不建议修改端口
volumes:
- ./data:/data # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 data 目录,用于存放数据,如果不存在的话,会自动创建
- ./letsencrypt:/etc/letsencrypt # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 letsencrypt 目录,用于存放证书,如果不存在的话,会自动创建
注意:安装了 NPM 之后,就不需要再安装 Nginx 了,否则会端口冲突(不建议修改 NPM 的 80、443 端口)。如果你的服务器安装了宝塔面板,也可以和 NPM 一起使用,只要你到软件后台把宝塔安装的 Nginx 关闭或者卸载即可。
之后,同样在英文输入法下,按一下 esc
,然后 :wq
保存退出。
启动 NPM:
docker-compose up -d # -d 表示后台运行
docker compose up -d # 如果你用的是 docker-compose-plugin 的话,用这条命令
不出意外,此时你使用 http://127.0.0.1:81 就可以访问 NPM 的网页端了。(注意把 127.0.0.1
替换成你实际服务器的 IP)
不知道服务器 IP,可以直接在命令行输入:curl ip.sb,会显示当前服务器的 IP。
遇到访问不了的情况,请再次检查在宝塔面板的防火墙和服务商的后台防火墙是否打开对应了端口。
默认登陆的用户名:admin@example.com
密码:changeme
第一次登陆会提示更改用户名和密码,建议修改一个复杂一点的密码。
至此,我们已经完成了 Nginx Proxy Manager 的搭建,之后就可以用它给我们的 Halo 或者其他 Web 应用做反向代理了。
连接 docker 网络
目前我们已经创建了 halo、twikoo 以及 NPM 三个容器,但是这三个容器处于不同网段中,容器和容器之间互相不清楚如何建立连接,此时我们需要使用 docker network connet 网络 容器名 的方式进行联通
为了拿到 网络 和 容器名 我们需要用到如下两个指令
docker ps
# 最后一列 NAMES 既是容器名
CONTAINER ID IMAGE ... NAMES
96772b04b474 jc21/nginx-proxy-manager:latest ... nginx-app-1
28cc2ee3cbf7 halohub/halo:2.8 ... halo
a0c44aaf8a4e imaegoo/twikoo ... twikoo
8da3981f70ed postgres:latest ... halodb
docker network ls
# 第二列 NAME 则是网络名
NETWORK ID NAME DRIVER SCOPE
c1646cd554fc bridge bridge local
ac59c5c5cab8 halo2_halo_network bridge local
f266311bb0a9 host host local
ebd8b3fce3d3 nginx_default bridge local
5eec799dd6a0 none null local
4657be95c638 twikoo_default bridge local
673c83231bb2 www_default bridge local
后面我们需要配置 NPM 的反代规则,因此需要将 nginx-app-1 同时连接到 halo2_halo_network 和 twikoo_default 中,此时则需要运行 connet 指令
docker network connect halo2_halo_network nginx-app-1
docker network connect twikoo_default nginx-app-1
具体请以命令中实际显示的值为准,这里只作为示例展示
查看容器的具体 IP
到了这里我们已经做好了 docker bridge 内网跳发规则配好了,但是由于 NPM 运行在 docker 中,反代转发时,需要填写容器内部的 IP,也就是 halo 和 twikoo 容器所分配的具体 IP,此时需要使用 inspect 指令,查询容器的 ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' halo
172.18.0.3
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' twikoo
172.24.0.2
记住你电脑上的这两个值,等会要用
配置 Halo 的反向代理
首先我们登陆网页端之后,会弹出修改用户名和密码的对话框,我们根据自己的实际来修改自己的用户名和邮箱。
后面的跟着官方设置就可以了与 Nginx Proxy Manager 配合使用 | Halo 文档
参考文档: