CPA 统计数据持久化方案一(全自动),支持自动更新与Docker部署

2026-04-29 10:332阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

这是方案二:

CPA 统计数据持久化方案二(全自动),支持自动更新与Docker部署 开发调优
与第一个版本不同的是,这个版本实现定时快照 注意: 重启容器时快照默认不会自动导入,避免重启把旧的快照重复导入 避免pending里有东西但是容器突然挂了,然后旧的快照覆盖pending里的新json 毕竟CPA重启不频繁,实现更新后自动导入就够了。。。。 如果手动从历史快照恢复: 看快照列表 ls -1t persist/snapshots | head 把选中的快照扔进 pen…

用 watchtower + hooks

实现自动更新并且在更新之前导出数据,在更新之后导入

在当前文件夹建目录,就是docker-compose在的文件夹

mkdir -p hooks persist chmod +x hooks/pre-update.sh hooks/post-update.sh

建两个sh脚本,一个从cpa的管理接口导出数据,一个导入数据:

hooks/pre-update.sh

#!/bin/sh set -eu PORT="${CLI_PROXY_API_PORT:-8317}" PERSIST_DIR="/CLIProxyAPI/persist" BACKUP_FILE="${PERSIST_DIR}/usage_stats.json" mkdir -p "${PERSIST_DIR}" if [ -z "${MANAGEMENT_PASSWORD:-}" ]; then echo "[pre-update] MANAGEMENT_PASSWORD not set, skip export" exit 0 fi echo "[pre-update] exporting usage stats..." wget -q -O "${BACKUP_FILE}" \ --header="Authorization: Bearer ${MANAGEMENT_PASSWORD}" \ "http://127.0.0.1:${PORT}/v0/management/usage/export" if [ ! -s "${BACKUP_FILE}" ]; then echo "[pre-update] export finished but backup file is empty" exit 1 fi echo "[pre-update] usage stats saved to ${BACKUP_FILE}"

hooks/post-update.sh

#!/bin/sh set -eu PORT="${CLI_PROXY_API_PORT:-8317}" BACKUP_FILE="/CLIProxyAPI/persist/usage_stats.json" if [ ! -s "${BACKUP_FILE}" ]; then echo "[post-update] no usage backup file, skip restore" exit 0 fi if [ -z "${MANAGEMENT_PASSWORD:-}" ]; then echo "[post-update] MANAGEMENT_PASSWORD not set, skip restore" exit 0 fi echo "[post-update] restoring usage stats..." i=1 while [ "${i}" -le 20 ]; do if wget -q -O /dev/null \ --header="Content-Type: application/json" \ --header="Authorization: Bearer ${MANAGEMENT_PASSWORD}" \ --post-file="${BACKUP_FILE}" \ "http://127.0.0.1:${PORT}/v0/management/usage/import"; then echo "[post-update] usage stats restored successfully" rm -f "${BACKUP_FILE}" exit 0 fi echo "[post-update] app not ready or import failed, retry ${i}/20..." i=$((i + 1)) sleep 3 done echo "[post-update] failed to restore usage stats" exit 1

docker-compose.yaml 加入watchtower的label:

加上挂载目录

services: cli-proxy-api: image: ${CLI_PROXY_IMAGE:-eceasy/cli-proxy-api-plus:latest} container_name: cli-proxy-api-plus env_file: - .env environment: DEPLOY: ${DEPLOY:-} ports: - "8317:8317" - "8085:8085" - "1455:1455" - "54545:54545" - "51121:51121" - "11451:11451" volumes: - ${CLI_PROXY_CONFIG_PATH:-./config.yaml}:/CLIProxyAPI/config.yaml - ${CLI_PROXY_AUTH_PATH:-./auths}:/root/.cli-proxy-api - ${CLI_PROXY_LOG_PATH:-./logs}:/CLIProxyAPI/logs - ${CLI_PROXY_PERSIST_PATH:-./persist}:/CLIProxyAPI/persist - ./hooks:/hooks:ro restart: unless-stopped labels: com.centurylinklabs.watchtower.enable: "true" com.centurylinklabs.watchtower.lifecycle.pre-update: "/bin/sh /hooks/pre-update.sh" com.centurylinklabs.watchtower.lifecycle.post-update: "/bin/sh /hooks/post-update.sh" watchtower: image: containrrr/watchtower:latest container_name: watchtower restart: unless-stopped depends_on: - cli-proxy-api volumes: - /var/run/docker.sock:/var/run/docker.sock command: - --interval - "${WATCHTOWER_POLL_INTERVAL:-300}" - --cleanup - --label-enable - --enable-lifecycle-hooks

