增加备份文档
This commit is contained in:
@@ -74,15 +74,27 @@ cd crypto_monitor
|
|||||||
|
|
||||||
具体 `mkdir`、`venv`、`pm2` 与 **SSH SOCKS** 步骤以各子目录 **《部署文档.md》** 为准。
|
具体 `mkdir`、`venv`、`pm2` 与 **SSH SOCKS** 步骤以各子目录 **《部署文档.md》** 为准。
|
||||||
|
|
||||||
|
### 备份与恢复(服务器必读)
|
||||||
|
|
||||||
|
项目路径 **`/opt/crypto_monitor`**,数据备份 **`/root/backups`**:
|
||||||
|
|
||||||
|
| 类型 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| **数据库 + 复盘图片** | 每天北京时间 0:00 自动备份,保留 30 天 |
|
||||||
|
| **`.env`** | 升级 / 改配置前手动备份与恢复 |
|
||||||
|
|
||||||
|
**一键复制命令(Ubuntu SSH)** 见根目录 **[备份与恢复.md](./备份与恢复.md)**:含安装 cron、手动备份、`.env` 备份/恢复、从备份还原数据库等整段脚本。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 六、推荐阅读顺序
|
## 六、推荐阅读顺序
|
||||||
|
|
||||||
1. 克隆本仓库后,根据你实际交易的所,进入对应 **`crypto_monitor_*`** 目录。
|
1. 克隆本仓库后,根据你实际交易的所,进入对应 **`crypto_monitor_*`** 目录。
|
||||||
2. 在该目录执行 **`cp -n .env.example .env`** 并编辑 `.env`(填入 API 与密码等)。
|
2. 在该目录执行 **`cp -n .env.example .env`** 并编辑 `.env`(填入 API 与密码等)。
|
||||||
3. 阅读该目录下的 **《部署文档.md》**(Ubuntu / PM2 / 代理 / 备份与升级说明)。
|
3. 阅读该目录下的 **《部署文档.md》**(Ubuntu / PM2 / 代理 / 升级说明)。
|
||||||
4. 需要 **Gate 趋势回调** 规则时,阅读 [crypto_monitor_gate_bot/趋势回调策略说明.md](./crypto_monitor_gate_bot/趋势回调策略说明.md)。
|
4. 服务器部署完成后,按 **[备份与恢复.md](./备份与恢复.md)** 配置自动备份与 `.env` 备份习惯。
|
||||||
5. 需要 **多账户一块看 + 紧急全平** 时,阅读 [manual_trading_hub](./manual_trading_hub/) 下 README 与部署文档。
|
5. 需要 **Gate 趋势回调** 规则时,阅读 [crypto_monitor_gate_bot/趋势回调策略说明.md](./crypto_monitor_gate_bot/趋势回调策略说明.md)。
|
||||||
|
6. 需要 **多账户一块看 + 紧急全平** 时,阅读 [manual_trading_hub](./manual_trading_hub/) 下 README 与部署文档。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -92,7 +104,7 @@ cd crypto_monitor
|
|||||||
|
|
||||||
### 从旧版仓库升级(曾把 `.env` 提交进 Git)
|
### 从旧版仓库升级(曾把 `.env` 提交进 Git)
|
||||||
|
|
||||||
在 **`git pull` 之前**,于每个策略目录备份:`cp .env .env.backup.$(date +%Y%m%d)`。pull 后若本地 `.env` 被误删,用备份恢复;再对照新的 **`.env.example`** 补全可能新增的变量名。
|
在 **`git pull` 之前**按 **[备份与恢复.md](./备份与恢复.md)** 备份 `.env` 与数据库;pull 后若本地 `.env` 被误删,用备份恢复;再对照新的 **`.env.example`** 补全可能新增的变量名。
|
||||||
- 实盘前务必在 **`LIVE_TRADING_ENABLED=false`** 下验证页面与网络;API 权限与 IP 白名单遵循各交易所要求。
|
- 实盘前务必在 **`LIVE_TRADING_ENABLED=false`** 下验证页面与网络;API 权限与 IP 白名单遵循各交易所要求。
|
||||||
- 使用本仓库进行实盘交易的风险由使用者自行承担;请遵守当地法律法规与交易所用户协议。
|
- 使用本仓库进行实盘交易的风险由使用者自行承担;请遵守当地法律法规与交易所用户协议。
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,268 @@
|
|||||||
|
# 备份与恢复(Ubuntu 服务器)
|
||||||
|
|
||||||
|
本文档面向 **VPS / Ubuntu**,项目统一放在 **`/opt/crypto_monitor`**,数据备份统一放在 **`/root/backups`**。
|
||||||
|
|
||||||
|
| 类型 | 内容 | 存放位置 | 频率 |
|
||||||
|
|------|------|----------|------|
|
||||||
|
| **数据库 + 复盘图片** | `crypto.db`、`static/images` | `/root/backups/<实例名>/YYYY-MM-DD/` | 每天北京时间 **0:00**(cron) |
|
||||||
|
| **`.env` 配置** | API、密码、风控参数等 | 项目目录 `.env.backup.日期`;可选集中拷到 `/root/backups/env/` | **升级 / 改配置前**手动执行 |
|
||||||
|
|
||||||
|
> `.env` **不会**被自动备份脚本包含(含密钥,请单独备份)。
|
||||||
|
> 三个常用实例:`crypto_monitor_binance`、`crypto_monitor_gate`、`crypto_monitor_gate_bot`。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、首次安装:三个实例自动备份 + 试跑
|
||||||
|
|
||||||
|
整段复制到 SSH 终端执行(需 **root** 或对该目录有写权限):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install -y sqlite3 2>/dev/null || true
|
||||||
|
|
||||||
|
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
|
||||||
|
cd "/opt/crypto_monitor/${dir}" || exit 1
|
||||||
|
chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh
|
||||||
|
bash scripts/install_backup_cron.sh
|
||||||
|
bash scripts/backup_data.sh
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "=== crontab ==="
|
||||||
|
crontab -l
|
||||||
|
echo "=== backup dirs ==="
|
||||||
|
ls -la /root/backups/*/
|
||||||
|
```
|
||||||
|
|
||||||
|
成功后应有:
|
||||||
|
|
||||||
|
- `crontab -l` 含一行 `CRON_TZ=Asia/Shanghai` + 三条 `0 0 * * * .../backup_data.sh`
|
||||||
|
- `/root/backups/crypto_monitor_binance/2026-05-17/`(日期为当天)等目录,内含 `crypto.db`、`static_images.tar.gz`、`manifest.txt`
|
||||||
|
|
||||||
|
日志路径:
|
||||||
|
|
||||||
|
- `/var/log/crypto-monitor-backup-crypto_monitor_binance.log`
|
||||||
|
- `/var/log/crypto-monitor-backup-crypto_monitor_gate.log`
|
||||||
|
- `/var/log/crypto-monitor-backup-crypto_monitor_gate_bot.log`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、仅安装某一个实例的自动备份
|
||||||
|
|
||||||
|
把 `INSTANCE` 改成目录名后整段执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
INSTANCE=crypto_monitor_binance
|
||||||
|
cd "/opt/crypto_monitor/${INSTANCE}"
|
||||||
|
chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh
|
||||||
|
bash scripts/install_backup_cron.sh
|
||||||
|
bash scripts/backup_data.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
`INSTANCE` 可选:`crypto_monitor_binance` | `crypto_monitor_gate` | `crypto_monitor_gate_bot`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、手动立即备份(数据库 + 图片,三个实例)
|
||||||
|
|
||||||
|
不等到 0 点,立刻各备份一次:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
|
||||||
|
echo ">>> ${dir}"
|
||||||
|
bash "/opt/crypto_monitor/${dir}/scripts/backup_data.sh"
|
||||||
|
done
|
||||||
|
ls -la /root/backups/*/*/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、检查定时任务与备份是否正常
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crontab -l
|
||||||
|
ls -la /root/backups/*/
|
||||||
|
du -sh /root/backups/*/
|
||||||
|
tail -n 20 /var/log/crypto-monitor-backup-crypto_monitor_binance.log
|
||||||
|
tail -n 20 /var/log/crypto-monitor-backup-crypto_monitor_gate.log
|
||||||
|
tail -n 20 /var/log/crypto-monitor-backup-crypto_monitor_gate_bot.log
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、`.env` 备份(升级 / git pull / 改密钥前)
|
||||||
|
|
||||||
|
### 5.1 三个实例一次性备份到各自项目目录
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DATE=$(TZ=Asia/Shanghai date +%Y%m%d)
|
||||||
|
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
|
||||||
|
src="/opt/crypto_monitor/${dir}/.env"
|
||||||
|
dst="/opt/crypto_monitor/${dir}/.env.backup.${DATE}"
|
||||||
|
if [ -f "$src" ]; then
|
||||||
|
cp -a "$src" "$dst"
|
||||||
|
echo "ok: $dst"
|
||||||
|
else
|
||||||
|
echo "skip (no .env): $src"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 同时集中备份到 `/root/backups/env/`(推荐)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DATE=$(TZ=Asia/Shanghai date +%Y%m%d)
|
||||||
|
mkdir -p /root/backups/env
|
||||||
|
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
|
||||||
|
src="/opt/crypto_monitor/${dir}/.env"
|
||||||
|
if [ -f "$src" ]; then
|
||||||
|
cp -a "$src" "/root/backups/env/${dir}.env.${DATE}"
|
||||||
|
echo "ok: /root/backups/env/${dir}.env.${DATE}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
ls -la /root/backups/env/
|
||||||
|
```
|
||||||
|
|
||||||
|
> `/root/backups/env/` 含密钥,勿上传网盘、勿提交 Git。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、`.env` 恢复
|
||||||
|
|
||||||
|
### 6.1 从项目目录内的备份恢复
|
||||||
|
|
||||||
|
把 `INSTANCE` 和 `DATE` 改成实际值(`DATE` 为备份当天的 `YYYYMMDD`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
INSTANCE=crypto_monitor_binance
|
||||||
|
DATE=20260517
|
||||||
|
cd "/opt/crypto_monitor/${INSTANCE}"
|
||||||
|
cp -a ".env.backup.${DATE}" .env
|
||||||
|
echo "restored .env from .env.backup.${DATE}"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 从 `/root/backups/env/` 恢复
|
||||||
|
|
||||||
|
```bash
|
||||||
|
INSTANCE=crypto_monitor_binance
|
||||||
|
DATE=20260517
|
||||||
|
cp -a "/root/backups/env/${INSTANCE}.env.${DATE}" "/opt/crypto_monitor/${INSTANCE}/.env"
|
||||||
|
echo "restored from /root/backups/env/${INSTANCE}.env.${DATE}"
|
||||||
|
```
|
||||||
|
|
||||||
|
恢复后重启对应 PM2 进程,例如:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pm2 restart crypto-monitor-binance
|
||||||
|
pm2 restart crypto-monitor-gate
|
||||||
|
pm2 restart crypto-monitor-gate-bot
|
||||||
|
```
|
||||||
|
|
||||||
|
(进程名以你 `pm2 list` 为准。)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、数据库 + 复盘图片恢复
|
||||||
|
|
||||||
|
从自动备份目录恢复。先停服务再覆盖,避免 SQLite 写入冲突。
|
||||||
|
|
||||||
|
把 `INSTANCE`、`DATE`(文件夹名 `YYYY-MM-DD`)改成实际值:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
INSTANCE=crypto_monitor_binance
|
||||||
|
DATE=2026-05-17
|
||||||
|
BK="/root/backups/${INSTANCE}/${DATE}"
|
||||||
|
PROJ="/opt/crypto_monitor/${INSTANCE}"
|
||||||
|
|
||||||
|
test -f "${BK}/crypto.db" || { echo "backup not found: ${BK}"; exit 1; }
|
||||||
|
|
||||||
|
pm2 stop crypto-monitor-binance 2>/dev/null || true
|
||||||
|
|
||||||
|
cp -a "${PROJ}/crypto.db" "${PROJ}/crypto.db.before_restore.$(date +%Y%m%d%H%M)" 2>/dev/null || true
|
||||||
|
cp -a "${BK}/crypto.db" "${PROJ}/crypto.db"
|
||||||
|
|
||||||
|
if [ -f "${BK}/static_images.tar.gz" ]; then
|
||||||
|
tar -xzf "${BK}/static_images.tar.gz" -C "${PROJ}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pm2 start crypto-monitor-binance 2>/dev/null || true
|
||||||
|
echo "restored ${INSTANCE} from ${BK}"
|
||||||
|
```
|
||||||
|
|
||||||
|
Gate / Gate Bot 将 `INSTANCE`、`pm2` 名称改为对应实例即可。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、升级代码推荐顺序(含备份)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DATE=$(TZ=Asia/Shanghai date +%Y%m%d)
|
||||||
|
mkdir -p /root/backups/env
|
||||||
|
|
||||||
|
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
|
||||||
|
PROJ="/opt/crypto_monitor/${dir}"
|
||||||
|
[ -f "${PROJ}/.env" ] && cp -a "${PROJ}/.env" "/root/backups/env/${dir}.env.${DATE}"
|
||||||
|
bash "${PROJ}/scripts/backup_data.sh" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
|
||||||
|
cd /opt/crypto_monitor
|
||||||
|
git pull
|
||||||
|
|
||||||
|
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
|
||||||
|
echo ">>> merge .env.example if needed: ${dir}"
|
||||||
|
diff -u "${dir}/.env.example" "${dir}/.env" | head -30 || true
|
||||||
|
done
|
||||||
|
|
||||||
|
pm2 restart all
|
||||||
|
```
|
||||||
|
|
||||||
|
`git pull` 后对照各目录 **`.env.example`**,把**新增变量名**手动补进 `.env`(不会自动合并)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、备份目录结构说明
|
||||||
|
|
||||||
|
```text
|
||||||
|
/root/backups/
|
||||||
|
env/ # .env 集中备份(手动)
|
||||||
|
crypto_monitor_binance.env.20260517
|
||||||
|
crypto_monitor_gate.env.20260517
|
||||||
|
crypto_monitor_gate_bot.env.20260517
|
||||||
|
crypto_monitor_binance/
|
||||||
|
2026-05-17/
|
||||||
|
crypto.db
|
||||||
|
static_images.tar.gz
|
||||||
|
manifest.txt
|
||||||
|
crypto_monitor_gate/
|
||||||
|
2026-05-17/
|
||||||
|
...
|
||||||
|
crypto_monitor_gate_bot/
|
||||||
|
2026-05-17/
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
- **保留策略**:自动备份目录按日期文件夹保留 **30 天**,超期在下次 `backup_data.sh` 运行时删除。
|
||||||
|
- **可选 `.env` 变量**(写在各实例 `.env` 中):`BACKUP_ROOT`、`BACKUP_RETENTION_DAYS`、`BACKUP_INSTANCE`(见各目录 `.env.example` 注释)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 十、卸载自动备份定时任务
|
||||||
|
|
||||||
|
仅删除三个实例的 backup 行(保留其它 cron):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
|
||||||
|
SCRIPT="/opt/crypto_monitor/${dir}/scripts/backup_data.sh"
|
||||||
|
crontab -l 2>/dev/null | grep -vF "$SCRIPT" | crontab -
|
||||||
|
done
|
||||||
|
crontab -l
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 十一、相关文档
|
||||||
|
|
||||||
|
| 文档 | 说明 |
|
||||||
|
|------|------|
|
||||||
|
| [README.md](./README.md) | 仓库总览 |
|
||||||
|
| [crypto_monitor_binance/部署文档.md](./crypto_monitor_binance/部署文档.md) | Binance 部署与备份细节 |
|
||||||
|
| [crypto_monitor_gate/部署文档.md](./crypto_monitor_gate/部署文档.md) | Gate 部署 |
|
||||||
|
| [crypto_monitor_gate_bot/部署文档.md](./crypto_monitor_gate_bot/部署文档.md) | Gate Bot 部署 |
|
||||||
Reference in New Issue
Block a user