Traefik为服务添加HTTPS支持
Traefik为服务添加HTTPS支持
背景
- 紧接着Traefik学习这篇文章,尝试使用Let's Encrypt为Traefik的服务添加HTTPS支持
Let's Encrypt
- Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构(CA),为公众的利益而运行。它是一项由 Internet Security Research Group(ISRG)提供的服务。以尽可能对用户友好的方式免费提供为网站启用 HTTPS(SSL/TLS)所需的数字证书。
Traefik的支持
-
创建
acme.json
文件用来存储证书信息touch acme.json chmod 600 acme.json
- 注意务必设置权限为600,否则会报错
-
traefik Docker Compose配置文件
traefik.yaml
:version: '3' services: reverse-proxy: image: traefik restart: always ports: - "80:80" - "443:443" networks: - traefik volumes: - ./traefik.toml:/etc/traefik/traefik.toml - /var/run/docker.sock:/var/run/docker.sock - ./config/:/etc/traefik/config/:ro - ./acme.json:/letsencrypt/acme.json container_name: traefik # 网关健康检查 healthcheck: test: ["CMD-SHELL", "wget -q --spider --proxy off localhost:8080/ping || exit 1"] interval: 3s timeout: 5s # 创建外部网卡 docker network create traefik networks: traefik: external: true
- 关键部分是使用volume向容器引入
acme.json
- 关键部分是使用volume向容器引入
-
traefik静态配置文件
traefik.toml
# Let's Encrypt [certificatesResolvers.myresolver.acme] email = "example.com" storage="/letsencrypt/acme.json" [certificatesResolvers.myresolver.acme.tlsChallenge]
- 这里使用TLSChallenge的方式申请,其余方式参考traefik的文档
-
为服务添加HTTPS支持,这里还是以Halo博客为例
version: '3.1' services: halo: image: halohub/halo container_name: halo restart: unless-stopped volumes: - /root/blog/halo:/root/.halo labels: - traefik.http.routers.halo.rule=Host(`blog.demoli.xyz`) - traefik.http.routers.halo.tls=true - traefik.http.routers.halo.tls.certResolver=myresolver - traefik.http.routers.halo.entrypoints=https - traefik.http.services.halo.loadbalancer.server.port=8090 - traefik.http.routers.halo-redirect-https.rule=Host(`blog.demoli.xyz`) - traefik.http.routers.halo-redirect-https.entrypoints=http - traefik.http.routers.halo-redirect-https.service=noop@file - traefik.http.routers.halo-redirect-https.middlewares=https-redirect@file - traefik.http.routers.halo-redirect-https.priority=100 networks: default: external: name: traefik
- 关键配置是
traefik.http.routers.halo.tls=true
与traefik.http.routers.halo.tls.certResolver=myresolver
- 关键配置是
注意事项
- Let's Encrypt证书的有效期是90天,Traefik官方文档说可以支持证书的自动更新,但是查询资料的过程中,发现有博主说并没有自动更新,这里暂时记录,若90天后出现问题,则再尝试解决
- 实际上使用letsencrypt申请得到
acem.json
格式的正数可以使用traefik-certs-dumper
镜像转换为一般的pem
格式,具体使用方式参考Blog CDN加速
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通