Skip to content

Instantly share code, notes, and snippets.

@zjx20
Last active January 29, 2026 08:45
Show Gist options
  • Select an option

  • Save zjx20/45b4819fddbe201a2a3a7c40699d6d55 to your computer and use it in GitHub Desktop.

Select an option

Save zjx20/45b4819fddbe201a2a3a7c40699d6d55 to your computer and use it in GitHub Desktop.
Caddy Docker Compose

Caddy Docker Compose 自动化部署方案

这是一个基于 Docker 的现代 Caddy 部署方案,模仿 Nginx 的 conf.d 结构。

如何使用?

  1. 创建一个新文件:vim deploy.sh
  2. deploy.sh的内容粘贴进去。
  3. 赋予权限并运行:
    chmod +x deploy.sh
    ./deploy.sh
  4. 运行完成后,你只需要去 caddy-proxy/config_d 里面把你的域名配置写好,然后执行 reload 即可。

目录结构

  • Caddyfile: 主配置文件,负责引入其他配置。
  • config_d/: 存放具体的站点配置(每个站点一个 .conf 文件)。
  • data/: 存放持久化的 SSL 证书和证书信息(千万不要删除)。
  • config/: 存放 Caddy 内部状态。
  • static/: 存放静态文件,如 html 文件。

常用操作

1. 添加新站点

config_d/ 目录下创建一个新文件,例如 blog.conf

your-domain.com {
    reverse_proxy http://backend_container:8000
}

2. 配置生效 (热重载)

无需重启容器,直接重载配置,不中断现有连接:

docker exec -w /etc/caddy caddy caddy reload

3. 查看日志

查看证书申请状态或访问日志:

docker logs -f caddy
#!/bin/bash
# ==========================================================
# Caddy 自动化部署脚本 (Host Net 模式)
# ==========================================================
set -e
# 1. 定义工作目录
BASE_DIR="$HOME/caddy-proxy"
mkdir -p $BASE_DIR/config_d $BASE_DIR/data $BASE_DIR/config
cd $BASE_DIR
# 2. 生成主 Caddyfile (保持不变)
cat <<EOF > Caddyfile
import /etc/caddy/config_d/*.conf
EOF
# 3. 生成 docker-compose.yml (修改为 network_mode: host)
# 注意:host 模式下不需要 ports 映射,因为它直接占用宿主机端口
cat <<EOF > docker-compose.yml
services:
caddy:
image: caddy:latest
container_name: caddy
restart: always
network_mode: host
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./config_d:/etc/caddy/config_d
- ./data:/data
- ./config:/config
- ./static:/static
EOF
# 4. 生成站点配置示例 (展示如何访问宿主机)
cat <<EOF > config_d/mysite.conf.example
# 示例:反代宿主机上运行在 8080 端口的服务
# your-domain.com {
# reverse_proxy localhost:8080
# encode gzip
# }
EOF
# 5. 启动
echo "正在以 host 网络模式启动 Caddy..."
docker compose up -d
echo "部署完成!Caddy 现在直接监听宿主机的 80/443 端口。"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment