ssl-console.example.com、registry.example.internal 和 CHANGE_ME_* 作为示例值。落地时替换为自己的域名、镜像仓库和凭据,后台密码不要写进 Git、工单或聊天记录。ALLinSSL 是一个开源免费的 SSL/TLS 证书集中管理平台,适合把证书申请、续期、部署和监控收敛到一个 Web 控制台里。它支持自动化部署流水线,也能和 DNS 服务商、云平台、服务器、面板、CDN、WAF 等环境集成。
0. 部署边界#
| 项 | 值 |
|---|---|
| 服务 | ALLinSSL |
| 部署方式 | Docker Compose |
| 容器名 | allinssl |
| 容器内端口 | 8888 |
| 宿主机监听 | 127.0.0.1:7979 |
| 对外入口 | Nginx HTTPS 反向代理 |
| 数据目录 | /data/docker-compose/allinssl/data |
| 后台入口 | 以容器启动日志为准,示例:https://ssl-console.example.com/allinssl |
这里建议把容器端口绑定到 127.0.0.1,不要直接暴露 0.0.0.0:7979。ALLinSSL 会保存 DNS、云平台、SSH、面板等授权信息,控制台入口应当只通过受控的 HTTPS 入口访问。
1. 准备目录和环境变量#
创建部署目录:
mkdir -p /data/docker-compose/allinssl/data
cd /data/docker-compose/allinssl
把初始化账号、密码、安全入口写到 .env:
ALLINSSL_USER=admin
ALLINSSL_PWD=CHANGE_ME_GENERATE_A_RANDOM_PASSWORD
ALLINSSL_URL=allinssl
TZ=Asia/Shanghai
限制 .env 权限:
chmod 600 /data/docker-compose/allinssl/.env
生成随机密码可以用:
openssl rand -base64 24
ALLINSSL_URL 是安全入口。示例值为 allinssl 时,访问路径按 /allinssl 规划。这个值不要设得太短,也不要使用能被轻易猜到的业务名。
2. Compose 配置#
docker-compose.yaml:
services:
allinssl:
image: registry.example.internal/allinssl/allinssl:latest
container_name: allinssl
restart: always
stdin_open: true
tty: true
env_file:
- .env
ports:
- "127.0.0.1:7979:8888"
volumes:
- ./data:/www/allinssl/data
如果你的环境必须直接访问宿主机 7979,可以临时改成:
ports:
- "7979:8888"
长期运行不建议这么做。ALLinSSL 后台属于证书和凭据管理入口,最好放到 Nginx、VPN、堡垒机或内网 ACL 后面。
3. 启动和查看登录信息#
启动:
cd /data/docker-compose/allinssl
docker compose up -d
查看容器状态:
docker compose ps
查看日志:
docker logs --tail 120 allinssl
首次启动后,日志里通常会输出后台访问相关信息。不要把包含真实密码或安全入口的日志原样贴到公开渠道。
本机验证:
curl -I http://127.0.0.1:7979
如果设置了安全入口,浏览器访问时使用:
https://ssl-console.example.com/allinssl
这里的 /allinssl 是 ALLinSSL 根据 ALLINSSL_URL 生成的后台入口,不是 Nginx 单独配置的 location。
4. Nginx 反向代理#
Nginx 这里保持根路径代理,不额外写 /allinssl/ 的 location。ALLINSSL_URL=allinssl 是 ALLinSSL 自己的后台入口配置,启动后以容器日志输出的访问地址为准。
示例 Nginx 配置如下:
server {
listen 443 ssl http2;
server_name ssl-console.example.com;
ssl_certificate /etc/nginx/certs/example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 10m;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:7979;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
如果你的 Nginx 没有定义 $connection_upgrade,可以先增加 map:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
加载配置前先检查语法:
nginx -t
重载:
systemctl reload nginx
外部验证:
curl -I https://ssl-console.example.com/
后台真实入口看容器启动日志。ALLINSSL_URL 不需要在 Nginx 里再写一遍路径代理。
5. Review Gate#
部署前先过这几个检查:
| 检查项 | 命令 | 继续条件 | 停止条件 |
|---|---|---|---|
| Docker | docker --version && docker compose version | 命令正常返回 | Docker/Compose 不可用 |
| 目录 | test -d /data/docker-compose/allinssl | 目录存在且可写 | 数据目录不可写 |
| 密码 | test -f .env && grep '^ALLINSSL_PWD=' .env | .env 已配置强密码 | 使用默认密码或把密码写进 Compose |
| 端口 | `ss -lntup | grep ‘:7979’ | true` | |
| Nginx | nginx -t | 配置语法通过 | Nginx 配置失败 |
| HTTPS | curl -I https://ssl-console.example.com/ | 返回预期状态码 | 无法访问或证书错误 |
只要 .env 中的真实密码曾经出现在聊天、工单或仓库里,上线前就重新生成并替换。
6. 使用边界#
ALLinSSL 的核心能力在控制台内完成,部署完成后主要做三件事:
- 添加 DNS、云平台、SSH、面板等授权信息。
- 创建证书申请任务,选择 CA、域名、DNS 提供商和续签策略。
- 创建自动化部署流水线,把证书部署到 Nginx、面板、CDN、WAF 或目标服务器。
官方文档提醒:如果使用 Docker 安装并希望把证书部署到本机目录,需要把宿主机证书目录挂载进容器。比如:
volumes:
- ./data:/www/allinssl/data
- /www/allinssl/cert:/cert
这样控制台里填写 /cert/key.pem,实际会落到宿主机 /www/allinssl/cert/key.pem。如果不挂载目标证书目录,容器内写入的路径不会自动出现在宿主机 Nginx 使用的目录里。
7. 备份和回滚#
ALLinSSL 的关键数据在 ./data。升级、迁移或修改部署前先备份:
cd /data/docker-compose/allinssl
tar -czf "/tmp/allinssl-data-$(date +%Y%m%d%H%M%S).tar.gz" data docker-compose.yaml .env
升级镜像:
docker compose pull
docker compose up -d
docker compose ps
回滚配置:
cd /data/docker-compose/allinssl
tar -xzf /tmp/allinssl-data-YYYYMMDDHHMMSS.tar.gz -C .
docker compose up -d
如果使用 latest 标签,升级前最好记录当前镜像 digest:
docker image inspect registry.example.internal/allinssl/allinssl:latest --format '{{index .RepoDigests 0}}'
长期运行建议固定版本或 digest,不要让生产控制台跟随 latest 不受控变化。
8. 常见问题#
8.1 页面打不开#
按顺序检查:
docker compose ps
docker logs --tail 120 allinssl
ss -lntup | grep ':7979'
curl -I http://127.0.0.1:7979
nginx -t
如果本机 127.0.0.1:7979 正常,但域名访问失败,优先查 Nginx server_name、证书路径、防火墙和 DNS 解析。
8.2 登录入口不对#
检查 .env 中的 ALLINSSL_URL。如果值是 allinssl,入口按 /allinssl 访问。修改后重启容器:
docker compose up -d
8.3 本地部署证书没有生效#
Docker 部署时,容器和宿主机文件系统隔离。要把证书部署到宿主机 Nginx 能读取的位置,需要提前挂载目标目录,并在 ALLinSSL 控制台里填写容器内路径。
8.4 反向代理后静态资源异常#
检查 ALLINSSL_URL、Nginx proxy_set_header Host、X-Forwarded-Proto 和容器日志里的后台入口。Nginx 保持 location / 代理,不要额外加一层路径转发。
9. 遗留项#
| 项 | 建议 |
|---|---|
| 镜像版本 | 从 latest 固定到明确版本或 digest |
| 访问控制 | 只允许内网、VPN 或跳板机访问 ALLinSSL 控制台 |
| 凭据轮换 | 首次上线前替换默认账号密码,后续定期轮换 |
| 数据备份 | 将 ./data 纳入备份策略 |
| 证书目录挂载 | 如果要本地部署证书,提前规划 /cert 等挂载路径 |
| 通知告警 | 在平台里补齐证书到期通知渠道 |
10. 验证矩阵#
| 验证项 | 命令 | 通过标准 |
|---|---|---|
| Compose 渲染 | docker compose config | 无报错,端口和挂载符合预期 |
| 容器状态 | docker compose ps | allinssl 为 Up |
| 本机端口 | curl -I http://127.0.0.1:7979 | 返回 HTTP 响应 |
| Nginx 配置 | nginx -t | 语法检查通过 |
| HTTPS 入口 | curl -I https://ssl-console.example.com/ | 返回预期状态码 |
| 数据持久化 | du -sh /data/docker-compose/allinssl/data | 目录存在且可写 |
| 安全入口 | 浏览器访问 /allinssl | 能进入登录页 |
11. 可复用原则#
ALLinSSL 管的是证书和授权信息,部署时先把控制台入口收住,再考虑自动化流水线。最小可复用路径是:
- 容器只监听本机端口。
- Nginx 统一提供 HTTPS。
- 账号密码放
.env,不要写进 Compose。 - 数据目录持久化并备份。
- 本地部署证书时,把目标证书目录挂载进容器。
把这几件事固定下来,后续新增域名、DNS 授权、证书部署流水线时,风险会低很多。
12. 参考#
- ALLinSSL 项目介绍:
https://allinssl.com/guide/introduction.html - ALLinSSL 快速上手:
https://allinssl.com/guide/getting-started.html - ALLinSSL 本地部署说明:
https://allinssl.com/guide/help/deploy/local
