8.6 KiB
8.6 KiB
PPanel 香港区新 AWS 账号部署说明
本目录用于在 新 AWS 账号 中按 香港区 ap-east-1 重建一套全新空环境。
目标架构:
DNS -> ALB -> WAF -> EC2(Nginx + ppanel-server + Redis + observability) -> RDS MySQL
1. 资源清单
按下面顺序创建资源:
- VPC
- 2 个公有子网 + 2 个私有子网
- Internet Gateway
- 公有 / 私有路由表
- 安全组
- RDS MySQL
- EC2 本机 Redis Docker
- EC2
- ACM 证书
- ALB + Target Group
- WAF Web ACL
- 平行环境域名
建议命名:
- 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 / EC2private-a,private-b: RDS
安全组建议
sg-alb
- Inbound
80/tcpfrom0.0.0.0/0443/tcpfrom0.0.0.0/0
- Outbound
80/tcptosg-ec2
sg-ec2
- Inbound
80/tcpfromsg-alb22/tcpfrom你的固定运维 IP
- Outbound
- all
说明:
- 应用容器监听
127.0.0.1:8080 - EC2 对外只让 Nginx 监听
80 - Grafana / Prometheus / Tempo 仅监听
127.0.0.1
sg-rds
- Inbound
3306/tcpfromsg-ec2
sg-ec2 额外说明
- 如果需要外部备用节点复制 Redis,再额外放行:
6379/tcpfrom104.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 to443443-> forward 到 target group
ACM
- 在
ap-east-1申请证书 - 先给平行环境域名,例如:
api-new.hifast.bizlogs-new.hifast.biz
5. WAF 规则
首版至少启用:
AWSManagedRulesCommonRuleSetAWSManagedRulesKnownBadInputsRuleSetAWSManagedRulesAmazonIpReputationList- 全站 rate-based rule
- 针对高风险路径的 rate-based rule
建议的第一版限流:
- 全站:每 IP
2000 / 5 分钟 /v1/public/user/subscribe:每 IP300 / 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.ymldeploy/aws/ap-east-1/configs/ppanel.yaml.example-> 重命名为configs/ppanel.yamldeploy/aws/ap-east-1/nginx/ppanel-api.confgrafana/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.AddrMySQL.PasswordRedis.HostRedis.PassJwtAuth.AccessSecretAdministrator.EmailAdministrator.PasswordAppSignature.AppSecrets.*device.security_secretSite.HostSite.SiteName
Redis 约定保持不变:
- 业务缓存:DB
0 - Asynq:DB
5(代码内部已固定使用)
8. 部署步骤
8.1 初始化 EC2
把脚本上传到 EC2 后执行:
9. 104 灾备节点常用运维脚本
如果你要在 104.238.220.230 上执行数据迁移、主从重拉、主库提升,可以直接复用仓库里的这几份脚本:
- 数据导出 / 导入交互工具:
- MySQL 主从运维工具:
- Redis 主从运维工具:
- 统一总入口:
- 主从运维环境模板:
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,不要直接切正式域名。
必测项:
ALB target为 healthyGET /v1/common/heartbeat返回 200- 管理员登录
- 用户注册 / 登录
- 订阅查询
- 节点上报
/v1/server/status - 本机 Redis 可写缓存
- Asynq 可入队并消费
10. 正式切换
切换前检查:
- ALB 5xx 为 0
- EC2 CPU / Memory 正常
- RDS CPU / Connections 正常
- 本机 Redis CPU / Connections / Memory 正常
- WAF 已挂到 ALB
- EC2 安全组没有对公网放
8080/3333/9090/4317
切换方式:
- 保持新环境先跑平行域名
- 正式域名切到新 ALB
- 观察至少 1 小时
- 确认无误后再处理旧环境
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
建议与现网结合方式:
RDS automated backup继续保留,作为第一层恢复能力104外部 MySQL 从库执行逻辑备份并上传到 S3,作为第二层可下载备份104外部 Redis 从库按需导出RDB到 S3,补齐缓存类灾备材料
仓库中已补充:
- 环境变量模板:
configs/backup-to-s3.env.example - MySQL 备份脚本:
../../scripts/mysql_backup_to_s3.sh - Redis 备份脚本:
../../scripts/redis_rdb_backup_to_s3.sh
建议把 MySQL 备份脚本优先部署到 104,因为它直接连接本地只读从库,对 AWS 主库扰动最小。