阿里云 ECS 自动保活 守护进程 —— 用 Go 实现,单静态二进制运行。为按量/抢占式 ECS 提供「流量止损 + 自动复活」,并通过 Telegram 推送告警与每日日报、远程控制开关机。
Stopped 时,自动调用 StartInstance 并轮询等待进入 Running。账号欠费被停机后,充上钱的下一个巡检周期内自动开机,无需手动干预。/status、/start_instance、/stop、/reboot、/menu、/timers 远程控制。# 环境变量注入配置,/data 卷持久化
docker run -d --name ecs-guardian --restart unless-stopped \
-v /var/lib/ecs-guardian:/data \
-e TELEGRAM_BOT_TOKEN=123456:ABC \
-e TELEGRAM_CHAT_ID=123456789 \
-e 'ALIYUN_USERS=name=HK,ak=LTAI...,sk=...,region=cn-hongkong,instance_id=i-xxx,traffic_limit=180' \
-e ADMIN_USERS='123456' \
orangejx/ecs-guardian:latest
首次启动会把环境变量渲染成 /data/config.json;之后重建容器沿用卷内配置(设置 ALIYUN_MONITOR_FORCE_RECONFIG=1 可强制用环境变量重建)。配置、日志、状态文件全部保存在挂载卷。
| 变量 | 必填 | 说明 |
|---|---|---|
TELEGRAM_BOT_TOKEN | 是 | @BotFather 创建机器人获得 |
TELEGRAM_CHAT_ID | 是 | 接收通知的用户 ID(@userinfobot 可查) |
ALIYUN_USERS | 是 | 被监控实例,多实例用 | 分隔,见下 |
ADMIN_USERS | 否 | 控制机器人管理员用户 ID(逗号分隔),配置后启动机器人 |
BARK_URL | 否 | Bark 推送地址 |
ALIYUN_MONITOR_FORCE_RECONFIG | 否 | 1=强制用环境变量重建配置 |
每条目一个实例,| 分隔;同一 AK/SK 可复用在多个实例上:
name=HK,ak=LTAI...,sk=...,region=cn-hongkong,instance_id=i-xxx,traffic_limit=180 | name=SG,ak=...,sk=...,region=ap-southeast-1,instance_id=i-yyy,traffic_limit=100,currency=$
字段:name(备注,Telegram 命令按此区分)、ak、sk、region、instance_id(必填)、traffic_limit(GB,默认 180)、resgroup(RAM 资源组)、bill_endpoint、currency(¥/$,国际站账号填 $)。
注意:CDT 流量是账号级的。同一账号下多台实例共用流量池,超标时会一起停机;需要独立止损请拆分到不同账号。
建议使用 RAM 子账号并授予最小权限:
AliyunECSFullAccess(开关机/查询)AliyunCDTReadOnlyAccess(查询流量,缺少会报 NoPermission)AliyunBSSReadOnlyAccess(账单/余额)cp .env.example .env && vim .env
docker compose up -d # 拉取镜像运行(发布版)
# 本地构建开发版:
# docker compose -f docker-compose.local.yml up -d
docker compose logs -f ecs-guardian
docker buildx create --name multi --platform linux/amd64,linux/arm64 --use
docker buildx build --platform linux/amd64,linux/arm64 -t orangejx/ecs-guardian:latest --push .
推送 v 开头的 tag 触发自动发布:
git tag v1.0.0 && git push origin v1.0.0
自动完成:
linux/amd64 + linux/arm64 静态可执行文件SHA256SUMS首次使用请配置仓库 Secrets:
GITHUB_TOKEN 自动鉴权,无需配置;DOCKERHUB_USERNAME 和 DOCKERHUB_TOKEN,不配则只发 GHCR。把
orangejx/ecs-guardian相关字样替换成你的 GitHub 用户名/仓库名后即可用。
本项目源自 10000ge10000/aliyun_monitor(阿里云 CDT 流量监控 & 自动止损,Python 版)。ecs-guardian 用 Go 完整重写了它的保活逻辑与 Telegram 通知/控制能力,并修复了若干上游问题(HTTPS、AK/SK 空白、日报配额显示、定时任务时区等),但核心思路与参数均继承自该上游项目。在此向原作者致谢。
/start 检查机器人 /menu 交互菜单(按钮)
/list 实例列表 /status <实例名或ID> 查询状态
/start_instance <实例名或ID> 开机
/stop <实例名或ID> 关机(需确认)
/reboot <实例名或ID> 重启(需确认)
/timers 查看定时任务
流量 < 阈值 且 Stopped → 自动 StartInstance → 轮询确认 Running
流量 < 阈值 且 Running → 不动
流量 ≥ 阈值 → StopInstance 止损
更完整的行为(启动失败降频重试、告警冷却、监控失明告警)见 docs/ARCHITECTURE.md。
本项目会自动对你的阿里云 ECS 实例执行开机/关机操作,并自动查询你的账户余额与账单。请务必在使用前理解其全部行为(见「工作原理」与 docs/ARCHITECTURE.md),并自行承担使用风险:
.gitignore 中排除 .env 与 data/),并建议使用最小权限的 RAM 子账号。使用本项目即表示你理解并接受上述条款。
BSD 3-Clause —— 本项目采用 BSD 3-Clause 许可证 开源。
你可以在保留版权声明的前提下自由使用、修改、再分发(含闭源与商业用途)。BSD 3-Clause 要求任何再分发(无论是源码还是二进制形式)都必须保留本项目的版权声明与许可条款,即必须标注本项目来源。
致谢:本项目源自 10000ge10000/aliyun_monitor,见上文「致谢 / 来源」。
Content type
Image
Digest
sha256:fe1660804…
Size
9.3 MB
Last updated
4 days ago
docker pull orangejx/ecs-guardian