今天的这篇文章,是小编的学生:
【Pseudowang】
所著。
一位既有才华、又帅气的小伙子,
希望大家多多支持

由于之前为博客网站搭建了 Umami 统计工具,并计划将 Vaultwarden 服务从 Homelab 迁移到服务器上运行,以便在外网访问自己的 Vaultwarden 服务,我开始学习使用 Caddy 来获取 SSL 证书。通过将网站绑定到我在 Cloudflare 上的域名中,我可以更方便地管理和访问这些服务。
我的服务器系统为:Debian 12
Caddy
这是 Caddy的官网:
https://caddyserver.com/
1、安装Caddy
安装该软件包后, Caddy 会作为名为 caddy
的 systemd 服务自动启动和运行稳定版本:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
如果执行命令有报错的话,不妨先执行一下apt-get update
先
然后我们运行
caddy
没有报错的话就是安装成功了。
2、运行Caddy
caddy run
和 systemctl start caddy
是启动 Caddy 的两种不同方法
caddy run
:通常用于开发、调试或测试环境中,因为她会直接将输出打印到终端, 便于查看日志和调试信息。也不会将 Caddy 当作系统服务来管理, 它只是在当前会话中启动 Caddy 可以通过Ctrl + C
停止systemctl start caddy
:会将 Caddy 作为一个系统服务来启动。通过 systemctl 启动的服务可以由系统自动管理,包括在系统启动时自动启动、记录日志、监控状态等
我这里用的是caddy run
以及 caddy start
等。Caddy 也有 Command Line页面来解释每个命令的作用和意思
如果你打算用 Caddy 自带的服务管理框架的时候,你运行caddy start
或者caddy run
的时候可能会碰到一下报错

我猜测是 systemctl
已经启动了 caddy 服务,使用 Caddy 自带的服务管理框架启动的时候,因为systemctl
已经启动了caddy服务, 所以将caddy的 API 端口给占用了,所以我们只需要netstat -tulp | grep 2019
,找到占用的进程号

然后使用kill -9 2804
将它 kill 掉
这个时候我们再使用caddy start
就不会报错咯

然后可以直接通过 IP 在浏览器中访问的到网页

3、Caddy的基础配置
(1)进入 caddy 配置文件的目录
cd /etc/caddy
(2)更改caddy端口
如果你服务器的80端口和443端口给占用了,可以将caddy的https
和http
端口给更改,只需要在Caddyfile
中添加。Caddy社区回答
{
https_port 8443
http_port 8080
local_certs
}
(3)添加 Module dns.providers.cloudflare
[NON-STANDARD]此模块不随 Caddy 一同提供。您可以通过使用 xcaddy 或我们的下载页面添加它。非标准模块可能由社区开发,并不受 Caddy 项目的官方支持或维护。
**Custom builds:****[https://github.com/caddy-dns/cloudflare](https://github.com/caddy-dns/cloudflare)**
**Custom builds:** `xcaddy build --with github.com/caddy-dns/cloudflare`
(4)Go的安装
选择好自己的系统,右键复制地址

回到终端中执行
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz #后面为你刚刚在浏览器中复制的地址
删除之前的Go 安装文件已经将刚刚下载好的包解压到 usr/local
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
将 usr/local/go/bin 添加到PATH环境变量之中
export PATH=$PATH:/usr/local/go/bin
输入以下命令来验证是否成功安装Go
go version
(5)安装xcaddy
前提条件: 已安装Go
你可以从源代码构建xcaddy
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
对于 Debian, Ubuntu和 Raspbian,可以直接从官方的 Cloudsmith 仓库获取 xcaddy
包 (我选的是这个方法)
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-xcaddy-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list
sudo apt update
sudo apt install xcaddy
(6)构建 dns.providers.cloudflare 模块
我选择回到/etc/caddy/
目录下运行, 因为会生成一个执行文件
xcaddy build --with github.com/caddy-dns/cloudflare

4、创建 Cloudflare 的 tokens
登录 Cloudflare 并转到要使用Caddy的域名
向下滑之后右边你会看到标题为 "API" 的部分, 点击 "Get your API token"

3.然后点击 “Create Token”

4.在 “User API Tokens” 页面,滑动到底部, 点击 "Create Custom Token"

5.给你的Token 命名, 然后添加两个 "Permissions"
Zone - Zone - Read
Zone - DNS -Edit

6.然后点击 “Continue to summary”, 现在就能看到您的API token了,然后将它复制下来

5、Caddyfile编写
可以将Caddyfile
文件里面的内容全部注释掉或者删掉,因为我的Umami
服务是在3000
端口运行的,所以要reverse_proxy 127.0.0.1:3000
。
以下是我的Caddyfile(example.com要换成你的域名)
example.com {
reverse_proxy 127.0.0.1:3000
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
}
然后在终端中输入之前拿到的Cloudflare API token
export CLOUDFLARE_API_TOKEN="your-api-token"
这个环境变量只在当前的终端会话中有效,一旦你关闭了终端或者退出了登录,这个环境变量就会失效。
如果你希望在每次登录时自动设置这个环境变量,可以将它添加到你的 shell 配置文件中,比如 .bashrc
或 .bash_profile
6、运行
在/etc/caddy/
文件夹下执行./caddy run
启动(如果有报错大概率是端口冲突,前面有解决方法)。
在 Cloudflare 中添加好记录,就可以尝试访问了

访问成功!!
参考文档
Caddy官方文档
https://samedwardes.com/blog/2023-11-19-homelab-tls-with-caddy-and-cloudflare/
https://roelofjanelsinga.com/articles/using-caddy-ssl-with-cloudflare/
https://developers.cloudflare.com/fundamentals/api/how-to/create-via-api/
https://caddyserver.com/docs/modules/dns.providers.cloudflare
https://www.youtube.com/watch?v=WgUV_BlHvj0
https://github.com/caddy-dns/cloudflare




