跳过正文
  1. 博客文章/

用 Docker Compose 部署 ALLinSSL 并接入 Nginx 反向代理

·564 字·3 分钟·
DevOps SRE ALLinSSL SSL TLS Docker Docker-Compose Nginx DevOps
Zayn
作者
Zayn
专注 Kubernetes、CI/CD、可观测性等云原生技术栈,记录生产环境中的实战经验与踩坑复盘。
目录
生产变更复盘 - 这篇文章属于一个选集。
6: 本文
ALLinSSL 用来集中管理 SSL/TLS 证书申请、续期、部署和监控。这个部署选择 Docker Compose 运行控制台,Nginx 作为 HTTPS 入口,后台安全入口由 ALLinSSL 自己处理。
文中使用 ssl-console.example.comregistry.example.internalCHANGE_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
#

部署前先过这几个检查:

检查项命令继续条件停止条件
Dockerdocker --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`
Nginxnginx -t配置语法通过Nginx 配置失败
HTTPScurl -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 HostX-Forwarded-Proto 和容器日志里的后台入口。Nginx 保持 location / 代理,不要额外加一层路径转发。

9. 遗留项
#

建议
镜像版本latest 固定到明确版本或 digest
访问控制只允许内网、VPN 或跳板机访问 ALLinSSL 控制台
凭据轮换首次上线前替换默认账号密码,后续定期轮换
数据备份./data 纳入备份策略
证书目录挂载如果要本地部署证书,提前规划 /cert 等挂载路径
通知告警在平台里补齐证书到期通知渠道

10. 验证矩阵
#

验证项命令通过标准
Compose 渲染docker compose config无报错,端口和挂载符合预期
容器状态docker compose psallinsslUp
本机端口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
生产变更复盘 - 这篇文章属于一个选集。
6: 本文

相关文章

用 Docker Compose 部署 Scrutiny:NVMe 健康监控的最小可用方案
·772 字·4 分钟
SRE NVMe SMART SRE DevOps +3
生产级 DNS 集群从零部署:dnsdist 与 Technitium 三节点架构
·2755 字·13 分钟
SRE DNS DDNS SRE DevOps +4
生产 DNS 集群平滑升级复盘:dnsdist 与 Technitium 的滚动变更
·989 字·5 分钟
SRE DNS SRE DevOps Dnsdist +3