使用nginx-proxy与acme-companion实现自动化HTTPS配置指南

使用nginx-proxy与acme-companion实现自动化HTTPS配置指南

acme-companion acme-companion 项目地址: https://gitcode.com/gh_mirrors/acm/acme-companion

项目概述

本文介绍如何利用nginx-proxy与acme-companion容器组合,实现自动化HTTPS证书申请与Nginx反向代理配置的技术方案。这套方案能够为您的Docker容器服务自动申请Let's Encrypt证书并配置HTTPS访问,极大地简化了Web服务的SSL/TLS部署流程。

核心组件说明

1. nginx-proxy容器

  • 功能:自动为Docker容器配置Nginx反向代理
  • 特点:监听Docker事件,自动生成Nginx配置

2. acme-companion容器

  • 功能:自动化管理Let's Encrypt证书
  • 特点:与nginx-proxy集成,自动申请、续期SSL证书

详细部署步骤

第一步:部署nginx-proxy容器

nginx-proxy作为反向代理核心,需要配置以下关键参数:

docker run --detach \
    --name nginx-proxy \
    --publish 80:80 \          # 暴露HTTP端口
    --publish 443:443 \        # 暴露HTTPS端口
    --volume certs:/etc/nginx/certs \      # 证书存储卷
    --volume vhost:/etc/nginx/vhost.d \    # 虚拟主机配置卷
    --volume html:/usr/share/nginx/html \  # Web根目录卷
    --volume /var/run/docker.sock:/tmp/docker.sock:ro \  # Docker套接字
    nginxproxy/nginx-proxy

关键点说明

  1. 三个持久化卷(certs/vhost/html)必须配置,用于与acme-companion共享数据
  2. Docker套接字挂载使得容器能监听Docker事件,实现自动配置

第二步:部署acme-companion容器

acme-companion作为证书管理组件,需要与nginx-proxy共享卷:

docker run --detach \
    --name nginx-proxy-acme \
    --volumes-from nginx-proxy \          # 共享nginx-proxy的卷
    --volume /var/run/docker.sock:/var/run/docker.sock:ro \  # Docker套接字
    --volume acme:/etc/acme.sh \         # acme.sh配置存储卷
    --env "DEFAULT_EMAIL=mail@yourdomain.tld" \  # 推荐设置默认邮箱
    nginxproxy/acme-companion

最佳实践建议

  1. 务必设置DEFAULT_EMAIL环境变量,便于证书到期提醒和账户恢复
  2. acme卷用于持久化存储acme.sh的配置和状态数据

第三步:配置被代理的容器

任何需要HTTPS代理的容器,只需设置两个关键环境变量:

docker run --detach \
    --name your-app \
    --env "VIRTUAL_HOST=app.yourdomain.tld" \      # 代理域名
    --env "LETSENCRYPT_HOST=app.yourdomain.tld" \ # 申请证书的域名
    --expose 80 \                                 # 暴露容器端口
    your-application-image

注意事项

  1. VIRTUAL_HOST和LETSENCRYPT_HOST必须同时设置且域名一致
  2. 容器必须暴露(EXPOSE)需要被代理的端口
  3. 确保域名已正确解析到主机IP且主机可公开访问

高级配置示例

非标准端口应用配置

对于监听非80端口的应用(如Grafana监听3000端口):

docker run --detach \
    --name grafana \
    --env "VIRTUAL_HOST=grafana.yourdomain.tld" \
    --env "VIRTUAL_PORT=3000" \            # 指定应用端口
    --env "LETSENCRYPT_HOST=grafana.yourdomain.tld" \
    --env "LETSENCRYPT_EMAIL=admin@yourdomain.tld" \  # 可单独设置证书邮箱
    --expose 3000 \                        # 暴露应用实际端口
    grafana/grafana

多域名配置

单个容器支持多个域名的HTTPS配置:

docker run --detach \
    --name multi-site-app \
    --env "VIRTUAL_HOST=site1.tld,site2.tld" \      # 多域名用逗号分隔
    --env "LETSENCRYPT_HOST=site1.tld,site2.tld" \  # 为多个域名申请证书
    --expose 80 \
    your-multi-site-image

常见问题解答

Q:为什么我的证书没有自动申请? A:请检查:

  1. 是否同时设置了VIRTUAL_HOST和LETSENCRYPT_HOST
  2. 域名是否已解析到正确IP
  3. 主机的80/443端口是否可公开访问

Q:如何验证证书申请过程? A:可以查看acme-companion容器的日志:

docker logs nginx-proxy-acme

Q:证书自动续期如何工作? A:acme-companion内置自动续期机制,默认会在证书到期前自动续期。

总结

通过nginx-proxy与acme-companion的组合,我们实现了Docker容器HTTPS配置的完全自动化。这套方案具有以下优势:

  1. 自动化证书申请与续期
  2. 动态Nginx配置生成
  3. 简化部署流程
  4. 支持多域名和非标准端口应用

对于需要快速部署HTTPS服务的Docker环境,这是一个高效可靠的解决方案。

acme-companion acme-companion 项目地址: https://gitcode.com/gh_mirrors/acm/acme-companion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华建万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值