6.0 KiB
Raw Blame History

name title description tags related_skills version
webapp-remote-deploy Web 应用完整部署工具包 通过 SSH 将任意 Web 应用及全部辅助系统部署到远程目标系统 — 支持多种数据库、自动端口分配、Nginx/SSL、防火墙、Fail2ban、自动备份、健康守护、告警
deployment
webapp
ssh
remote
production
devops
monitoring
backup
security
hermes-app-deploy
ssh-password-auth
2.0.0

Web 应用完整部署工具包

概述

通用生产级 Web 应用部署工具包。支持任意 Web 框架Python/Node/Java/Go 等),自动配置全套基础设施。

辅助系统清单

类别 系统 作用 生产必需
数据层 MariaDB/PostgreSQL/MySQL 持久存储,调优 ★★★★★
缓存层 Redis Session + 缓存 ★★★★★
接入层 Nginx 反向代理 + SSL 终结 ★★★★★
安全层 SSL/Certbot HTTPS 自动续期 ★★★★★
安全层 UFW 防火墙 端口白名单 ★★★★☆
安全层 Fail2ban 暴力破解防护 ★★★★☆
运维层 自动备份 数据库每日全量 ★★★★★
运维层 日志轮转 应用日志切割 ★★★★☆
运维层 健康守护 进程存活 + 自动重启 ★★★★★
运维层 告警系统 磁盘/内存/CPU 阈值告警 ★★★☆☆
基础层 NTP 时间同步 日志/计费时间准确 ★★★★★

工具包结构

webapp-remote-deploy/
├── SKILL.md              (本文档)
└── scripts/
    ├── deploy_all.sh     主入口:一键部署全部
    ├── 01-firewall.sh    UFW 防火墙配置
    ├── 02-database.sh    数据库安装 + 生产调优 (MariaDB/PostgreSQL/MySQL)
    ├── 03-redis.sh       Redis 安装 + 生产调优
    ├── 04-backup.sh      自动备份 + 保留策略
    ├── 05-logrotate.sh   日志轮转配置
    ├── 06-watchdog.sh    健康守护 + 自动重启
    ├── 07-fail2ban.sh    暴力破解防护
    ├── 08-alerts.sh      系统告警
    └── 09-nginx.sh       Nginx + SSL

部署顺序

Phase 0: 环境探测 + 系统依赖
Phase 1: 防火墙 (01-firewall.sh)        ← 最先,缩小攻击面
Phase 2: 数据库 (02-database.sh)        ← 按选择安装 MariaDB/PostgreSQL/MySQL
Phase 3: Redis (03-redis.sh)            ← 缓存层
Phase 4: 应用部署                       ← 核心应用 (用户提供部署脚本或手动)
Phase 5: 备份系统 (04-backup.sh)        ← 数据保护
Phase 6: 日志轮转 (05-logrotate.sh)     ← 日志管理
Phase 7: 健康守护 (06-watchdog.sh)      ← 进程保活 (systemd 自动启动)
Phase 8: Fail2ban (07-fail2ban.sh)      ← 入侵防护
Phase 9: 告警系统 (08-alerts.sh)        ← 异常告警
Phase 10: Nginx + SSL (09-nginx.sh)     ← 最后,确保应用已就绪

Support Files

  • references/gpu-async-service-pattern.md — ahserver + longtasks + Redis pattern for GPU inference services (8×4090 server deployment conventions, .dspy routes, config.json, Nginx routing)
  • references/pipeline-server.md — Pipeline 服务器拓扑: 应用/pipeline@pipeline.opencomputing.cn, git/gateway, GPU服务器角色分工
  • scripts/01-firewall.sh through scripts/09-nginx.sh — deployment phase scripts

关键特性

1. 数据库选择

支持三种主流数据库,自动调优:

  • MariaDB (默认) — innodb_buffer_pool_size 自动设为内存 50-70%
  • PostgreSQL — shared_buffers 自动设为内存 25%
  • MySQL — 同 MariaDB 调优策略

2. 自动端口分配

自动检测目标机器未占用端口 (8000-9999 范围),避免冲突。应用和 Nginx upstream 保持一致。

3. 系统重启自动启动

  • 应用通过 systemd service 管理,systemctl enable 开机自启
  • 健康守护 watchdog 也是 systemd timer开机自启
  • 所有辅助系统 (Redis/DB/Nginx/Fail2ban) 均 enable

4. 通用性

  • 不绑定特定框架或语言
  • 应用部署部分由用户提供脚本或手动操作
  • 所有脚本通过环境变量参数化,高度可定制

SSH 自动化 (Hermes Agent 执行)

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, port=22, username=USER, password=PASS)

def run(cmd, timeout=600):
    stdin, stdout, stderr = ssh.exec_command(cmd, timeout=timeout)
    out = stdout.read().decode()
    err = stderr.read().decode()
    code = stdout.channel.recv_exit_status()
    return {'output': out, 'error': err, 'code': code}

# 逐脚本上传并执行...

一键部署

bash deploy_all.sh

交互式输入:域名、数据库类型、密码、邮箱等。自动分配端口。

回滚方案

sudo systemctl stop <app>-watchdog
sudo systemctl stop <app>
# 数据库回滚
<db-client> -u <user> -p <db> < ~/backups/<db>_YYYYMMDD.sql.gz
# 代码回滚
cd ~/apps/<app> && git checkout <commit>
sudo systemctl start <app>

SSH 限流 (MaxStartups/Fail2ban)

部分云服务器 SSH 配置了严格的连接限流MaxStartups 或 Fail2ban连续快速 SSH 调用会被 kex_exchange_identification: Connection closed by remote host 拒绝。

症状: 第一次 SSH 成功,后续连续调用在同一分钟内被拒绝。 解决: 每次 SSH 调用前 sleep 12(或更长)。在 Hermes agent 中用 sleep N && ssh ... 包裹命令。 诊断: ssh -vvv host 看是否在 kex 阶段被断连。

常见陷阱

  1. 数据库默认参数太小 — 生产必须调优 (工具包自动处理)
  2. Redis 无 maxmemory — OOM 时系统 kill 进程
  3. 无防火墙 — 应用端口暴露公网
  4. 无日志轮转 — 日志无限增长撑爆磁盘
  5. watchdog 重启风暴 — 必须设上限
  6. Fail2ban 误封自己 — 必须配白名单
  7. 端口冲突 — 工具包自动检测未用端口
  8. 忘记 enable service — 重启后应用不启动