一个使用 Docker 运行 Caddy 的开箱即用模板。
- caddy-dns/cloudflare
- caddy-dns/dnspod
- caddy-dns/alidns
git clone https://github.com/Xm798/docker-caddy.git
- 中国大陆用户可以使用
registry.cn-shanghai.aliyuncs.com/xm798/caddy:latest
代替xm798/caddy:latest
,避免网络原因无法拉取镜像。 - 使用
user: 1000:1000
配置用户和用户组(1000:1000 需要配置为想要使用的用户和用户组 id),避免使用 root 用户运行导致的安全风险。 - 如果不使用标准端口,自行修改
ports
- 如果不想使用网桥,可以直接使用
network_mode: host
在 Caddyfiles/Caddyfile
中头部的全局配置段中添加对应配置,例如:
Cloudflare:
email user@example.com
acme_dns cloudflare "YOUR_CLOUDFLARE_TOKEN"
阿里 DNS:
email user@example.com
acme_dns alidns {
access_key_id "YOUR_KEY"
access_key_secret "YOUR_ID"
}
在 Caddyfiles 文件夹中新建以 .Caddyfile
结尾的文件,例如 proxy.Caddyfile
(当然也可以在 Caddyfile 中直接添加,分文件更便于管理),在其中添加站点配置即可。
以下配置段可以启动一个反向代理,172.17.0.1:8080
是目标地址,如果容器已经加入了 caddy_default
网络,那么可以直接使用 容器:端口
来指定。
hello.example.com {
reverse_proxy 172.17.0.1:8080
}
以下配置段可以启动一个后端是 HTTPS 的代理。
https.example.com {
reverse_proxy https://test.example.com
}
以下配置段可以启动一个后端是 HTTPS 的代理,并且忽略证书验证,这对一些不受信任的自签证书很有效。
https.example.com {
reverse_proxy {
to https://10.0.0.10:443
transport http {
tls
tls_insecure_skip_verify
}
}
}
以下配置段可以配置一个需要使用 PHP 的网站。
php83-fpm:9000
是 php-fpm docker 的地址,/srv/php-api
是站点根目录,注意修改。
php-api.example.com {
root * /srv/php-api
php_fastcgi php83-fpm:9000
file_server
}
设置日志,可以添加以下 snippet:
import log app_name
会自动将日志存储到 ./log/app_name/access.log
中,并应用 roll 规则。
使用 import rp_ipwl 10.0.0.8:1234
可以反代一个具有只允许部分 IP 访问的站点,可以参考:一行代码快速配置 Caddy 站点日志——复用 Caddy 配置段 - Cyrus's Blog。白名单 IP 段在 Caddyfile
的 rp_ipwl
中配置。可以很方便的反代只允许在局域网内访问的服务。
docker network create -d bridge caddy_default
mkdir data config log srv
如果在 compose file 中指定用户了,需要对应修改权限:
sudo chown -R 1000:1000 .
配置完成后,启动容器:
docker compose up -d
修改 Caddyfile 后,可以使用以下命令来重载配置:
docker exec -w /etc/caddy caddy sh -c "caddy fmt --overwrite && caddy reload"