目录结构:

cli-proxy-api/ ├── docker-compose.yml ├── .env ├── config.yaml ├── auths/ ├── logs/ ├── persist/ └── hooks/ ├── pre-update.sh └── post-update.sh

必须的环境变量:

CLI_PROXY_IMAGE=eceasy/cli-proxy-api-plus:latest # 用cli-proxy-api:latest 也行 MANAGEMENT_PASSWORD=your-management-password CLI_PROXY_API_PORT=8317 WATCHTOWER_POLL_INTERVAL=300

之后运行就好了

docker compose up -d 网友解答:


--【壹】--:

没有。。。。我加个定时导出


--【贰】--:

光有定时导出也不行,无限累加会积累很多垃圾文件,但是限制了导出数量,没有检测cpa服务启动功能,如果哪次更新重启忘了导入,就很容易覆盖掉之前好的日志


--【叁】--:

蹲一个定时导出版的,感谢佬友


--【肆】--:

感谢大佬分享


--【伍】--:

感谢大佬。


--【陆】--: Kizuna Ai :

eceasy/cli-proxy-api-plus

用上了 谢谢大佬,用的方案1,


--【柒】--:

感谢大佬,已经用上了


--【捌】--:

感谢佬友


--【玖】--:

有启动导入数据这个功能吗?我之前本地维护的自动导出,就因为有次重启忘了导入数据,后面新导出的把之前的全覆盖了


--【拾】--:

方案二CPA 统计数据持久化方案二(全自动),支持自动更新与Docker部署

问题描述:

这是方案二:

CPA 统计数据持久化方案二(全自动),支持自动更新与Docker部署 开发调优
与第一个版本不同的是,这个版本实现定时快照 注意: 重启容器时快照默认不会自动导入,避免重启把旧的快照重复导入 避免pending里有东西但是容器突然挂了,然后旧的快照覆盖pending里的新json 毕竟CPA重启不频繁,实现更新后自动导入就够了。。。。 如果手动从历史快照恢复: 看快照列表 ls -1t persist/snapshots | head 把选中的快照扔进 pen…

用 watchtower + hooks

实现自动更新并且在更新之前导出数据,在更新之后导入

在当前文件夹建目录,就是docker-compose在的文件夹

mkdir -p hooks persist chmod +x hooks/pre-update.sh hooks/post-update.sh

建两个sh脚本,一个从cpa的管理接口导出数据,一个导入数据:

hooks/pre-update.sh

#!/bin/sh set -eu PORT="${CLI_PROXY_API_PORT:-8317}" PERSIST_DIR="/CLIProxyAPI/persist" BACKUP_FILE="${PERSIST_DIR}/usage_stats.json" mkdir -p "${PERSIST_DIR}" if [ -z "${MANAGEMENT_PASSWORD:-}" ]; then echo "[pre-update] MANAGEMENT_PASSWORD not set, skip export" exit 0 fi echo "[pre-update] exporting usage stats..." wget -q -O "${BACKUP_FILE}" \ --header="Authorization: Bearer ${MANAGEMENT_PASSWORD}" \ "http://127.0.0.1:${PORT}/v0/management/usage/export" if [ ! -s "${BACKUP_FILE}" ]; then echo "[pre-update] export finished but backup file is empty" exit 1 fi echo "[pre-update] usage stats saved to ${BACKUP_FILE}"

hooks/post-update.sh

