文章内容

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 凭据,有两种方式:

✅ 解决方法

  1. 使用全局 API Key(老方式,不推荐):

    • 登录 Cloudflare 控制台 → 我的资料 (My Profile)API Tokens

    • 找到 API Key → Global API Key。

    • 在环境变量里设置:

export CLOUDFLARE_EMAIL="你的Cloudflare账号邮箱" export CLOUDFLARE_API_KEY="你的Global API Key"
  1. 使用 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 令牌了。

  1. 检查运行环境

    • 如果您是在 DockerKubernetes 里运行,需要在容器/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 rundocker-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/v2bx

3. 如果您是 Kubernetes 部署

在 Pod/Deployment 的 env 里写:

env:
  - name: CLOUDFLARE_DNS_API_TOKEN
    value: "你的Token"

⚠️ 注意:

  • CLOUDFLARE_DNS_API_TOKEN 必须有 Zone:DNS:Edit 权限,且绑定了您申请证书的域名。

  • 不要同时设置 CLOUDFLARE_EMAILCLOUDFLARE_API_KEY,只要用 Token 就行。

分享到:

发表评论

评论列表