caddy安装和配置

第一步:确认 Docker Compose 可用

在服务器执行:

1
2
docker --version
docker compose version

如果两个命令都正常显示版本号,就可以继续。

第二步:创建 Caddy 目录

1
2
mkdir -p /opt/docker/caddy/{data,config,sites}
cd /opt/docker/caddy

第三步:创建 Docker 网络

1
docker network create caddy

这个网络以后可以让网站、OpenList 等容器与 Caddy 通信。

第四步:创建 Caddy 配置

执行:

1
2
3
4
5
6
mkdir -p /opt/docker/caddy/conf
cat > /opt/docker/caddy/conf/Caddyfile <<'EOF'
:80 {
respond "Caddy is running!"
}
EOF

这只是用于测试的 HTTP 配置,后面添加域名时再开启自动 HTTPS。

然后创建 Compose 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cat > /opt/docker/caddy/compose.yml <<'EOF'
services:
caddy:
image: caddy:2
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./conf:/etc/caddy
- ./data:/data
- ./config:/config
- ./sites:/srv/sites:ro
networks:
- caddy
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
caddy:
external: true
EOF

这里持久化的 data 目录非常重要,以后 Caddy 申请的证书和私钥会保存在里面,容器重建后也不会丢失。

第五步:启动 Caddy

1
2
3
cd /opt/docker/caddy
docker compose up -d
docker compose ps

如果显示 Up,再执行:

1
curl http://127.0.0.1

正常应该返回:

1
Caddy is running!

这说明 Caddy 已经在本机运行。要从公网访问,还需要在 Oracle Cloud 的安全列表或 NSG 中放行 TCP 80、443,HTTP/3 则需要 UDP 443。

然后在你的域名DNS上添加 A 记录,指向 Caddy 的 IP 地址即可

Caddyfile配置

如果是本地文件

1
2
3
4
xxx.example.com {
root * /srv/sites/game/xxxgame
file_server
}

如果是docker容器

xxx.example.com {
reverse_proxy host.docker.internal:端口号
}

加载配置

修改 Caddyfile 后,不需要重启容器,直接热重载即可。

先检查配置有没有错误:

1
docker exec caddy caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile

如果配置正确,执行:

1
docker exec caddy caddy reload --config /etc/caddy/Caddyfile --adapter caddyfile

这样新配置会立即生效,通常不会中断现有连接。