caddy Docker 容器代理介绍与使用
type
Post
status
Published
date
May 17, 2023
slug
caddy
summary
tags
工具
caddy
icon
介绍
Caddy 2 是一个功能强大、面向企业级、开源的 Web 服务器,使用 Go 语言编写,支持自动 HTTPS 加密。
对普通使用者而言,Caddy 最主要的优势在于
- 配置相对简单(与 nginx 相比,我看到要写 nginx 就脑壳疼)
- 自动生成 SSL 证书(利用 Let’s encrypt 生成免费证书,但只有三个月有效期),并自动续期
安装
1. 创建 docker-compose.yml 文件
内容如下:
最后 4 行是重点
内容如下:
为什么要用 vim 创建一个 Caddyfile 文件并填入内容
1. 不创建 Caddyfile 文件,启动 caddy 时新建一个名为 Caddyfile 的目录
2. 使用 touch 新建一个空文件,会报 EOF 错误:
Error: adapting config using caddyfile: EOF
2. 创建名为 caddy 的 docker network
创建一个外部桥接网络(external Bridge Network),如果将其他 docker 容器服务放在上面,就不需要额外公开端口,通过
<container_hostname>:<port>
打开对应的服务。3. 启动 caddy
4. 打开防火墙端口 80, 443
以腾讯云服务器为例
使用
- 在
example.com
域名管理中,设置一条 A 记录,将gotify.example.com
定向到我们运行 caddy 容器的服务器的 IP
- 创建一个 gotify 服务并加入 caddy 网络
- 在 Caddyfile 中配置
gotify.example.com
解析到运行 gotify 服务的容器
1. DNS 设置域名解析到 IP
以腾讯云 DNS Pod 为例
2. 创建一个 gotify 服务并加入 caddy 网络
内容如下:
13, 14 行设置了 gotify 服务的用户名和密码,可以自行设置
最后四行令 gotify 加入 npm 网络
启动 gotify 容器
3. 配置 gotify.example.com
解析到容器
删除之前输入的示意内容,新增内容如下:
说明:
test@email.com
改为你的邮箱,用来生成 HTTPS 证书;
example.com
该为你的域名;
gotify-server:80
中的 gotify-server
:在 gotify 的 docker-compose.yml 文件第 6 行 container_name: gotify-server
;
gotify-server:80
中的 80
:在 gotify 的 docker-compose.yml 文件第 10 行 # - 82:80
,冒号前的 82
是指通过转发到的主机端口, 冒号后的 80
才是 gotify 这个容器本来的端口。我们使用 caddy 进行域名直接定向到服务容器,无需转发到主机端口,故注释第 9, 10 行;
以后其他容器想要使用 caddy 进行 reverse_proxy,可以按照第4,5,6行的模板在 Caddyfile 文件中创建新的条目修改 Caddyfile 后重新加载 Caddy:
在浏览器地址栏输入
gotify.example.com
,应该可以正常访问 gotify 服务了,如下图:如果无法正常打开该页面,可以使用下面这条命令查看 caddy 运行 logs
参考链接:
- ChatGPT