Caddy 安装配置 #
安装概述 #
Caddy 是一个独立的二进制文件,无需运行时依赖。你可以通过多种方式安装 Caddy:
text
┌─────────────────────────────────────────────────────────────┐
│ Caddy 安装方式 │
├─────────────────────────────────────────────────────────────┤
│ 📦 官方二进制文件 - 推荐,最简单 │
│ 🐳 Docker - 容器化部署 │
│ 📦 包管理器 - apt, yum, brew, scoop │
│ 🔨 从源码编译 - 自定义功能 │
└─────────────────────────────────────────────────────────────┘
Linux 安装 #
方法一:官方安装脚本(推荐) #
bash
# 一键安装
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
方法二:手动下载二进制文件 #
bash
# 下载最新版本
cd /tmp
wget https://github.com/caddyserver/caddy/releases/download/v2.7.6/caddy_2.7.6_linux_amd64.tar.gz
# 解压
tar -xzf caddy_2.7.6_linux_amd64.tar.gz
# 移动到系统目录
sudo mv caddy /usr/local/bin/
# 设置权限
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
# 验证安装
caddy version
方法三:使用包管理器 #
Debian/Ubuntu #
bash
# 添加 Caddy 仓库
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
CentOS/RHEL/Fedora #
bash
# 添加 Caddy 仓库
sudo dnf install 'dnf-command(copr)'
sudo dnf copr enable @caddy/caddy
# 安装
sudo dnf install caddy
Arch Linux #
bash
# 使用 pacman 安装
sudo pacman -S caddy
systemd 服务配置 #
bash
# 创建 caddy 用户
sudo groupadd --system caddy
sudo useradd --system \
--gid caddy \
--create-home \
--home-dir /var/lib/caddy \
--shell /usr/sbin/nologin \
--comment "Caddy web server" \
caddy
# 创建配置目录
sudo mkdir /etc/caddy
sudo chown -R caddy:caddy /etc/caddy
sudo chmod 755 /etc/caddy
# 创建站点目录
sudo mkdir /var/www/html
sudo chown -R caddy:caddy /var/www/html
# 创建日志目录
sudo mkdir -p /var/log/caddy
sudo chown -R caddy:caddy /var/log/caddy
# 创建 systemd 服务文件
sudo tee /etc/systemd/system/caddy.service << 'EOF'
[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/local/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
EOF
# 重载 systemd
sudo systemctl daemon-reload
# 启动服务
sudo systemctl enable caddy
sudo systemctl start caddy
# 查看状态
sudo systemctl status caddy
macOS 安装 #
方法一:Homebrew(推荐) #
bash
# 使用 Homebrew 安装
brew install caddy
# 验证安装
caddy version
方法二:手动下载 #
bash
# 下载
cd /tmp
curl -LO "https://github.com/caddyserver/caddy/releases/download/v2.7.6/caddy_2.7.6_mac_amd64.tar.gz"
# 解压
tar -xzf caddy_2.7.6_mac_amd64.tar.gz
# 移动到系统目录
sudo mv caddy /usr/local/bin/
# 验证
caddy version
使用 launchd 服务 #
bash
# 创建配置目录
mkdir -p ~/Library/Application\ Support/Caddy
# 创建 launchd 配置
cat > ~/Library/LaunchAgents/com.caddyserver.web.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.caddyserver.web</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/caddy</string>
<string>run</string>
<string>--config</string>
<string>/Users/你的用户名/Caddyfile</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/caddy.log</string>
<key>StandardErrorPath</key>
<string>/tmp/caddy.log</string>
</dict>
</plist>
EOF
# 加载服务
launchctl load ~/Library/LaunchAgents/com.caddyserver.web.plist
Windows 安装 #
方法一:Scoop(推荐) #
powershell
# 安装 Scoop(如果未安装)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
# 安装 Caddy
scoop install caddy
# 验证
caddy version
方法二:Chocolatey #
powershell
# 安装 Chocolatey(如果未安装)
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# 安装 Caddy
choco install caddy
# 验证
caddy version
方法三:手动下载 #
powershell
# 下载
Invoke-WebRequest -Uri "https://github.com/caddyserver/caddy/releases/download/v2.7.6/caddy_2.7.6_windows_amd64.zip" -OutFile "caddy.zip"
# 解压
Expand-Archive -Path "caddy.zip" -DestinationPath "C:\caddy"
# 添加到系统 PATH
$env:Path += ";C:\caddy"
[Environment]::SetEnvironmentVariable("Path", $env:Path, [EnvironmentVariableTarget]::User)
# 验证
caddy version
Windows 服务配置 #
powershell
# 创建配置目录
New-Item -ItemType Directory -Path "C:\etc\caddy"
New-Item -ItemType Directory -Path "C:\var\log\caddy"
New-Item -ItemType Directory -Path "C:\var\www\html"
# 使用 NSSM 安装为服务
# 1. 下载 NSSM: https://nssm.cc/download
# 2. 安装服务
nssm install Caddy "C:\caddy\caddy.exe" "run --config C:\etc\caddy\Caddyfile"
# 启动服务
nssm start Caddy
Docker 安装 #
基础运行 #
bash
# 快速启动
docker run -d \
--name caddy \
-p 80:80 \
-p 443:443 \
-v /path/to/Caddyfile:/etc/caddy/Caddyfile \
-v /path/to/site:/srv \
-v caddy_data:/data \
-v caddy_config:/config \
caddy:latest
# 验证
docker ps
docker logs caddy
Docker Compose 配置 #
yaml
# docker-compose.yml
version: "3.8"
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp" # HTTP/3
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./site:/srv
- caddy_data:/data
- caddy_config:/config
environment:
- TZ=Asia/Shanghai
volumes:
caddy_data:
caddy_config:
bash
# 启动
docker-compose up -d
# 查看日志
docker-compose logs -f caddy
# 重载配置
docker-compose exec caddy caddy reload --config /etc/caddy/Caddyfile
自定义 Docker 镜像 #
dockerfile
# Dockerfile
FROM caddy:latest
# 复制配置文件
COPY Caddyfile /etc/caddy/Caddyfile
# 复制站点文件
COPY site /srv
# 安装插件(可选)
# RUN caddy add-package github.com/caddyserver/forwardproxy
bash
# 构建镜像
docker build -t my-caddy .
# 运行
docker run -d -p 80:80 -p 443:443 my-caddy
从源码编译 #
环境准备 #
bash
# 安装 Go(需要 1.19 或更高版本)
# Linux
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
# macOS
brew install go
# 验证
go version
编译步骤 #
bash
# 克隆仓库
git clone https://github.com/caddyserver/caddy.git
cd caddy/cmd/caddy
# 编译
go build -o caddy
# 移动到系统目录
sudo mv caddy /usr/local/bin/
# 验证
caddy version
带插件编译 #
bash
# 创建构建目录
mkdir caddy-build
cd caddy-build
# 创建 main.go
cat > main.go << 'EOF'
package main
import (
caddycmd "github.com/caddyserver/caddy/v2/cmd"
_ "github.com/caddyserver/caddy/v2/modules/standard"
// 添加你需要的插件
_ "github.com/caddyserver/forwardproxy"
)
func main() {
caddycmd.Main()
}
EOF
# 初始化模块
go mod init caddy-build
go get github.com/caddyserver/caddy/v2
go get github.com/caddyserver/forwardproxy
# 编译
go build -o caddy
# 验证插件
./caddy list-modules | grep forwardproxy
安装验证 #
检查版本 #
bash
caddy version
# 输出: v2.7.6 h1:...
检查功能 #
bash
# 列出所有模块
caddy list-modules
# 列出已安装的插件
caddy list-modules | grep -i "cloudflare\|forwardproxy"
# 验证配置文件语法
caddy validate --config /etc/caddy/Caddyfile
快速测试 #
bash
# 创建测试配置
mkdir -p /tmp/caddy-test
cat > /tmp/caddy-test/Caddyfile << 'EOF'
:8080 {
respond "Hello, Caddy!"
}
EOF
# 启动测试服务器
caddy run --config /tmp/caddy-test/Caddyfile
# 在另一个终端测试
curl http://localhost:8080
# 输出: Hello, Caddy!
目录结构 #
安装完成后,建议创建以下目录结构:
text
/etc/caddy/
├── Caddyfile # 主配置文件
├── sites/ # 多站点配置
│ ├── site1.caddyfile
│ └── site2.caddyfile
└── certs/ # 自定义证书(可选)
/var/www/
├── html/ # 默认站点目录
├── site1/ # 站点1目录
└── site2/ # 站点2目录
/var/log/caddy/
├── access.log # 访问日志
└── error.log # 错误日志
/var/lib/caddy/
├── .local/ # Caddy 数据目录
│ └── share/
│ └── caddy/
│ ├── certificates/ # 自动获取的证书
│ └── locks/ # 锁文件
└── config/ # 配置持久化
权限配置 #
Linux/macOS 权限 #
bash
# Caddy 需要绑定 80 和 443 端口(特权端口)
# 方法一:使用 setcap(推荐)
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
# 方法二:使用 sudo 运行
sudo caddy run --config Caddyfile
# 方法三:使用非特权端口
# Caddyfile 中使用 :8080 而不是 :80
文件权限 #
bash
# 设置配置目录权限
sudo chown -R caddy:caddy /etc/caddy
sudo chmod 755 /etc/caddy
# 设置站点目录权限
sudo chown -R caddy:caddy /var/www
sudo chmod -R 755 /var/www
# 设置日志目录权限
sudo chown -R caddy:caddy /var/log/caddy
sudo chmod 755 /var/log/caddy
环境变量 #
Caddy 支持通过环境变量配置:
bash
# 设置环境变量
export CADDY_ADMIN=0.0.0.0:2019
export CADDY_CONFIG=/etc/caddy/Caddyfile
export XDG_DATA_HOME=/var/lib
export XDG_CONFIG_HOME=/var/lib/caddy/config
# 在 Caddyfile 中使用环境变量
# {$DOMAIN} {
# respond "Hello from {$DOMAIN}"
# }
常用环境变量 #
| 变量 | 说明 | 默认值 |
|---|---|---|
| CADDY_ADMIN | 管理 API 地址 | localhost:2019 |
| CADDY_CONFIG | 配置文件路径 | - |
| XDG_DATA_HOME | 数据目录 | ~/.local/share |
| XDG_CONFIG_HOME | 配置目录 | ~/.config |
下一步 #
安装完成后,接下来学习 配置基础 开始编写你的第一个 Caddyfile!
最后更新:2026-03-28