Files

6.7 KiB

CPR 部署配置

直接运行官方 CPR 3.34.0、Xray 26.7.28、PostgreSQL 18 和 Redis 8,共四个独立容器。不构建自定义镜像、不编译上游源码。需要 Linux Docker Engine、Docker Compose 2.20.0 或更新版本。

文件与初始化

路径 内容
.env / .env.example 三项密码;真实文件不提交 Git
compose.yaml 统一入口
compose/app.yaml 官方 CPR 镜像、挂载、在线更新参数
compose/xray.yaml 官方 Xray 镜像、独立健康检查及日志轮转
compose/postgres.yaml / compose/redis.yaml 数据库与缓存
configs/config.yaml 独立 CPR 配置模板
configs/caddy.caddy Caddy 站点配置
configs/xray/00-base.json HTTP 代理、加密 DNS、日志与流量统计
configs/xray/10-node.json 真实节点配置,Git 忽略
configs/xray-node.example.json 不含真实凭据的节点示例
scripts/start-app.sh 填入密码后直接执行官方程序
justfile 常用运维命令
.externals/codex-proxy-rs 固定为 v3.34.0 的官方源码,仅供核对

复制 .env.example 为 .env,分别填写三个独立的 48 位随机十六进制密码。固定版本、端口等直接维护在对应配置文件中,.env 只存密码。

参考节点示例创建 configs/xray/10-node.json,出站标签必须为 proxy。节点地址使用 IP,Reality 的 serverName 保留节点要求的域名,避免 DNS 启动循环。不要复制旧透明代理的 sockopt.mark;独立容器没有设置该标记的权限。

Linux 上 Xray 使用 UID/GID 65532:65532,节点文件应仅允许 root 和该组读取:

chmod 755 configs/xray
chown root:65532 configs/xray/10-node.json
chmod 640 configs/xray/10-node.json
chmod 600 .env

启动脚本以官方 UID/GID 10001:10001 运行,将模板密码占位符替换到容器内的 /app/deploy/config.yaml,文件权限为 600,不输出密码。默认管理员为 admin@cpr.local,本机地址为 http://127.0.0.1:8080。

先确保外部网络 web-network 存在,再执行 just pull、just up。CPR 在该网络中的别名为 cpr-app;将站点配置接入同网络的 Caddy,公网地址为 https://cpr.pchuan.top,客户端 Base URL 为 https://cpr.pchuan.top/v1。SSE 立即刷新,支持 WebSocket Upgrade。

CPR 代理设置

在 CPR「代理管理」创建 HTTP 代理:

http://xray:10809

测试通过后,将需要走该出口的账号绑定到它。新导入或新授权的账号也需要选择代理。已有其他代理的账号保持原绑定,除非明确需要切换。

没有绑定代理的账号使用直连。 不再使用 TPROXY、iptables、Supervisor 或共享网络命名空间。Xray 仅连接项目默认网络,没有任何宿主端口映射;PostgreSQL、Redis 同样不映射端口。

已配置且启用的账号代理连接失败时,CPR 不会自动回退直连。停用或删除 CPR 中的代理会改变账号的代理行为,不能将其当成“暂停节点”的操作。

Xray 重启、崩溃自动恢复或升级不重启 CPR,但会中断现有代理连接。CPR 的健康接口只检查应用基础设施,代理节点可达性需另外执行 just proxy-check 或管理端代理测试。

DNS 与日志

CPR 保留 Docker DNS,以解析 postgres、redis、xray 等内部服务名。账号通过 HTTP 代理发送目标域名,由代理节点解析;Xray 使用 AsIs 路由,不在 HTTP 连接前重复做本地 DNS 查询,避免额外查询占用 CPR 的连接超时预算。未走代理的应用联网使用容器默认 DNS。

Xray 保留仅监听容器回环地址的 127.0.0.1:5353 DNS 诊断入口,使用并行 Cloudflare 与 Quad9 DoH。DoH 自身经过节点;节点地址使用 IP,避免启动循环。这个入口不在账号 HTTP 代理请求的必经路径上。

Xray 的访问、错误、DNS 日志统一输出到 Docker 日志,单文件上限 10 MiB,最多保留 5 个文件。日志包含访问目标和出站标签,分享前需要脱敏。Stats API 仅监听 Xray 容器的回环地址,统计重启后清零。

升级与数据

CPR 后台「系统更新」使用官方下载安装及重启流程,开启 CPR_ENABLE_SELF_RESTART=true,程序、前端和官方插件目录保留官方布局及可写权限。程序退出后由 Docker 的 restart: unless-stopped 拉起,不依赖 Supervisor,也不挂载 Docker socket。

后台更新写入容器可写层:普通重启保留,删除或重建容器会回到 Compose 指定的镜像版本。 重建前先核对当前运行版本,修改 compose/app.yaml 为相同或更高的允许版本,核对发布说明及配置迁移后执行 just update,避免意外降级。无需构建镜像。

Xray 升级修改 compose/xray.yaml,执行 just update xray,CPR 容器保持运行。节点配置修改后执行 just xray-restart;挂载或镜像配置变化需 just recreate xray。

四个持久化卷保存应用数据、应用日志、PostgreSQL、Redis,保持项目名 cpr。旧部署的 cpr_xray-logs 卷不再挂载,迁移后保留以便查看历史日志。Xray 新日志由 Docker 管理,重建容器会失去该容器的旧日志,长期留档应在重建前导出。

升级或迁移前备份数据库、应用数据、节点和 .env。停止服务保留数据卷,禁止使用 down -v。管理员密码仅在首次创建时使用,已有管理员通过后台改密码;已有数据库的密码不能只修改 .env。

常用命令

安装 just,运行 just 查看列表。所有命令使用根目录 Compose,密码由 .env 提供。

命令 用途
just check 静态校验,不输出密码
just pull / just up 拉取官方镜像 / 启动并等待健康
just status / just health 容器状态 / CPR 健康接口
just logs / just logs postgres CPR / 数据库日志
just restart / just recreate 重启 / 重建 CPR
just update 拉取指定版本官方 CPR 镜像并重建
just update xray 仅更新 Xray
just xray-check 校验代理配置与节点
just xray-restart 校验后仅重启 Xray
just xray-status / just xray-logs Xray 状态 / 日志
just xray-stats 出站收发字节统计
just proxy-check 从 CPR 经 HTTP 代理查询出口 IP
just stop / just down 停止 / 移除容器和网络,保留卷

restart、recreate、update 接受服务名,默认 app。

官方参考