no more nginx, try caddy!
为什么用 caddy, 因为 caddy 可以自动申请 TLS 证书(Lets’ Encrypt),维护证书一直是我的痛点。
OS: CentOS Linux 7 (Core) x86_64
安装
docker pull caddy目录结构
/opt/caddy/
├── docker-compose.yml
├── Caddyfile
├── data/
└── config/其中:
- data/:保存证书(非常重要)
- config/:Caddy 配置缓存
配置及运行
我的站点结构为一个主站点导航页,以及四个子站点放在二级目录。
https://example.com/
https://example.com/site1/
https://example.com/site2/
https://example.com/site3/
https://example.com/site4/
配置
▶
docker-compose.yml
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./data:/data
- ./config:/config
- /path/to/site:/path/to/site:ro
- /path/to/site1:/path/to/site1:ro
- /path/to/site2:/path/to/site2:ro
- /path/to/site3:/path/to/site3:ro
- /path/to/site4:/path/to/site4:ro这里的 :ro 表示只读挂载(Read Only)。
对于静态文件目录来说,Caddy 只需要读取内容,不需要写入,因此使用只读挂载更安全。
▶
Caddyfile
example.com {
root * /path/to/site
file_server
handle_path /site1/* {
root * /path/to/site1
file_server
}
handle_path /site2/* {
root * /path/to/site2
file_server
}
handle_path /site3/* {
root * /path/to/site3
file_server
}
handle_path /site4/* {
root * /path/to/site4
file_server
}
}运行
cd /opt/caddy
docker compose up -d如果修改了挂载目录,使用 docker compose restart 不会生效,需要执行 docker compose down 再重新启动。
二级站点及代理转发
example.com {
...
}
# 二级站点
aaa.example.com {
reverse_proxy host.docker.internal:3000 # 代理转发访问宿主机3000端口 | docker部署写法
}services:
caddy:
...
extra_hosts:
- "host.docker.internal:host-gateway"no more nginx, try caddy!
http://guoguo.host/blog/p/cec7493a.html