v2中文文档
项目

从源码构建

如果你需要自定义构建(例如带插件),构建Caddy有多种方式:

  • Git:从Git仓库构建
  • xcaddy:使用xcaddy构建
  • Docker:构建自定义Docker镜像

要求:

  • Go 1.20或更高版本

Package Support Files一节包含给这类用户的说明:已在Debian衍生系统上通过APT安装Caddy,但仍需要自定义构建可执行文件用于生产运维。

Git

要求:

  • 已安装Go(见上文)

克隆仓库:

git clone "https://github.com/caddyserver/caddy.git"

如果你没有git,也可以从GitHub下载源码压缩包。每个发布版本也提供源码快照。

构建:

cd caddy/cmd/caddy/
go build

Go程序很容易交叉编译到其他平台。只需设置不同的GOOSGOARCH和/或GOARM环境变量。(详见go文档

例如,当你当前不在Windows上时,编译Windows版Caddy:

GOOS=windows go build

类似地,当你当前不在Linux或ARMv6上时,编译Linux ARMv6版:

GOOS=linux GOARCH=arm GOARM=6 go build

xcaddy

xcaddy命令是构建带版本信息和/或插件Caddy的最简单方式。

要求:

  • 已安装Go(见上文)
  • 确保xcaddy在你的PATH

不需要下载Caddy源码(它会自动完成)。

然后,构建Caddy(包含版本信息)只需:

xcaddy build

若要携带插件构建,使用--with

xcaddy build \
    --with github.com/caddyserver/nginx-adapter
	--with github.com/caddyserver/ntlm-transport@v0.1.1

如你所见,可以通过@语法指定插件版本。版本可以是tag名、commit SHA或分支。

使用xcaddy的跨平台编译方式与go命令一致。例如,为macOS交叉编译:

GOOS=darwin xcaddy build

Docker

你可以使用:builder镜像,快速构建带自定义模块的新Caddy二进制:

FROM caddy:<version>-builder AS builder

RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    xcaddy build \
    --with github.com/caddyserver/nginx-adapter \
    --with github.com/hairyhenderson/caddy-teapot-module@v0.0.3-0

FROM caddy:<version>

COPY --from=builder /usr/bin/caddy /usr/bin/caddy

请将<version>替换为当前最新Caddy版本作为起点。

注意第二个FROM指令:它只是把新构建的二进制覆盖到常规caddy镜像上,因此产物镜像会小很多。

构建阶段用xcaddy构建并注入指定模块,过程与上文一致。--mount=type=cache,target=/go/pkg/mod--mount=type=cache,target=/root/.cache/go-build分别用于缓存Go模块依赖和构建产物,可显著加速后续构建。该参数是Docker特性,不是xcaddy特性。

若使用Docker Compose,请参见我们推荐的compose.yml及使用说明。

Package support files for custom builds for Debian/Ubuntu/Raspbian

该流程旨在:运行自定义caddy二进制的同时,保留caddy软件包中的支持文件。

该流程让用户可以继续利用官方包中的默认配置、systemd服务文件和bash补全。

要求:

  • 这些说明安装caddy软件包
  • 构建你的自定义caddy二进制(见上文),或从下载页下载自定义构建
  • 你的自定义caddy二进制应位于当前目录

流程:

sudo dpkg-divert --divert /usr/bin/caddy.default --rename /usr/bin/caddy
sudo mv ./caddy /usr/bin/caddy.custom
sudo update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.default 10
sudo update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.custom 50
sudo systemctl restart caddy

说明:

  • dpkg-divert会把/usr/bin/caddy二进制移动到/usr/bin/caddy.default,并设置diversion,以防后续软件包再向该路径安装文件。

  • update-alternatives会创建到/usr/bin/caddy的符号链接,指向你期望的caddy二进制。

  • systemctl restart caddy会停止默认版本Caddy服务并启动自定义版本。

你可以执行下面命令并按屏幕提示,在默认/自定义caddy二进制之间切换;完成后重启Caddy服务。

update-alternatives --config caddy

完成上述配置后,你可运行caddy upgrade来升级Caddy。它会尝试按你当前构建中的同款插件组合,下载带最新Caddy版本的新构建,然后替换当前二进制。