机器是台 netcup 的 VPS Piko G11s,1 核 960MB 内存 30G 硬盘,Debian 12。
之前装了 1Panel。面板自己占一份,MySQL 占一份,再来几个附属进程,几百兆就没了。小机器本来就紧巴巴的,跑着几个 Docker 服务和 VPN,再加个面板,容器都快没内存喘气了。
后来越来越少登录面板——看个状态进去,改配置还是 SSH 敲命令快。
那还要它干嘛。拆了。
拆掉之后全部改成脚本管理,记录一下现在的结构。
目录布局
- docker-compose.yml
- Caddyfile
- docker-compose.yml
- docker-compose.yml
- config.json
- backup.sh # 打包关键数据 → 网盘,Telegram 通知
- restore.sh # 从备份恢复整台新机器
- healthcheck.sh # 每10分钟查内存/磁盘/服务,异常报警
- cleanup.sh # 清理 APT 缓存、journal、旧备份
- compose-update.sh # 拉取最新 Docker 镜像,重启容器
- caddy-fmt.sh # 格式化 Caddyfile
- bot/ # 量化交易脚本
- static/ # 静态页面
每个服务一个目录,一份 docker-compose.yml,不耦合,共用 caddy-proxy 网络。
Caddy 负责反代,Caddyfile 只有十几行,自动 HTTPS,不用到面板里点来点去。caddy-fmt.sh 用来格式化 Caddyfile,保持缩进整洁,想起来的时候跑一下。
自动化流程
整个 VPS 的管理不依赖任何面板,几个脚本 + 定时任务就够了。按频率从高到低:
每 10 分钟 —— 健康检查
healthcheck.sh 看内存剩多少、磁盘用了多少、几个关键服务(VPN、容器)是不是还活着。发现异常自动尝试重启,重启失败就发 Telegram 告警。基本不用管,出了事手机先知道。
每天凌晨 3 点 —— 完整备份
backup.sh 把 /srv/ 下的配置和数据打包,连同 VPN 证书、SSH 密钥、crontab、systemd 配置一起归档,自动推到网盘存一份,并通过 Telegram 通知结果。每次打包前先校验完整性,确保恢复的时候不会发现文件是坏的。
每天凌晨 4:30 —— 清理
cleanup.sh 先 apt-get clean 清掉 APT 下载缓存,能腾出几十到几百兆。然后用 journalctl 把 systemd 日志压缩到 50M 以内——这东西不限制会越堆越多。接着删掉 /tmp 里 3 天前的临时文件,再清理 Docker 悬空的镜像层。备份目录也只保留最近 3 份,更老的自动删掉。整个跑下来就几秒钟,但长期能省不少磁盘。
每周日凌晨 2 点 —— 镜像更新
compose-update.sh 更新前先自动备份(调用 backup.sh),然后逐个服务拉最新 Docker 镜像、重建容器、清理旧镜像。备份在更新之前做,万一拉了个坏的,随时能回滚。
crontab
30 4 * * * /srv/scripts/cleanup.sh0 3 * * * /srv/scripts/backup.sh*/10 * * * * /srv/scripts/healthcheck.sh0 2 * * 0 /srv/scripts/compose-update.sh >> /var/log/compose-update.log 2>&1四条定时任务,覆盖了备份、清理、监控、更新。没什么需要人工盯的。
手动操作
恢复流程也很直接。买了一台新 VPS,装好系统,把备份文件传上去,跑 restore.sh 就能恢复到和原来一模一样——装依赖、恢复配置和数据、重建 Docker 容器、配防火墙,一条龙搞定。不需要先装面板再从面板里恢复。
所有脚本都在 /srv/scripts/ 下,用的时候直接 cat 看一眼,不用在面板里翻来翻去找功能在哪。
总结
1Panel 没什么不好,就是小机器扛不住面板的开销。拆了全改成脚本 + 定时任务,备份恢复不依赖任何面板,出了事 Telegram 通知到位。
评论
GitHub 登录后可评论。
评论区会在滚动到这里时自动加载。