# push_web **Repository Path**: cdyangtao/push_web ## Basic Information - **Project Name**: push_web - **Description**: 本项目旨在构建一个自动化部署平台,用户只需上传 AI Studio 生成的 .zip 压缩包,平台即可自动完成解压、依赖安装、项目构建、FTP 上传及域名配置的全流程,最终生成可直接访问的网站地址。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-29 - **Last Updated**: 2026-04-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 网站部署平台 (Push Web) 一个基于 FastAPI + React 的自动化网站部署平台,专门用于部署 Google AI Studio 生成的网站包。 用户上传 `.zip` 压缩包后,平台自动完成解压、依赖安装、构建、FTP 上传的全流程部署。 ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | Python 3.10 + FastAPI + MySQL | | 前端 | React 19 + TypeScript + Ant Design 6 | | 构建 | Vite 8 + npm | | 认证 | JWT (PyJWT + bcrypt) | | 部署 | FTP 自动上传 | ## 功能特性 - **一键部署**:上传 zip 包,自动完成构建和部署 - **用户系统**:邮箱/手机号注册登录,JWT 认证 - **权限隔离**:普通用户只能看到自己的部署 - **管理后台**:管理员可管理用户和所有部署 - **子目录部署**:自动处理 Vite 项目的 base path 和路由 basename ## 项目结构 ``` push_web/ ├── backend/ │ ├── app/ │ │ ├── main.py # FastAPI 入口 │ │ ├── config.py # 配置管理 │ │ ├── database.py # 数据库连接和表初始化 │ │ ├── auth.py # JWT 认证工具 │ │ ├── models.py # 数据模型 │ │ ├── routers/ │ │ │ ├── deploy.py # 部署相关 API │ │ │ ├── auth.py # 登录注册 API │ │ │ └── admin.py # 管理员 API │ │ ├── services/ │ │ │ ├── build_service.py # npm 构建 │ │ │ ├── ftp_service.py # FTP 上传 │ │ │ └── unzip_service.py # 解压服务 │ │ └── utils/ │ │ └── folder_name.py # 文件夹名生成 │ ├── static/ # 前端构建产物 │ ├── .env # 环境配置(不提交) │ └── requirements.txt # Python 依赖 ├── frontend/ │ ├── src/ │ │ ├── App.tsx # 根组件 │ │ ├── main.tsx # 入口 │ │ ├── pages/ # 页面 │ │ ├── components/ # 组件 │ │ └── services/api.ts # API 封装 │ ├── package.json │ └── vite.config.ts └── .gitignore ``` ## 快速开始 ### 1. 环境要求 - Python 3.10+ - Node.js 18+ - MySQL 5.7+ - Nginx(生产环境) ### 2. 克隆项目 ```bash git clone https://gitee.com/cdyangtao/push_web.git cd push_web ``` ### 3. 后端配置 ```bash cd backend # 创建虚拟环境(可选) python3 -m venv venv source venv/bin/activate # 安装依赖 pip install fastapi uvicorn mysql-connector-python python-dotenv python-multipart paramiko PyJWT bcrypt # 配置环境变量 cp .env.example .env # 编辑 .env,填入数据库、FTP、域名等配置 ``` 创建 `.env` 文件: ```env # 数据库 DB_HOST=127.0.0.1 DB_PORT=3306 DB_NAME=push_web DB_USER=root DB_PASSWORD=your_password # FTP(用于部署用户网站) FTP_HOST=your_ftp_host FTP_PORT=21 FTP_USER=your_ftp_user FTP_PASS=your_ftp_password FTP_BASE_DIR=/ # 部署域名 BASE_DOMAIN=https://your-domain.com/ # 文件处理 UPLOAD_DIR=./uploads WORKSPACE_DIR=./workspace MAX_FILE_SIZE=104857600 BUILD_TIMEOUT=600 INSTALL_TIMEOUT=300 # JWT JWT_SECRET=your_random_secret JWT_EXPIRE_HOURS=72 # 管理员 ADMIN_EMAIL=admin@example.com ``` ### 4. 前端构建 ```bash cd frontend npm install npm run build ``` 构建产物会自动输出到 `backend/static/` 目录。 ### 5. 启动服务 ```bash cd backend uvicorn app.main:app --host 0.0.0.0 --port 5008 ``` 访问 `http://localhost:5008` 即可使用。 ### 6. 生产部署(Nginx 反向代理) ```nginx server { listen 80; server_name your-domain.com; # API 和前端 location / { proxy_pass http://127.0.0.1:5008; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 300s; proxy_send_timeout 300s; client_max_body_size 100m; } } ``` ### 7. Systemd 服务(开机自启) ```ini [Unit] Description=Web Deploy Platform After=network.target [Service] Type=simple User=root WorkingDirectory=/path/to/backend Environment="PATH=/root/.nvm/versions/node/v20.20.2/bin:/usr/local/bin:/usr/bin:/bin" ExecStart=/usr/local/bin/python3.10 -m uvicorn app.main:app --host 127.0.0.1 --port 5008 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ``` ```bash systemctl enable deploy-platform systemctl start deploy-platform ``` ## API 接口 ### 认证 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/auth/register` | 注册(email/phone + password) | | POST | `/api/auth/login` | 登录(返回 JWT token) | | GET | `/api/auth/me` | 获取当前用户信息 | | PUT | `/api/auth/password` | 修改密码 | ### 部署 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/deploy/upload` | 上传 zip 并部署 | | GET | `/api/deploy/status/{id}` | 查询部署状态 | | GET | `/api/deploy/history` | 部署历史(分页) | | GET | `/api/deploy/{id}` | 部署详情 | | DELETE | `/api/deploy/{id}` | 删除部署 | | POST | `/api/deploy/{id}/retry` | 重试失败部署 | | POST | `/api/deploy/redeploy/{id}` | 重新部署 | ### 管理员 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/admin/users` | 用户列表 | | PUT | `/api/admin/users/{id}/status` | 启用/禁用用户 | | PUT | `/api/admin/users/{id}/password` | 重置用户密码 | | DELETE | `/api/admin/users/{id}` | 删除用户 | | GET | `/api/admin/deployments` | 所有部署 | | DELETE | `/api/admin/deployments/{id}` | 删除部署 | | POST | `/api/admin/deployments/{id}/retry` | 重试部署 | ## 默认管理员 首次启动时自动创建管理员账号: - **邮箱**:`admin@aicenter.xin`(可通过 `.env` 中 `ADMIN_EMAIL` 修改) - **密码**:`Admin@2026` > ⚠️ 首次登录后请立即修改密码。 ## 部署流程 ``` 用户上传 .zip → 保存到 uploads/ → 后台线程启动 → 解压到 workspace/ → npm install(淘宝镜像加速) → vite build --base ./ → 修补 BrowserRouter basename → 注入 标签 → FTP 上传 dist/ 到 web 服务器 → 清理本地临时文件 ``` ## 支持的项目类型 - **React + Vite** 项目(Google AI Studio 生成的网站包) - 需要包含 `package.json`,且有 `vite` 作为构建依赖 - 自动处理子目录部署(base path、BrowserRouter basename) ## License MIT