从源码构建
构建 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 编译 Caddy:
GOOS=linux GOARCH=arm GOARM=6 go build
xcaddy
使用xcaddy
命令是构建包含版本信息和/或插件的最简单方法。
要求:
- 安装了Go(见上文)
- 确保
xcaddy
在你的PATH
变量中
你不需要下载Caddy的源码,xcaddy会自动帮你完成。
然后,你可以很简单地构建Caddy(带有版本信息):
xcaddy build
如果想装上插件,请使用--with
:
xcaddy build \
--with github.com/caddyserver/nginx-adapter
--with github.com/caddyserver/ntlm-transport@v0.1.1
如你所见,可以使用@
语法自定义插件的版本。版本可以是标签名称、提交SHA或者分支。
跨平台编译xcaddy
使用相同的go
命令(见下文)。
跨平台
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
。为macOS平台进行交叉编译:
GOOS=darwin xcaddy build
Debian/Ubuntu/Raspbian 自定义构建的软件包支持文件
此步骤目的在于简化运行自定义caddy
二进制文件,同时保留caddy
包中的支持文件。
此步骤允许用户利用官方软件包中的默认配置、systemd服务文件和脚本自动提示。
要求:
- 根据这些说明安装
caddy
- 根据本文档中列出的过程构建自定义二进制文件。(往上看)
- 自定义
caddy
二进制文件应位于当前目录中。
步骤:
dpkg-divert --divert /usr/bin/caddy.default --rename /usr/bin/caddy mv ./caddy /usr/bin/caddy.custom update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.default 10 update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.custom 50
dpkg-divert
将/usr/bin/caddy
二进制文件移动到/usr/bin/caddy.default
,并放置一个转移(diversion),防止任何包想要将文件安装到这个位置(指/usr/bin/caddy
)。
update-alternatives
将从所需的caddy二进制文件创建一个符号链接到/usr/bin/caddy
。
你可以通过下面的命令在自定义和默认caddy二进制文件之间进行修改
update-alternatives --config caddy
并按照屏幕上的信息进行操作。