文章内容
2025/9/10 19:54:25,作 者: 黄兵
v2bx 设置域名申请 SSL 证书
最近在使用 v2bx 的时候,需要自动申请证书,由于 VPS 运行的有其它网站,导致 80 端口被占用,所以只能使用 DNS 验证的方式申请 SSL 证书,启动 v2bx 的时候,出现了这个错误:
time="2025-09-11T02:25:41Z" level=error msg="Run nodes failed" err="start node controller [https://a.example.com-hysteria2-14] error: request cert error: create lego object error: set provider error: create dns challenge provider error: cloudflare: some credentials information are missing: CLOUDFLARE_EMAIL,CLOUDFLARE_API_KEY or some credentials information are missing: CLOUDFLARE_DNS_API_TOKEN,CLOUDFLARE_ZONE_API_TOKEN"
从上面的日志来看,程序在启动节点控制器时尝试通过 lego(一个 ACME 客户端)向 Cloudflare 申请证书,但缺少必要的 Cloudflare DNS API 凭证,所以报错了:
cloudflare: some credentials information are missing: CLOUDFLARE_EMAIL, CLOUDFLARE_API_KEY or CLOUDFLARE_DNS_API_TOKEN, CLOUDFLARE_ZONE_API_TOKEN
也就是说,您需要提供 Cloudflare 的 DNS API 凭据,有两种方式:
✅ 解决方法
-
使用全局 API Key(老方式,不推荐):
-
登录 Cloudflare 控制台 → 我的资料 (My Profile) → API Tokens。
-
找到 API Key → Global API Key。
-
在环境变量里设置:
-
export CLOUDFLARE_EMAIL="你的Cloudflare账号邮箱" export CLOUDFLARE_API_KEY="你的Global API Key"
-
使用 API Token(推荐):
-
登录 Cloudflare 控制台 → API Tokens → 创建新的 Token。
-
选择模板 Edit zone DNS,并赋予您需要的 Zone 域名的 DNS 编辑权限。
-
复制生成的 Token。
-
在环境变量里设置:
-
export CLOUDFLARE_DNS_API_TOKEN="你的Token"
(有的工具可能要求同时设置 CLOUDFLARE_ZONE_API_TOKEN,具体看文档,但通常一个 CLOUDFLARE_DNS_API_TOKEN 就够了)
具体操作截图如下:
在 Cloudflare 控制台 找到 管理账户,账户 API 令牌,截图如下:
之后点击创建令牌,截图如下:

选择编辑区域 DNS 截图如下:

区域资源选择您需要申请 SSL 证书的域名,截图如下:

点击 继续以显示摘要,就会显示创建区域 DNS 令牌的摘要,截图如下:

点击创建令牌,我们就可以获取该域名的 API 令牌了。
-
检查运行环境
-
如果您是在 Docker 或 Kubernetes 里运行,需要在容器/Pod 的环境变量里配置上述值,而不是仅仅在本地终端执行。
-
比如
docker run时加:
-
-e [email protected] \ -e CLOUDFLARE_API_KEY=xxxxxxxxx
或者
-e CLOUDFLARE_DNS_API_TOKEN=xxxxxxxxx
🔍 建议
-
优先使用 API Token,比全局 API Key 安全。
-
确认运行时环境(systemd、Docker、K8s)都正确传递了环境变量。
-
可以在容器或运行环境里
echo $CLOUDFLARE_DNS_API_TOKEN测试变量是否生效。
v2bx 如何设置CLOUDFLARE_DNS_API_TOKEN
v2bx 在申请证书的时候会调用 DNS-01 Challenge,所以需要在运行环境里正确传递 CLOUDFLARE_DNS_API_TOKEN。
🔧 v2bx 设置 CLOUDFLARE_DNS_API_TOKEN 的方法
1. 如果您是直接运行二进制(systemd 或命令行)
编辑 systemd 的 service 文件,或者直接在运行命令前加上环境变量:
export CLOUDFLARE_DNS_API_TOKEN="你的Token" ./v2bx run
如果是 systemd,可以这样写 /etc/systemd/system/v2bx.service:
[Service] Environment="CLOUDFLARE_DNS_API_TOKEN=你的Token" ExecStart=/usr/local/bin/v2bx run
然后:
systemctl daemon-reload
systemctl restart v2bx
2. 如果您是 Docker 运行 v2bx
在 docker run 或 docker-compose 里加上环境变量:
docker run -d \ --name v2bx \ -e CLOUDFLARE_DNS_API_TOKEN=你的Token \ -v /etc/v2bx:/etc/v2bx \ v2fly/v2bx
docker-compose.yml 写法:
version: "3.8"
services:
v2bx:
image: v2fly/v2bx
container_name: v2bx
restart: always
environment:
- CLOUDFLARE_DNS_API_TOKEN=你的Token
volumes:
- ./config:/etc/v2bx3. 如果您是 Kubernetes 部署
在 Pod/Deployment 的 env 里写:
env:
- name: CLOUDFLARE_DNS_API_TOKEN
value: "你的Token"⚠️ 注意:
-
CLOUDFLARE_DNS_API_TOKEN必须有 Zone:DNS:Edit 权限,且绑定了您申请证书的域名。 -
不要同时设置
CLOUDFLARE_EMAIL和CLOUDFLARE_API_KEY,只要用 Token 就行。
单元测试代码是否应该加入到 git 当中
评论列表