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部署
这是方案二:
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部署

