caddy Docker 容器代理介绍与使用
type
Post
status
Published
date
May 17, 2023
slug
caddy
summary
tags
工具
caddy
icon
如果你想在宿主机上直接运行 Caddy 并为 Docker 容器内的服务提供反代,参考 https://blog.insv.xyz/caddy-host
介绍
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 为例
以 Cloudflare 为例
如果红框内的小云朵不关的话,需要设置 SSL 为 Full
2. 创建一个 gotify 服务并加入 caddy 网络
内容如下:
13, 14 行设置了 gotify 服务的用户名和密码,可以自行设置
最后四行令 gotify 加入 caddy 网络
如果想访问主机服务,例如主机直接起了个 127.0.0.1:8000
,想通过 caddy 为其反代,docker-compose.yml 内容如下:
Caddyfile 格式如下
启动 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:(需要在 caddy 目录下)
将这个命令封装成脚本
在 caddy 目录下新建文件
reload.sh
给
reload.sh
执行权限现在,可以直接输入
./relaod.sh
就能执行该命令了以后有改动时,只要 cd 到 caddy 目录下,然后
./reload.sh
就行了如果你甚至不想 cd 到 caddy 目录下,可以在脚本中添加
cd 到 caddy 目录
, 然后将这个脚本 mv 到 /usr/local/bin/
目录下在浏览器地址栏输入
gotify.example.com
,应该可以正常访问 gotify 服务了,如下图:如果无法正常打开该页面,可以使用下面这条命令查看 caddy 运行 logs
参考链接:
- ChatGPT