Files
crypto_monitor_user/备份与恢复.md
T
2026-05-21 16:51:27 +08:00

269 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 备份与恢复(Ubuntu 服务器)
本文档面向 **VPS / Ubuntu**,项目统一放在 **`/opt/crypto_monitor_user`**,数据备份统一放在 **`/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_user/${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_user/${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_user/${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_user/${dir}/.env"
dst="/opt/crypto_monitor_user/${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_user/${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_user/${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_user/${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_user/${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_user/${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_user
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_user/${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 部署 |