从源代码构建
如果你需要定制构建(例如包含插件),构建 Caddy 有多种方式:
要求:
- Go 1.20 或更高版本
软件包支持文件 部分包含了为在 Debian 衍生系统上使用 APT 命令安装了 Caddy 的用户但需要自定义构建可执行文件时的说明。
Git
要求:
- 已安装 Go(见上文)
克隆仓库:
git clone "https://github.com/caddyserver/caddy.git"
如果你没有 git,可以从 GitHub 下载源代码归档。每个发行版也都有源代码快照。
构建:
cd caddy/cmd/caddy/
go build
Go 程序便于为其他平台编译。只需设置不同的 GOOS、GOARCH 和/或 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
如你所见,你可以使用 @ 语法自定义插件的版本。版本可以是标签名、提交 SHA 或分支。
使用 xcaddy 进行交叉编译的方式与使用 go 命令相同。例如,要为 macOS 交叉编译:
GOOS=darwin xcaddy build
Docker
你可以使用 :builder 镜像作为构建包含自定义模块的新 Caddy 二进制文件的捷径:
FROM caddy:<version>-builder AS builder
RUN 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 按照提供的模块构建 Caddy,流程与上文 xcaddy 部分所述类似。
要使用 Docker Compose,请参阅我们推荐的 compose.yml 和使用说明。
针对 Debian/Ubuntu/Raspbian 的自定义构建的软件包支持文件
此流程旨在简化在保留 caddy 软件包支持文件的同时运行自定义 caddy 二进制文件的操作。
该流程允许用户利用官方包的默认配置、systemd 服务文件和 bash 完成脚本。
要求:
步骤:
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会在所需的 caddy 二进制和/usr/bin/caddy之间创建一个符号链接 -
systemctl restart caddy会关闭默认版本的 Caddy 服务并启动自定义版本。
你可以通过执行下面的命令并按照屏幕上的提示在自定义和默认的 caddy 二进制之间切换。然后重启 Caddy 服务。
update-alternatives --config caddy
在此之后要升级 Caddy,你可以运行 caddy upgrade。该命令会尝试下载 一个包含与你当前构建相同插件的最新版本 Caddy,然后将当前二进制替换为新版本。