Files
shanshanzhong147 fd522b6c71
Build docker and publish / build (20.15.1) (push) Successful in 8m56s
path
2026-05-19 19:35:44 -07:00
..
2026-05-19 19:35:44 -07:00
x
2026-05-08 06:19:59 -07:00

PPanel 香港区新 AWS 账号部署说明

本目录用于在 新 AWS 账号 中按 香港区 ap-east-1 重建一套全新空环境。

目标架构:

DNS -> ALB -> WAF -> EC2(Nginx + ppanel-server + Redis + observability) -> RDS MySQL

1. 资源清单

按下面顺序创建资源:

  1. VPC
  2. 2 个公有子网 + 2 个私有子网
  3. Internet Gateway
  4. 公有 / 私有路由表
  5. 安全组
  6. RDS MySQL
  7. EC2 本机 Redis Docker
  8. EC2
  9. ACM 证书
  10. ALB + Target Group
  11. WAF Web ACL
  12. 平行环境域名

建议命名:

  • VPC: ppanel-hk-prod
  • EC2: ppanel-app-hk-01
  • RDS: ppanel-mysql-hk
  • Redis container: hifast-redis
  • ALB: ppanel-alb-hk
  • WAF: ppanel-waf-hk

2. 默认规格

EC2

  • Region: ap-east-1
  • OS: Ubuntu 24.04 LTS
  • Instance type: t4g.large 起步
  • Disk: gp3 80GB
  • Public subnet: 是
  • IAM Role: 允许读取 CloudWatch / SSM(如使用)
  • 如果要在 AWS EC2 本机执行 S3 备份:额外允许写入专用备份桶

RDS MySQL

  • Engine: MySQL 8.0
  • Class: db.r7g.xlarge
  • Storage: gp3 100GB
  • DB name: hifast
  • Username: admin
  • Public access: No
  • Charset: utf8mb4
  • Backup: 7-14 days

Redis

  • 部署位置:业务 EC2 本机
  • 部署方式:Docker
  • 版本:redis:8.2.1
  • 监听:0.0.0.0:6379
  • 应用连接:127.0.0.1:6379
  • 安全组:仅对白名单备用节点或同机应用开放

3. 网络与安全组

子网布局

  • public-a, public-b: ALB / EC2
  • private-a, private-b: RDS

安全组建议

sg-alb

  • Inbound
    • 80/tcp from 0.0.0.0/0
    • 443/tcp from 0.0.0.0/0
  • Outbound
    • 80/tcp to sg-ec2

sg-ec2

  • Inbound
    • 80/tcp from sg-alb
    • 22/tcp from 你的固定运维 IP
  • Outbound
    • all

说明:

  • 应用容器监听 127.0.0.1:8080
  • EC2 对外只让 Nginx 监听 80
  • Grafana / Prometheus / Tempo 仅监听 127.0.0.1

sg-rds

  • Inbound
    • 3306/tcp from sg-ec2

sg-ec2 额外说明

  • 如果需要外部备用节点复制 Redis,再额外放行:
    • 6379/tcp from 104.238.220.230/32

4. ALB / Target Group / 健康检查

Target Group

  • Type: Instance
  • Protocol: HTTP
  • Port: 80
  • Health check path: /v1/common/heartbeat
  • Success code: 200

这个路径已由项目现有接口提供,无需额外改代码。

ALB 监听器

  • 80 -> redirect to 443
  • 443 -> forward 到 target group

ACM

  • ap-east-1 申请证书
  • 先给平行环境域名,例如:
    • api-new.hifast.biz
    • logs-new.hifast.biz

5. WAF 规则

首版至少启用:

  1. AWSManagedRulesCommonRuleSet
  2. AWSManagedRulesKnownBadInputsRuleSet
  3. AWSManagedRulesAmazonIpReputationList
  4. 全站 rate-based rule
  5. 针对高风险路径的 rate-based rule

建议的第一版限流:

  • 全站:每 IP 2000 / 5 分钟
  • /v1/public/user/subscribe:每 IP 300 / 5 分钟
  • 登录 / 注册 / 验证码接口:每 IP 100 / 5 分钟

节点上报接口建议后续补:

  • /v1/server/status
  • /v1/server/online
  • /v1/server/traffic

优先用节点出口 IP 白名单;没有固定出口 IP 的节点暂时保留 secret_key,但不要把它当成唯一防线。

6. EC2 文件落地

在 EC2 上建议使用:

  • 应用目录:/opt/ppanel
  • Nginx 配置:/etc/nginx/sites-available/ppanel-api.conf

需要上传这些文件 / 目录:

  • docker-compose.cloud.yml
  • deploy/aws/ap-east-1/configs/ppanel.yaml.example -> 重命名为 configs/ppanel.yaml
  • deploy/aws/ap-east-1/nginx/ppanel-api.conf
  • grafana/
  • loki/
  • prometheus/
  • tempo/
  • .env.example -> 重命名为 .env

