Cloudflare DNS 配置
添加 DNS 解析记录
登录 Cloudflare 控制台,进入目标域名的 DNS → Records 页面,添加一条 A 记录:
| 字段 | 值 | 说明 |
|---|---|---|
| Type | A |
IPv4 地址记录 |
| Name | cpa |
子域名前缀,最终域名例如为 cpa.test.de |
| Content | <服务器公网 IP> |
源站的真实 IP 地址 |
| Proxy status | Proxied(橙云) | 启用 Cloudflare 代理,隐藏源站 IP,保证Origin CA 证书正常工作 |
SSL/TLS 加密模式
进入 SSL/TLS → Overview 页面,将加密模式设置为 Full (Strict)。
该模式要求 Cloudflare 边缘节点与源站之间的连接使用有效的 TLS 证书,并对证书进行严格验证。配合后续签发的 Origin CA 证书,可实现完整的端到端加密。
[!NOTE]
Full 与 Full (Strict) 的区别: Full 模式下 Cloudflare 不验证源站证书的有效性(允许自签名),存在被中间人攻击的风险。Full (Strict) 则要求源站证书由 Cloudflare 信任的 CA 签发(包括 Origin CA),安全性更高。
服务器环境准备
防火墙(UFW)配置
安装 UFW:
apt update && apt install ufw -y
放行 SSH 端口并启用防火墙:
ufw allow 22/tcp comment 'SSH'
ufw enable
[!WARNING]
在启用 UFW 之前,务必确认已放行 SSH 端口(默认 22)。 若服务器使用非标准 SSH 端口,请将上述命令中的22替换为实际端口号。
仅允许 Cloudflare IP 段访问 HTTP/HTTPS 端口:
从 Cloudflare 官方接口动态获取其边缘节点的 IPv4 和 IPv6 地址段,并逐条写入 UFW 规则。
curl -s https://www.cloudflare.com/ips-v4 | while read -r ip; do
ufw allow from "$ip" to any port 80,443 proto tcp comment 'Cloudflare IPv4'
done
curl -s https://www.cloudflare.com/ips-v6 | while read -r ip; do
ufw allow from "$ip" to any port 80,443 proto tcp comment 'Cloudflare IPv6'
done
验证规则是否生效:
ufw status numbered
预期输出中应包含多条来源为 Cloudflare IP 段、目标端口为 80,443 的 ALLOW 规则。
[!NOTE]
Cloudflare 会不定期更新其 IP 段。可定期重新执行上述命令以同步最新的 IP 列表,或编写 cron 定时任务自动化此流程。
创建目录结构
为 Caddy 和 CPA 分别创建独立的工作目录:
mkdir -p /opt/caddy/{certs,data,config} /opt/cpa
目录用途说明:
| 路径 | 用途 |
|---|---|
/opt/caddy/certs/ |
存放 Cloudflare Origin CA 证书及私钥 |
/opt/caddy/data/ |
~ |
/opt/caddy/config/ |
~ |
/opt/cpa/ |
CPA 配置文件、认证数据及日志 |
创建 Docker 网络
此命令创建一个名为 caddy_net 的用户自定义桥接网络,支持容器间通过 容器名称 进行 DNS 解析。
docker network create caddy_net
签发 Cloudflare Origin CA 证书
Origin CA 证书是 Cloudflare 签发的专用证书,用于加密 Cloudflare 边缘节点与源站之间的通信。该证书 仅被 Cloudflare 信任,不被浏览器或其他客户端信任,因此不能脱离 Cloudflare 代理单独使用。
创建证书
进入 Cloudflare 控制台的 SSL/TLS → Origin Server 页面,点击 Create Certificate。
配置选项:
| 选项 | 推荐值 | 说明 |
|---|---|---|
| Private key type | ECC | 相比 RSA,ECC 密钥长度更短、计算效率更高 |
| Certificate Validity | 15 years | Origin CA 证书最长有效期 |
| Hostnames | *.test.de, test.de |
默认值即可 |
![Cloudflare Origin CA 证书创建界面]
保存证书与私钥
创建完成后,页面将展示 Origin Certificate(证书内容)和 Private Key(私钥内容)。
[!WARNING]
私钥仅在此页面展示一次,关闭后无法再次查看。
务必在关闭页面前完成保存。若丢失,需吊销当前证书并重新签发。
将证书和私钥分别写入服务器文件:
# 将 Origin Certificate 的完整内容(包含 -----BEGIN CERTIFICATE-----
# 和 -----END CERTIFICATE-----)粘贴写入以下文件
nano /opt/caddy/certs/cf.crt
# 将 Private Key 的完整内容(包含 -----BEGIN PRIVATE KEY-----
# 和 -----END PRIVATE KEY-----)粘贴写入以下文件
nano /opt/caddy/certs/cf.key
部署 CLIProxyAPI
编写 CPA 配置文件
cat > /opt/cpa/config.yaml << 'EOF'
host: "0.0.0.0"
port: 8317
auth-dir: "~/.cli-proxy-api"
request-retry: 3
quota-exceeded:
switch-project: true
switch-preview-model: true
api-keys:
- "your-api-key-here"
remote-management:
allow-remote: true
secret-key: "your-strong-secret-here"
disable-control-panel: false
panel-github-repository: "https://github.com/kongkongyo/Cli-Proxy-API-Management-Center"
logging-to-file: true
usage-statistics-enabled: true
logs-max-total-size-mb: 100
EOF
[!WARNING]
将api-keys和secret-key替换为高强度随机字符串。
编写 Docker Compose 配置
cat > /opt/cpa/docker-compose.yml << 'EOF'
services:
cli-proxy-api:
image: eceasy/cli-proxy-api:latest
container_name: cli-proxy-api
networks:
- caddy_net
volumes:
- ./config.yaml:/CLIProxyAPI/config.yaml
- ./auths:/root/.cli-proxy-api
- ./logs:/CLIProxyAPI/logs
restart: unless-stopped
networks:
caddy_net:
external: true
EOF
启动 CPA 服务
cd /opt/cpa && docker compose up -d
部署 Caddy 反向代理
编写 Caddyfile
cat > /opt/caddy/Caddyfile << 'EOF'
cpa.test.de {
tls /etc/caddy/certs/cf.crt /etc/caddy/certs/cf.key
reverse_proxy cli-proxy-api:8317
}
EOF
[!IMPORTANT]
将cpa.test.de替换为你的实际域名,与前面创建的 DNS A 记录一致。
编写 Docker Compose 配置
cat > /opt/caddy/docker-compose.yml << 'EOF'
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./certs:/etc/caddy/certs:ro
- ./data:/data
- ./config:/config
networks:
- caddy_net
networks:
caddy_net:
external: true
EOF
配置要点:
ports: "80:80"和"443:443"– Caddy 需要对宿主机暴露 HTTP/HTTPS 端口以接收来自 Cloudflare 的流量。端口 80 用于处理 HTTP 到 HTTPS 的重定向。
启动 Caddy
cd /opt/caddy && docker compose up -d
验证与测试
管理面板访问
在浏览器中访问以下地址,进入 CPA 远程管理面板:
https://{你的域名}/management.html
使用 config.yaml 中 remote-management.secret-key 配置的密码登录。
参考资料
https://linux.do/t/topic/1670317



