文档
一个 项目

从源代码构建

如果您需要自定义构建(例如,带有插件),则有多种构建 Caddy 的选项

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

要求

  • 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 程序很容易为其他平台编译。只需设置不同的 GOOSGOARCH 和/或 GOARM 环境变量即可。(有关详细信息,请参阅 Go 文档。

例如,要在您不是在 Windows 上时为 Windows 编译 Caddy

GOOS=windows go build

或者类似地,当您不在 Linux 或 ARMv6 上时为 Linux ARMv6 编译 Caddy

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,类似于 上面概述的 过程。

要使用 Docker Compose,请参阅我们推荐的 compose.yml 和使用说明。

用于 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,并设置一个转移,以防任何软件包想要将文件安装到此位置。

  • update-alternatives 将创建一个从所需的 caddy 二进制文件到 /usr/bin/caddy 的符号链接

  • systemctl restart caddy 将关闭默认版本的 Caddy 服务器并启动自定义版本。

您可以通过执行以下命令,并按照屏幕上的信息,在自定义和默认 caddy 二进制文件之间进行切换。然后,重启 Caddy 服务。

update-alternatives --config caddy

要在此之后升级 Caddy,您可以运行 caddy upgrade。这会尝试下载一个与您当前构建具有相同插件的构建,以及最新版本的 Caddy,然后用新的二进制文件替换当前二进制文件。