From 78d7645a8bf0cc038c73ee69986e8c8f6ebb6946 Mon Sep 17 00:00:00 2001 From: wangqifan Date: Sun, 4 Jan 2026 18:57:57 +0800 Subject: [PATCH] first commit --- README.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..fedc6f8 --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# AWS IP 替换网站(Flask) + +基于 Flask + boto3 + MySQL 的小工具,用于: +- 根据输入的 IP 查找对应的 EC2 实例并终止 +- 使用配置好的 AMI 创建新实例 +- 如果新实例的公网 IP 存在于运维表(黑名单),通过停止/启动循环获取新 IP +- 支持多 AWS 账户,通过配置文件切换 + +## 快速开始 +1) 安装依赖 +```bash +python -m venv .venv +.\\.venv\\Scripts\\activate +pip install -r requirements.txt +``` + +2) 配置环境变量 +复制 `.env.example` 为 `.env`,按需修改: +- `DATABASE_URL`:MySQL 连接串,例如 `mysql+pymysql://user:pass@localhost:3306/ip_ops` +- `AWS_CONFIG_PATH`:AWS 账户配置文件(默认 `config/accounts.yaml`) +- `IP_RETRY_LIMIT`:新 IP 与运维表冲突时的关机/开机重试次数 + +3) 准备数据库 +创建数据库并授权,然后首次运行时会自动创建表 `ip_operations`: +```sql +CREATE DATABASE ip_ops DEFAULT CHARACTER SET utf8mb4; +GRANT ALL ON ip_ops.* TO 'user'@'%' IDENTIFIED BY 'pass'; +``` +表中记录的 IP 被视为不可使用的 IP 黑名单。 + +4) 配置 AWS 账户 +编辑 `config/accounts.yaml`,为每个账户填写:访问密钥、区域、AMI ID、实例类型、子网、安全组等。 + +5) 启动 +```bash +flask --app app run --host 0.0.0.0 --port 5000 +# 或 python app.py +``` + +## 运行流程 +1) 页面输入需要替换的 IP,并选择 AWS 账户 +2) 后端在该账户中查找实例(先查公网 IP,再查私网 IP) +3) 终止旧实例 +4) 使用配置的 AMI/实例规格创建新实例并等待 `running` +5) 如果新公网 IP 在 `ip_operations` 表中,自动执行停止+启动直到拿到未被列入黑名单的 IP(最多 `IP_RETRY_LIMIT` 次) + +## 注意事项 +- 真实环境会产生终止/创建实例等成本操作,请先在测试账户验证流程 +- 如果 AWS 或数据库配置加载失败,页面会显示错误提示 +- 根据需要可在 `ip_operations` 表中维护不可用 IP 列表,避免重复分配