强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

02 - 安装与部署 / Installation & Deployment

安装与部署 / Installation & Deployment


🟢 基础 / Basics

方式一:包管理器安装(推荐)

Debian / Ubuntu:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Fedora / RHEL / CentOS:

dnf install 'dnf-command(copr)'
dnf copr enable @caddy/caddy
dnf install caddy

macOS (Homebrew):

brew install caddy

安装完成后,验证:

caddy version
# v2.x.x

方式二:直接下载二进制

github.com/caddyserver/caddy/releases 下载对应平台的二进制文件。

# Linux amd64
curl -LO https://github.com/caddyserver/caddy/releases/download/v2.9.1/caddy_2.9.1_linux_amd64.tar.gz
tar xzf caddy_2.9.1_linux_amd64.tar.gz
sudo mv caddy /usr/bin/caddy
sudo chmod +x /usr/bin/caddy

第一次运行

# 创建一个简单的 Caddyfile
echo 'localhost { respond "Hello, Caddy!" }' > Caddyfile
caddy start
# 访问 https://localhost

caddy start 在后台运行,caddy run 在前台运行(调试用)。


🟡 进阶 / Intermediate

Systemd 服务管理

包管理器安装会自动创建 systemd service。手动安装时需要自己创建:

# /etc/systemd/system/caddy.service
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

常用命令:

sudo systemctl daemon-reload
sudo systemctl enable caddy
sudo systemctl start caddy
sudo systemctl status caddy
journalctl -u caddy --no-pager -n 50   # 查看日志

配置文件路径约定

安装方式Caddyfile 路径数据目录
包管理器/etc/caddy/Caddyfile/var/lib/caddy
手动./Caddyfile~/.config/caddy/Caddyfile~/.local/share/caddy

环境变量配置

通过 systemd override 添加环境变量:

# /etc/systemd/system/caddy.service.d/override.conf
[Service]
Environment="HOME=/var/lib/caddy"
Environment="CADDY_ADMIN=127.0.0.1:2019"

🔴 高级 / Advanced

从源码编译(自定义插件)

使用 xcaddy 构建包含自定义插件的 Caddy:

# 安装 xcaddy
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

# 带插件编译
xcaddy build \
    --with github.com/caddyserver/transform-encoder \
    --with github.com/hslatman/caddy-crowdsec-bouncer \
    --output /usr/local/bin/caddy

# 验证插件是否加载
caddy list-modules | grep -i crowdsec

交叉编译

# 编译 Linux ARM64 版本
GOOS=linux GOARCH=arm64 xcaddy build --output caddy-linux-arm64

# 编译 Windows 版本
GOOS=windows GOARCH=amd64 xcaddy build --output caddy.exe

多实例部署策略

在同一台机器运行多个 Caddy 实例时,需要隔离:

# 实例 1:前端站
CADDY_ADMIN=127.0.0.1:2019 caddy run --config /etc/caddy/site1.json

# 实例 2:API 网关
CADDY_ADMIN=127.0.0.1:2020 caddy run --config /etc/caddy/site2.json

每个实例使用不同的 admin 端口和不同的 data 目录。

在无 root 环境下绑定 80/443

方式一:设置 CAP_NET_BIND_SERVICE

sudo setcap cap_net_bind_service=+ep /usr/bin/caddy

方式二:使用 authbind

sudo touch /etc/authbind/byport/80
sudo chmod 777 /etc/authbind/byport/80
authbind caddy run

方式三:iptables 端口转发

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443

小结 / Summary

层级内容
🟢 基础包管理器安装、caddy start / caddy run
🟡 进阶systemd 服务管理、配置路径、环境变量
🔴 高级xcaddy 自定义编译、交叉编译、多实例、非 root 绑定低端口

下一章:静态文件服务 / Static File Serving