目标目录示例:

/opt/ppanel/
  docker-compose.cloud.yml
  .env
  configs/ppanel.yaml
  grafana/
  loki/
  prometheus/
  tempo/
  logs/
  cache/
  tempo_data/

7. 应用配置

基线模板见:

关键值必须替换:

  • MySQL.Addr
  • MySQL.Password
  • Redis.Host
  • Redis.Pass
  • JwtAuth.AccessSecret
  • Administrator.Email
  • Administrator.Password
  • AppSignature.AppSecrets.*
  • device.security_secret
  • Site.Host
  • Site.SiteName

Redis 约定保持不变:

  • 业务缓存:DB 0
  • AsynqDB 5(代码内部已固定使用)

8. 部署步骤

8.1 初始化 EC2

把脚本上传到 EC2 后执行:

9. 104 灾备节点常用运维脚本

如果你要在 104.238.220.230 上执行数据迁移、主从重拉、主库提升,可以直接复用仓库里的这几份脚本:

9.1 数据迁移工具

支持:

  • 备份 MySQL 到 S3
  • 备份 Redis 到 S3
  • 从正式库导出 MySQL sql.gz
  • sql.gz 导入 AWS RDS
  • 从正式 Redis 导出 RDB
  • RDB 导入 Docker Redis 或宿主机 Redis
  • 查看 MySQL / Redis 当前主从状态
  • 强制重拉 MySQL / Redis 主从
  • 把 MySQL / Redis 从库提升为可写主库

示例:

bash deploy/scripts/hifast_data_sync_tool.sh /root/replica-ops.env
chmod +x deploy/scripts/bootstrap_aws_ec2.sh
sudo APP_DIR=/opt/ppanel deploy/scripts/bootstrap_aws_ec2.sh

8.2 安装 Nginx 配置

sudo cp deploy/aws/ap-east-1/nginx/ppanel-api.conf /etc/nginx/sites-available/ppanel-api.conf
sudo ln -sf /etc/nginx/sites-available/ppanel-api.conf /etc/nginx/sites-enabled/ppanel-api.conf
sudo nginx -t
sudo systemctl reload nginx

8.3 启动容器

cd /opt/ppanel
docker compose -f docker-compose.cloud.yml up -d

8.4 预检

chmod +x deploy/scripts/preflight_aws_hk.sh
APP_DIR=/opt/ppanel \
RDS_HOST=<new-rds-endpoint> \
REDIS_HOST=127.0.0.1 \
deploy/scripts/preflight_aws_hk.sh

9. 平行环境验证

先验证 api-new.hifast.biz,不要直接切正式域名。

必测项:

  1. ALB target 为 healthy
  2. GET /v1/common/heartbeat 返回 200
  3. 管理员登录
  4. 用户注册 / 登录
  5. 订阅查询
  6. 节点上报 /v1/server/status
  7. 本机 Redis 可写缓存
  8. Asynq 可入队并消费

10. 正式切换

切换前检查:

  1. ALB 5xx 为 0
  2. EC2 CPU / Memory 正常
  3. RDS CPU / Connections 正常
  4. 本机 Redis CPU / Connections / Memory 正常
  5. WAF 已挂到 ALB
  6. EC2 安全组没有对公网放 8080/3333/9090/4317

切换方式:

  1. 保持新环境先跑平行域名
  2. 正式域名切到新 ALB
  3. 观察至少 1 小时
  4. 确认无误后再处理旧环境

11. 监控建议

至少建这些 CloudWatch / Grafana 观测项:

  • ALB RequestCount, HTTPCode_ELB_5XX_Count, TargetResponseTime
  • EC2 CPUUtilization, NetworkIn, NetworkOut, StatusCheckFailed
  • RDS CPUUtilization, DatabaseConnections, ReadLatency, WriteLatency
  • Redis 容器 CPU / Memory / restart count

12. 这次方案的边界

本目录交付的是:

  • 香港区新账号的部署模板
  • 新空环境启动与验证流程
  • ALB / WAF / EC2 / RDS / 本机 Redis 的落地约定

不包含:

  • 旧数据迁移
  • Terraform / CloudFormation 自动建资源
  • Redis 托管版改造
  • 多活 / 自动扩缩容

13. S3 备份补强

当前已落地的 S3 备份桶:

  • hifast-prod-backups-200810848252-ap-east-1

建议与现网结合方式:

  1. RDS automated backup 继续保留,作为第一层恢复能力
  2. 104 外部 MySQL 从库执行逻辑备份并上传到 S3,作为第二层可下载备份
  3. 104 外部 Redis 从库按需导出 RDB 到 S3,补齐缓存类灾备材料

仓库中已补充:

建议把 MySQL 备份脚本优先部署到 104,因为它直接连接本地只读从库,对 AWS 主库扰动最小。