HTTPS
运行与守护
交给 systemd,或者用容器跑;把端口和数据目录安排妥当。
Caddy 是服务器,会一直跑着。正式环境里不要靠 SSH 会话里的前台进程来维持它,交给系统的服务管理器。
Linux systemd 服务
Debian 系的官方包会自动启动名为 caddy 的服务。Fedora 系的包带着单元文件但默认未启用,需要手动开启:
sudo systemctl enable --now caddy
sudo systemctl status caddy
sudo systemctl reload caddy服务的配置文件在 /etc/caddy/Caddyfile,数据在/var/lib/caddy。改完配置用 systemctl reload caddy做零停机重载,不要 restart。
Docker Compose
services:
caddy:
image: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:443/udp 是 HTTP/3 用的,别漏。数据卷必须持久,否则每次重建容器都会重新签证书。
手动装成服务
静态二进制也可以注册成 systemd 服务,单元文件大致如下:
[Unit]
Description=Caddy
After=network.target network-online.target
Requires=network-online.target
[Service]
User=caddy
Group=caddy
ExecStart=/usr/local/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
PrivateTmp=true
ProtectSystem=full
[Install]
WantedBy=multi-user.target绑定低端口
非 root 用户绑定 80、443 需要额外授权。Linux 上一条命令搞定:
sudo setcap cap_net_bind_service=+ep ./caddy如果不想每次都输密码,可以用 sudo visudo 允许特定用户免密执行setcap。请谨慎对待这类授权。
目录约定
| 目录 | 用途 |
|---|---|
$XDG_DATA_HOME/caddy | 数据目录:证书、私钥、本地 CA |
$XDG_CONFIG_HOME/caddy | 配置目录:自动保存的配置快照 |
/etc/caddy | Debian 系发行版的主配置位置 |
/var/lib/caddy | Debian 系发行版的数据目录 |
数据目录必须可写且持久,这是证书自动续期的前提。怀疑环境有问题时,用caddy environ 看 Caddy 实际拿到的环境变量。
防火墙
至少开放这些端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 80 | TCP | HTTP 跳转与 HTTP-01 挑战 |
| 443 | TCP | HTTPS 与 TLS-ALPN-01 挑战 |
| 443 | UDP | HTTP/3 |
| 2019 | 仅本机 | 管理端点 |