#!/bin/sh set -eu PORT="${CLI_PROXY_API_PORT:-8317}" BACKUP_FILE="/CLIProxyAPI/persist/usage_stats.json" if [ ! -s "${BACKUP_FILE}" ]; then echo "[post-update] no usage backup file, skip restore" exit 0 fi if [ -z "${MANAGEMENT_PASSWORD:-}" ]; then echo "[post-update] MANAGEMENT_PASSWORD not set, skip restore" exit 0 fi echo "[post-update] restoring usage stats..." i=1 while [ "${i}" -le 20 ]; do if wget -q -O /dev/null \ --header="Content-Type: application/json" \ --header="Authorization: Bearer ${MANAGEMENT_PASSWORD}" \ --post-file="${BACKUP_FILE}" \ "http://127.0.0.1:${PORT}/v0/management/usage/import"; then echo "[post-update] usage stats restored successfully" rm -f "${BACKUP_FILE}" exit 0 fi echo "[post-update] app not ready or import failed, retry ${i}/20..." i=$((i + 1)) sleep 3 done echo "[post-update] failed to restore usage stats" exit 1

docker-compose.yaml 加入watchtower的label:

加上挂载目录

services: cli-proxy-api: image: ${CLI_PROXY_IMAGE:-eceasy/cli-proxy-api-plus:latest} container_name: cli-proxy-api-plus env_file: - .env environment: DEPLOY: ${DEPLOY:-} ports: - "8317:8317" - "8085:8085" - "1455:1455" - "54545:54545" - "51121:51121" - "11451:11451" volumes: - ${CLI_PROXY_CONFIG_PATH:-./config.yaml}:/CLIProxyAPI/config.yaml - ${CLI_PROXY_AUTH_PATH:-./auths}:/root/.cli-proxy-api - ${CLI_PROXY_LOG_PATH:-./logs}:/CLIProxyAPI/logs - ${CLI_PROXY_PERSIST_PATH:-./persist}:/CLIProxyAPI/persist - ./hooks:/hooks:ro restart: unless-stopped labels: com.centurylinklabs.watchtower.enable: "true" com.centurylinklabs.watchtower.lifecycle.pre-update: "/bin/sh /hooks/pre-update.sh" com.centurylinklabs.watchtower.lifecycle.post-update: "/bin/sh /hooks/post-update.sh" watchtower: image: containrrr/watchtower:latest container_name: watchtower restart: unless-stopped depends_on: - cli-proxy-api volumes: - /var/run/docker.sock:/var/run/docker.sock command: - --interval - "${WATCHTOWER_POLL_INTERVAL:-300}" - --cleanup - --label-enable - --enable-lifecycle-hooks

目录结构:

cli-proxy-api/ ├── docker-compose.yml ├── .env ├── config.yaml ├── auths/ ├── logs/ ├── persist/ └── hooks/ ├── pre-update.sh └── post-update.sh

必须的环境变量:

CLI_PROXY_IMAGE=eceasy/cli-proxy-api-plus:latest # 用cli-proxy-api:latest 也行 MANAGEMENT_PASSWORD=your-management-password CLI_PROXY_API_PORT=8317 WATCHTOWER_POLL_INTERVAL=300

之后运行就好了

docker compose up -d 网友解答:


--【壹】--:

没有。。。。我加个定时导出


--【贰】--:

光有定时导出也不行,无限累加会积累很多垃圾文件,但是限制了导出数量,没有检测cpa服务启动功能,如果哪次更新重启忘了导入,就很容易覆盖掉之前好的日志


--【叁】--:

蹲一个定时导出版的,感谢佬友


--【肆】--:

感谢大佬分享


--【伍】--:

感谢大佬。


--【陆】--: Kizuna Ai :

eceasy/cli-proxy-api-plus

用上了 谢谢大佬,用的方案1,


--【柒】--:

感谢大佬,已经用上了


--【捌】--:

感谢佬友


--【玖】--:

有启动导入数据这个功能吗?我之前本地维护的自动导出,就因为有次重启忘了导入数据,后面新导出的把之前的全覆盖了


--【拾】--:

方案二CPA 统计数据持久化方案二(全自动),支持自动更新与Docker部署