优化更新
This commit is contained in:
@@ -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
|
||||
```
|
||||
|
||||
## 总结
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user