OpsDeck:纯 PHP 实现的阿里云 CDT 管理保活面板

2026-08-04 37 次阅读 2213 字 · 6 分钟

OpsDeck:纯 PHP 实现的阿里云 CDT 管理保活面板



最近给自己搭了一个阿里云 CDT 管理保活面板,顺手开源到了 GitHub(https://github.com/amw1933/ecs)。它用纯 PHP 编写,不依赖任何 Composer 包,数据存 SQLite,以 Docker 容器方式部署,镜像已发布到 Docker Hub,非常适合放在群晖或者轻量云服务器上使用。

一条命令部署(拉取模式,无需构建)



只要机器上装了 Docker(群晖装个 Docker 套件即可),执行一次:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/amw1933/ecs/main/deploy/install.sh)"


脚本会:自动创建部署目录(默认 /volume1/docker/ecs)→ 生成运行时 compose → 拉取已发布镜像 → 启动服务(默认监听 0.0.0.0:43211)。

部署完成即自动守护:容器内置常驻循环,每 60 秒自动运行一次调度,抢占实例被停止后自动拉起并发通知——不需要打开网页,也不需要配置系统定时任务。

构建模式(从源码构建)



想自己构建镜像时,加 REPO_URL 切换到构建模式(代码拉到 -build 目录构建,部署目录依然干净):

REPO_URL=https://github.com/amw1933/ecs.git bash -c "$(curl -fsSL https://raw.githubusercontent.com/amw1933/ecs/main/deploy/install.sh)"


部署结构



  • 部署目录只显示 docker-compose.yml 和 data/(数据库、密钥、日志全在 data 里),看不到源码

  • 代码打进镜像(容器内 /var/www/ecs),GitHub Actions 每次推送代码自动重新构建发布镜像

  • 以后更新:重跑同一条命令即可,数据保留在 data/,不丢失


  • 可视化面板(Portainer / 群晖 Container Manager)



    镜像已发布到 Docker Hub,直接粘贴这个 YAML 即可自动拉取部署:

    services:
      ecs:
        image: docker.io/amw1933/opsdeck-ecs:latest
        container_name: "${CONTAINER_NAME:-ecs}"
        restart: unless-stopped
        ports:
          - "${PORT:-0.0.0.0:43211}:80"
        environment:
          TZ: Asia/Shanghai
          CRON_INTERVAL: "${CRON_INTERVAL:-60}"
        volumes:
          - ./data:/var/www/ecs/storage
    


    Docker 卸载



    cd /volume1/docker/ecs
    docker compose down --remove-orphans   # 停止并删除容器(保留 ./data 数据)
    rm -rf ./data                          # 彻底删除数据(谨慎,不可恢复)
    


    第一次使用



  • 打开 http://服务器IP:43211,进入首次初始化:输入初始化 token(data/logs/app.log 里查看),设置管理员密码。

  • 添加阿里云账号:新账号默认开启自动保活(可在「设置 → 账号设置」随时关闭)。

  • 配置通知渠道(Telegram / Server酱等)。之后抢占实例被停止 → 60 秒内自动拉起并发通知,网页关着也照常工作。


  • 主要功能



  • 实例管理:查看 ECS 状态、规格、公网/私网 IP、计费方式、到期时间;支持启动、停止、重启、释放;引导式创建实例(含抢占式、数据盘、密钥/密码)。

  • 流量监控:账号级流量以阿里云 CDT(云数据传输)出网流量为准,能覆盖共享带宽包等实例监控统计不到的口径;实例级基于云监控(CMS)积分。账号用量取两者较大值,多账号完全隔离。

  • 自动熔断:账号级/实例级流量阈值,达到后自动关机并通知,带冷却时间和月度预警,避免超额费用。

  • 抢占式实例保活:实例被回收后自动按原配置重建;检测到停止时自动拉起,开启/关闭都会通知。账号设置里还有“自动保活”开关(新添加的真实账号默认开启),无需创建任务,调度每轮自动检查所有抢占式实例。

  • 每月 1 号自动开机:实例级开关,每月 1 号自动启动并通知。

  • 成本分析(费用中心):账号级开关,同步当月费用与账户余额,总览卡片和账号列表直接展示。

  • 定时任务:cron 表达式驱动的定时开机/关机。

  • 通知渠道:Telegram、Server酱、Webhook、SMTP 邮件,可测试;支持配置 HTTP(S) 代理。

  • 多账号隔离:每个账号独立的计费周期、熔断配置、成本分析和流量统计,总览页每账号一张卡片。


  • 界面一览



    总览页按账号展示流量卡片、趋势图和熔断状态:

    OpsDeck:纯 PHP 实现的阿里云 CDT 管理保活面板

    实例管理:状态、规格、IP、流量、操作一屏完成:

    OpsDeck:纯 PHP 实现的阿里云 CDT 管理保活面板

    流量监控:CDT 与实例汇总双口径,30 天曲线:

    OpsDeck:纯 PHP 实现的阿里云 CDT 管理保活面板

    账号管理:多账号接入、连接测试、费用与余额一目了然:

    OpsDeck:纯 PHP 实现的阿里云 CDT 管理保活面板

    定时任务:定时开关机与抢占式实例保活:

    OpsDeck:纯 PHP 实现的阿里云 CDT 管理保活面板

    系统设置:按账号独立配置熔断、计费周期、成本分析与自动保活:

    OpsDeck:纯 PHP 实现的阿里云 CDT 管理保活面板

    阿里云 RAM 权限



    建议使用 RAM 子账号,按需授权:

  • 查看实例:ecs:DescribeInstances

  • 操作实例:ecs:StartInstance、ecs:StopInstance、ecs:RebootInstance、ecs:DeleteInstance

  • 创建实例:ecs:CreateInstance 等创建相关权限

  • 流量监控:cms:DescribeMetricList、cms:DescribeMetricLast

  • 账号流量:cdt:ListCdtInternetTraffic

  • 成本分析:bss:DescribeInstanceBill、bss:QueryAccountBalance


  • 只查看和管理已有实例时,不需要创建类和账单权限。

    安全提醒



  • 不要把 AccessKey、AccessKey Secret 或初始化口令发给别人。

  • 公网访问请务必使用 HTTPS 反向代理,不要直接暴露端口。

  • 自动关机是成本保护手段而非绝对保证,监控数据存在延迟。

  • AccessKey Secret 使用 AES-256-GCM 加密落盘,数据库和密钥文件请做好备份。

评论(0)

6 + 9 =
← 返回首页