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。