> For AI agents: the site index is available at https://www.juniortree.com/llms.txt; this page is available as Markdown at https://www.juniortree.com/blog/caddy-self-compilation.md.
> Caddy自编译指南：配置Golang环境，安装xcaddy，替换原版Caddy并检查插件

## Page metadata

- **Published:** 2025-06-06
- **Updated:** 2025-06-06
- **Tags:** 云原生
- **Source URL:** https://www.juniortree.com/blog/caddy-self-compilation

# Caddy自编译

## 配置 Golang 环境

需要先配置 Golang 环境：[Download and install - The Go Programming Language](https://go.dev/doc/install)

```bash
wget https://go.dev/dl/go1.24.4.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.24.4.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
```

最后检查一下是否安装成功：

```bash
go version
```

## 安装 xcaddy

如果你是在国内环境下编译的话，需要配置镜像，在这里我使用阿里云的：

```bash
export GOPROXY=https://mirrors.aliyun.com/goproxy/
```

```bash
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
```

安装完成之后需要查找 xcaddy 的安装位置，一般来说 go 会将其安装到 `$HOME/go/bin` 目录下，你可以检查：

![](https://s3.juniortree.com/pic/2025/06/ba939db2e1ccc00c456ea5016b8d74c3.webp)

使用临时路径运行 xcaddy：

```bash
$HOME/go/bin/xcaddy build --with github.com/caddy-dns/alidns
```

这里的 `--with` 后面就需要你找可以编译的 Caddy 插件，我这里编译一个支持阿里云 DNS-01 的 DNS 解析的插件

编译完成之后会自己检查对应的版本

![](https://s3.juniortree.com/pic/2025/06/416a4b2c0ad513b157d7f1f7c6874d2e.webp)

## 替换原版 Caddy

先停掉原本原版的 Caddy：

```bash
systemctl stop caddy
```

随后，建议让 Caddy 服务不自动重启／不再开机启动（避免替换过程中被意外重启）：

```bash
sudo systemctl disable caddy
```

寻找原本 Caddy 的二进制位置：

```bash
which caddy
```

一般来说会在 `/usr/bin/caddy` 位置下

假设查到官方二进制在 `/usr/bin/caddy`，那就进行备份：

```bash
mv /usr/bin/caddy /usr/bin/caddy.backup-official
```

之后将新编译的二进制文件移动到原来的位置

```bash
sudo cp ./caddy /usr/bin/caddy
```

最好重新设置一下权限，避免出现问题：

```bash
sudo chown root:root /usr/bin/caddy
sudo chmod 755 /usr/bin/caddy
```

最后检查一下是否更新成功：

```bash
caddy version
```

还可以检查一下插件列表，看看是不是有你编译的插件：

```bash
caddy list-modules
```

![](https://s3.juniortree.com/pic/2025/06/a0ca396fe20bb7ad65723ea4f0aa4c52.webp)

## 是否需要修改 systemd Service 文件

一般来说，如果你是直接替换官方的二进制文件，那其实没有必要修改文件，直接用原来的就可以了，但是你要是自己整了活，那就只能自己重新写了

但是我比较菜，这里就不写参考的配置文件了
