如何编辑Caddyfile为ECS Fargate中拉取ECR镜像的应用提供SSL服务
操作指南
核心前提说明
ECS Fargate不支持直接登录运行中的容器修改本地文件,所有修改重启后会丢失,Caddyfile配置需要提前注入到Caddy容器的启动流程中,以下是可落地的实现方案:
推荐方案:自定义Caddy镜像打包配置
步骤1:编写适配场景的Caddyfile
同ECS任务内的多个容器共享网络命名空间,你可以直接通过localhost+业务容器端口访问业务应用,参考配置如下:
# 替换为你实际的业务域名 your-domain.com { # 替换为你的邮箱,用于Let's Encrypt证书到期通知 tls your-email@example.com # 替换为业务容器实际监听的端口 reverse_proxy localhost:8080 }
如果你的业务容器和Caddy不在同一个ECS任务中,将localhost:8080替换为业务应用的内部服务发现地址/负载均衡内网地址即可。
步骤2:构建自定义Caddy镜像
在Caddyfile同级目录创建Dockerfile,内容如下:
# 引用官方Caddy基础镜像 FROM caddy:latest # 把你编写的Caddyfile覆盖到镜像默认配置路径 COPY ./Caddyfile /etc/caddy/Caddyfile
本地构建镜像后推送到你的ECR私有仓库。
步骤3:更新ECS任务定义并重新部署
- 替换原有Caddy容器的镜像地址为你刚推送到ECR的自定义镜像地址
- 确认Caddy容器所在的ECS任务具备公网访问能力(分配公网IP或VPC配置NAT网关),Caddy申请SSL证书需要公网通信
- 确认关联的安全组开放80、443端口的入站规则,80端口用于HTTP-01证书挑战,必须开放
- 将你的业务域名解析到Caddy容器的公网IP/关联的负载均衡地址
部署完成后访问你的域名即可自动生效SSL,不会再显示Caddy默认页面。
备选方案:无需构建镜像,通过参数存储注入配置
如果你不想维护自定义Caddy镜像,可以把编写好的Caddyfile存入AWS Systems Manager Parameter Store或Secrets Manager,给ECS任务执行角色授予对应配置的读取权限后,在Caddy容器的启动命令中直接拉取配置启动,启动命令参考:caddy run --config "ssm://parameter-store中Caddyfile的路径"
内容的提问来源于stack exchange,提问作者not-up
相关产品推荐
相关产品推荐

