优化更新

This commit is contained in:
2026-09-13 23:01:19 +08:00
parent 0c67b3e8b5
commit 23bd737b82
88 changed files with 2214 additions and 2503 deletions
@@ -15,11 +15,7 @@
首次部署时,使用初始化脚本一键完成建库、建表、Flask-Migrate stamp:
```bash
# 方式一:直接运行脚本
python scripts/setup_db.py
# 方式二:Make 命令
make db-init
```
:::tip 初始化流程
@@ -40,7 +36,7 @@ make db-init
flask db migrate -m "描述变更内容"
# 或使用 Make 命令
make migrate-revision
flask db migrate
```
:::tip 注意事项
@@ -56,7 +52,7 @@ make migrate-revision
flask db upgrade
# 或使用 Make 命令
make migrate-upgrade
flask db upgrade
```
### 回滚迁移
@@ -87,7 +83,7 @@ flask db history
flask db stamp head
# 或使用 Make 命令
make migrate-stamp
flask db stamp head
```
## 跨库数据迁移
@@ -111,7 +107,7 @@ make migrate-stamp
| 目标库 | 驱动包 | 说明 |
|:----|:----|:----|
| PostgreSQL | psycopg[binary] | psycopg3 |
| PostgreSQL | psycopg2-binary | psycopg2 |
| SQL Server | pymssql | - |
| SQLite | 内置 | 无需额外驱动 |
| Oracle | oracledb | thin 模式,无需安装 Oracle Client |
@@ -184,12 +180,12 @@ pip install -r requirements.txt
# 干跑:核对源库表和行数
python scripts/migrate_db.py --dry-run \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-user=root --src-pass=root --src-db=djangoadmin.flask.elevue
--src-user=root --src-pass=root --src-db=djangoadmin.flask.naivevue
# 或使用 Make 命令
make db-migrate-dry-run ARGS="\
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-user=root --src-pass=root --src-db=djangoadmin.flask.elevue"
--src-user=root --src-pass=root --src-db=djangoadmin.flask.naivevue"
```
### MySQL → PostgreSQL
@@ -197,9 +193,9 @@ make db-migrate-dry-run ARGS="\
```bash
python scripts/migrate_db.py \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-db=djangoadmin.flask.elevue --src-user=root --src-pass=root \
--src-db=djangoadmin.flask.naivevue --src-user=root --src-pass=root \
--dst-driver=postgresql --dst-host=localhost --dst-port=5432 \
--dst-db=djangoadmin.flask.elevue --dst-user=postgres --dst-pass=你的密码 \
--dst-db=djangoadmin.flask.naivevue --dst-user=postgres --dst-pass=你的密码 \
--drop-target-first
```
@@ -207,12 +203,12 @@ python scripts/migrate_db.py \
```
==============================================================
[迁移开始] 源: mysql:djangoadmin.flask.elevue → 目标: postgresql:djangoadmin.flask.elevue
[迁移开始] 源: mysql:djangoadmin.flask.naivevue → 目标: postgresql:djangoadmin.flask.naivevue
[迁移开始] 待迁移 23 张表
==============================================================
[·] [1/5] 建目标库...
· 正在连接 postgres 维护库...
· 正在创建目标库 "djangoadmin.flask.elevue"(UTF8)...
· 正在创建目标库 "djangoadmin.flask.naivevue"(UTF8)...
[✓] [1/5] 建目标库 完成(耗时 947ms)
[·] [2/5] 建表结构(23 张表 create_all)...
[✓] [2/5] 建表结构 完成(耗时 1.1s),23 张表
@@ -245,9 +241,9 @@ python scripts/migrate_db.py \
```bash
python scripts/migrate_db.py \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-db=djangoadmin.flask.elevue --src-user=root --src-pass=root \
--src-db=djangoadmin.flask.naivevue --src-user=root --src-pass=root \
--dst-driver=mssql --dst-host=localhost --dst-port=1433 \
--dst-db=djangoadmin.flask.elevue --dst-user=sa --dst-pass=你的密码 \
--dst-db=djangoadmin.flask.naivevue --dst-user=sa --dst-pass=你的密码 \
--drop-target-first
```
@@ -260,8 +256,8 @@ python scripts/migrate_db.py \
```bash
python scripts/migrate_db.py \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-db=djangoadmin.flask.elevue --src-user=root --src-pass=root \
--dst-driver=sqlite --dst-db=D:/data/djangoadmin.flask.elevue.db \
--src-db=djangoadmin.flask.naivevue --src-user=root --src-pass=root \
--dst-driver=sqlite --dst-db=D:/data/djangoadmin.flask.naivevue.db \
--drop-target-first
```
@@ -276,7 +272,7 @@ python scripts/migrate_db.py \
```bash
python scripts/migrate_db.py \
--src-driver=mysql --src-host=127.0.0.1 --src-port=3306 \
--src-db=djangoadmin.flask.elevue --src-user=root --src-pass=root \
--src-db=djangoadmin.flask.naivevue --src-user=root --src-pass=root \
--dst-driver=oracle --dst-host=localhost --dst-port=1521 \
--dst-db=ORCLPDB1 --dst-user=flask --dst-pass=你的密码 \
--drop-target-first
@@ -362,14 +358,14 @@ CREATE SEQUENCE flask_user_id_seq START WITH <max_id+1>;
| 场景 | 命令 |
|------|------|
| 全新安装 | `make db-init` |
| 模型变更后生成迁移 | `make migrate-revision` |
| 应用迁移 | `make migrate-upgrade` |
| 全新安装 | `python scripts/setup_db.py` |
| 模型变更后生成迁移 | `flask db migrate` |
| 应用迁移 | `flask db upgrade` |
| 回滚一次迁移 | `flask db downgrade -1` |
| 标记已有库为最新 | `make migrate-stamp` |
| 标记已有库为最新 | `flask db stamp head` |
| 跨库迁移干跑 | `make db-migrate-dry-run ARGS="..."` |
| 跨库迁移执行 | `make db-migrate ARGS="..."` |
## 总结
数据库迁移分为结构迁移(Flask-Migrate / Alembic)和数据迁移(`migrate_db.py`)两部分。全新安装用 `make db-init`,模型变更用 Flask-Migrate 自动生成迁移脚本,跨库切换用 `migrate_db.py` 数据泵。建议每次迁移前先干跑确认,生产环境务必做好备份。
数据库迁移分为结构迁移(Flask-Migrate / Alembic)和数据迁移(`migrate_db.py`)两部分。全新安装用 `python scripts/setup_db.py`,模型变更用 Flask-Migrate 自动生成迁移脚本,跨库切换用 `migrate_db.py` 数据泵。建议每次迁移前先干跑确认,生产环境务必做好备份。
@@ -29,7 +29,7 @@
**数据库**:
- [ ] 安装 MySQL 8.0+
- [ ] 创建数据库:`CREATE DATABASE djangoadmin.flask.elevue DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`
- [ ] 创建数据库:`CREATE DATABASE djangoadmin.flask.naivevue DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`
- [ ] 创建数据库用户并授权
- [ ] 修改 `.env` 中的数据库配置
- [ ] 初始化数据库:`python scripts/setup_db.py`
@@ -138,7 +138,7 @@ server {
### 数据库迁移
- [ ] 备份数据库:`mysqldump -uroot -p djangoadmin.flask.elevue > backup.sql`
- [ ] 备份数据库:`mysqldump -uroot -p djangoadmin.flask.naivevue > backup.sql`
- [ ] 执行迁移:`flask db upgrade`
- [ ] 验证迁移结果
@@ -198,7 +198,7 @@ cp -r /opt/backup/dist /opt/project/ui/dist
```bash
# 从备份恢复
mysql -uroot -p djangoadmin.flask.elevue < backup.sql
mysql -uroot -p djangoadmin.flask.naivevue < backup.sql
```
## 总结
+11 -11
View File
@@ -12,7 +12,7 @@
## Dockerfile 详解
项目根目录 `Dockerfile` 完整内容:
`docker/Dockerfile` 完整内容:
```dockerfile
# 基础镜像:Python 3.11-slim
@@ -58,9 +58,9 @@ Dockerfile 将 `requirements.txt` 和源码分两步 COPY,利用 Docker 层缓
version: '3.7'
services:
flask_elevue: # 服务名称
image: flask_elevue # 镜像名称
container_name: flask_elevue # 容器名称
flask_naivevue: # 服务名称
image: flask_naivevue # 镜像名称
container_name: flask_naivevue # 容器名称
build: # 构建配置
context: ./ # 构建上下文路径
dockerfile: Dockerfile # Dockerfile 文件名
@@ -116,26 +116,26 @@ docker-compose build
docker-compose ps
# 查看日志
docker-compose logs -f flask_elevue
docker-compose logs -f flask_naivevue
# 停止服务
docker-compose down
# 重启服务
docker-compose restart flask_elevue
docker-compose restart flask_naivevue
# 进入容器
docker exec -it flask_elevue bash
docker exec -it flask_naivevue bash
```
### 查看容器资源
```bash
# 查看容器资源占用
docker stats flask_elevue
docker stats flask_naivevue
# 查看容器日志大小
docker inspect --format='{{.LogPath}}' flask_elevue
docker inspect --format='{{.LogPath}}' flask_naivevue
```
## 环境变量注入
@@ -187,7 +187,7 @@ logging:
```yaml
services:
flask_elevue:
flask_naivevue:
# ... 后端配置 ...
nginx:
@@ -199,7 +199,7 @@ services:
- ./nginx.conf:/etc/nginx/conf.d/default.conf # Nginx 配置文件
- ./dist:/usr/share/nginx/html # 前端构建产物
depends_on: # 依赖服务
- flask_elevue # 等待后端服务启动
- flask_naivevue # 等待后端服务启动
```
## 总结
@@ -113,18 +113,18 @@ Docker 部署时,`docker-compose.yml` 通过 `env_file: .env` 注入环境变
| DB_DRIVER | 数据库 | 依赖包 | 连接串格式 |
|-----------|--------|--------|-----------|
| mysql(默认) | MySQL 8.x | PyMySQL | `mysql+pymysql://user:pass@host:3306/db` |
| postgresql | PostgreSQL 14+ | psycopg[binary] | `postgresql+psycopg://user:pass@host:5432/db` |
| postgresql | PostgreSQL 14+ | psycopg2-binary | `postgresql+psycopg2://user:pass@host:5432/db` |
| mssql | SQL Server 2019+ | pymssql | `mssql+pymssql://user:pass@host:1433/db` |
| sqlite | SQLite 3 | 内置 | `sqlite:///path/to/db.sqlite3` |
| oracle | Oracle 12c+ | oracledb | `oracle+oracledb://user:pass@host:1521/db` |
:::tip 切换数据库后
切换数据库驱动后,需要重新初始化数据库结构。项目 Makefile 提供常用命令:
切换数据库驱动后,需要重新初始化数据库结构。常用命令:
```bash
make db-init # 初始化数据库(建库 + SQL 导入 + 补表 + flask db stamp)
make migrate-revision # 生成增量迁移脚本
make migrate-upgrade # 应用迁移
make migrate-stamp # 标记当前库已到基线
python scripts/setup_db.py # 初始化数据库(建库 + SQL 导入 + 补表 + flask db stamp)
flask db migrate # 生成增量迁移脚本
flask db upgrade # 应用迁移
flask db stamp head # 标记当前库已到基线
make db-migrate ARGS="..." # 跨库数据迁移
```
:::
@@ -18,16 +18,14 @@
Flask 应用提供健康检查路由,可用于负载均衡器或容器编排的探针配置:
```bash
# 基础健康检查
GET /api/v1/health
# 基础健康检查(无需认证,已在登录白名单中)
GET /health
# 响应示例
{
"code": 0,
"data": {
"status": "healthy",
"version": "1.0.0",
"uptime": 3600
"status": "ok"
},
"msg": "操作成功",
"ok": true
@@ -38,7 +36,7 @@ GET /api/v1/health
在 Dockerfile 中配置 HEALTHCHECK:
```dockerfile
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:8021/api/v1/health || exit 1
CMD curl -f http://localhost:8021/health || exit 1
```
:::
@@ -79,7 +77,7 @@ HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
```
2026-09-05 10:30:15 [INFO] src.app: Application startup complete
2026-09-05 10:30:16 [WARNING] src.middleware.rate_limit: Rate limit exceeded for 192.168.1.100
2026-09-05 10:30:16 [WARNING] src.middleware.auth: Login attempt locked for user admin from 192.168.1.100
2026-09-05 10:30:17 [ERROR] src.modules.auth.service: Login failed for user admin
```
@@ -15,7 +15,7 @@ Nginx 作为反向代理服务器,承担静态资源服务、API 请求转发
## 基础配置
项目提供了 Nginx 配置模板 `deploy/nginx.conf`,按需修改即可使用:
以下为推荐的 Nginx 配置模板,按需修改后保存为 `/etc/nginx/conf.d/djangoadmin.conf`:
```nginx
upstream flask_backend {
@@ -101,8 +101,7 @@ cd ui && pnpm build
mkdir -p /data/apps/djangoadmin/frontend
cp -r ui/dist /data/apps/djangoadmin/frontend/
# 3. 拷贝 Nginx 配置
cp deploy/nginx.conf /etc/nginx/conf.d/djangoadmin.conf
# 3. 将上方配置保存为 /etc/nginx/conf.d/djangoadmin.conf
# 4. 修改配置中的实际值(server_name、root 等)
@@ -130,18 +130,18 @@ long_query_time = 2
mysql -uroot -p
-- 创建数据库
CREATE DATABASE `djangoadmin.flask.elevue`
CREATE DATABASE `djangoadmin.flask.naivevue`
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
-- 创建专用用户(生产环境不要用 root)
CREATE USER 'flask_user'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON `djangoadmin.flask.elevue`.* TO 'flask_user'@'localhost';
GRANT ALL PRIVILEGES ON `djangoadmin.flask.naivevue`.* TO 'flask_user'@'localhost';
FLUSH PRIVILEGES;
-- 导入数据
USE `djangoadmin.flask.elevue`;
SOURCE /opt/project/document/mysql/djangoadmin.flask.elevue.sql;
USE `djangoadmin.flask.naivevue`;
SOURCE /opt/project/document/mysql/djangoadmin.flask.naivevue.sql;
```
## Redis 配置
@@ -394,7 +394,7 @@ FLASK_DEBUG=false
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DRIVER=mysql
DB_DATABASE=djangoadmin.flask.elevue
DB_DATABASE=djangoadmin.flask.naivevue
DB_USERNAME=flask_user
DB_PASSWORD=YourStrongPassword123!
@@ -12,7 +12,7 @@ Supervisor 是一个 Python 编写的进程管理工具,用于在 Linux 服务
## 配置文件示例
项目提供了 Supervisor 配置模板 `deploy/supervisor.conf`,完整内容:
以下为推荐的 Supervisor 配置模板,按需修改后保存到 `/etc/supervisor/conf.d/`:
```ini
; Supervisor 进程管理示例配置
@@ -47,7 +47,7 @@ environment=PYTHONUNBUFFERED=1
# 1. 修改 command 中的虚拟环境路径
# 2. 修改 directory 为项目实际路径
# 3. 修改 stdout_logfile 为日志实际路径
cp deploy/supervisor.conf /etc/supervisor/conf.d/djangoadmin-flask.conf
# 将上方配置保存为 /etc/supervisor/conf.d/djangoadmin-flask.conf
```
:::
@@ -192,4 +192,4 @@ startsecs=10
## 总结
Supervisor 是 Linux 环境下管理 Flask 进程的可靠方案,提供自动重启、日志轮转、进程监控等能力。配置文件位于 `deploy/supervisor.conf`,修改路径后复制到 `/etc/supervisor/conf.d/` 即可使用。生产环境建议配合 systemd 管理 Supervisor 自身的启动。
Supervisor 是 Linux 环境下管理 Flask 进程的可靠方案,提供自动重启、日志轮转、进程监控等能力。按上方模板创建配置文件,修改路径后复制到 `/etc/supervisor/conf.d/` 即可使用。生产环境建议配合 systemd 管理 Supervisor 自身的启动。
@@ -249,10 +249,10 @@ python -m memory_profiler app.py
```bash
# 1. 查看容器日志
docker-compose logs flask_elevue
docker-compose logs flask_naivevue
# 2. 进入容器调试
docker run -it --rm flask_elevue bash
docker run -it --rm flask_naivevue bash
# 3. 检查 .env 文件
cat .env
@@ -94,8 +94,6 @@ flask db history
# 执行迁移
flask db upgrade
# 或使用 Make 命令
make migrate-upgrade
```
:::warning 迁移前确认
@@ -124,7 +122,7 @@ sudo systemctl restart djangoadmin-flask
sudo supervisorctl status djangoadmin-flask
# 2. 检查健康端点
curl -s http://127.0.0.1:8021/api/v1/health | python -m json.tool
curl -s http://127.0.0.1:8021/health | python -m json.tool
# 3. 检查日志
tail -f /data/apps/logs/supervisor.out.log