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