优化更新

This commit is contained in:
2026-09-13 18:12:07 +08:00
parent 7f758cc6e9
commit d7a081e8b7
92 changed files with 2429 additions and 1117 deletions
@@ -18,11 +18,11 @@
# 使用 mysqldump 备份单个数据库
mysqldump -h 127.0.0.1 -u root -p --single-transaction \
--routines --triggers --events \
djangoadmin.django.elevue > backup_$(date +%Y%m%d_%H%M%S).sql
djangoadmin.django.naivevue > backup_$(date +%Y%m%d_%H%M%S).sql
# 压缩备份
mysqldump -h 127.0.0.1 -u root -p --single-transaction \
djangoadmin.django.elevue | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
djangoadmin.django.naivevue | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
```
:::tip --single-transaction 作用
@@ -44,7 +44,7 @@ mysqlbinlog --start-datetime="2026-09-05 00:00:00" \
:::tip binlog 配置
确保 MySQL 配置中启用了 binlog:
```ini
```bash
[mysqld]
server-id = 1
log-bin = mysql-bin
@@ -76,10 +76,10 @@ Redis 用于缓存和 JWT token 黑名单,数据可从数据库重建。建议
```bash
# 打包上传目录
tar -czf uploads_$(date +%Y%m%d).tar.gz /data/apps/DjangoAdmin_Django_EleVue/public/uploads/
tar -czf uploads_$(date +%Y%m%d).tar.gz /data/apps/DjangoAdmin_Django_NaiveVue/public/uploads/
# 使用 rsync 增量同步到远程
rsync -avz --delete /data/apps/DjangoAdmin_Django_EleVue/public/uploads/ backup@10.0.2.100:/data/backup/uploads/
rsync -avz --delete /data/apps/DjangoAdmin_Django_NaiveVue/public/uploads/ backup@10.0.2.100:/data/backup/uploads/
```
## 自动化备份
@@ -100,7 +100,7 @@ mkdir -p ${BACKUP_DIR}/{mysql,redis,uploads}
# MySQL 备份
mysqldump -h 127.0.0.1 -u djangoadmin -p'<密码>' \
--single-transaction djangoadmin.django.elevue | gzip > \
--single-transaction djangoadmin.django.naivevue | gzip > \
${BACKUP_DIR}/mysql/backup_${DATE}.sql.gz
# Redis 备份
@@ -110,7 +110,7 @@ cp /var/lib/redis/dump.rdb ${BACKUP_DIR}/redis/redis_${DATE}.rdb
# 上传文件备份
tar -czf ${BACKUP_DIR}/uploads/uploads_${DATE}.tar.gz \
/data/apps/DjangoAdmin_Django_EleVue/public/uploads/
/data/apps/DjangoAdmin_Django_NaiveVue/public/uploads/
# 清理过期备份
find ${BACKUP_DIR} -type f -mtime +${RETENTION_DAYS} -delete
@@ -134,10 +134,10 @@ crontab -e
```bash
# 从 SQL 文件恢复
mysql -h 127.0.0.1 -u root -p djangoadmin.django.elevue < backup_20260905.sql
mysql -h 127.0.0.1 -u root -p djangoadmin.django.naivevue < backup_20260905.sql
# 从压缩文件恢复
gunzip < backup_20260905.sql.gz | mysql -h 127.0.0.1 -u root -p djangoadmin.django.elevue
gunzip < backup_20260905.sql.gz | mysql -h 127.0.0.1 -u root -p djangoadmin.django.naivevue
```
### Redis 恢复
@@ -167,7 +167,7 @@ stages:
### pytest 配置
```ini
```bash
# pytest.ini
[pytest]
DJANGO_SETTINGS_MODULE = application.settings
@@ -7,7 +7,6 @@
:::tip 迁移工具链
- **结构迁移**:Django 内置迁移系统(`makemigrations` + `migrate`)
- **字段注释**:Django 4.1+ 通过 `db_comment` 参数自动添加数据库字段注释
- **自定义命令**:`python manage.py add_full_comments` 回填数据库字段注释
:::
## 全新安装初始化
@@ -24,7 +23,7 @@ python manage.py migrate
```
:::tip 初始化流程
1. 确保数据库已创建:`CREATE DATABASE djangoadmin.django.elevue DEFAULT CHARACTER SET utf8mb4;`
1. 确保数据库已创建:`CREATE DATABASE djangoadmin.django.naivevue DEFAULT CHARACTER SET utf8mb4;`
2. 确保 `.env` 中的数据库配置正确
3. 执行 `python manage.py migrate` 自动创建所有表
:::
@@ -99,7 +98,7 @@ python manage.py migrate --fake example
## 字段注释管理
Django 4.1+ 支持通过 `db_comment` 参数为数据库字段添加注释。项目中的模型已自动生成 `db_comment`:
Django 4.1+ 支持通过 `db_comment` 参数为数据库字段添加注释。项目中的模型已自动生成 `db_comment`,在执行 `migrate` 时会自动同步到数据库:
```python
class Example(BaseModel):
@@ -110,16 +109,6 @@ class Example(BaseModel):
)
```
### 回填字段注释
对于已有数据库,可使用自定义命令回填字段注释:
```bash
python manage.py add_full_comments
```
该命令会遍历所有模型,为缺少注释的字段补充 `db_comment`。
## 迁移文件结构
每个应用的迁移文件位于 `application/{app_name}/migrations/` 目录:
@@ -150,7 +139,6 @@ application/example/
| 回滚指定应用 | `python manage.py migrate <app> zero` |
| 查看迁移状态 | `python manage.py showmigrations` |
| 查看迁移 SQL | `python manage.py sqlmigrate <app> <migration>` |
| 回填字段注释 | `python manage.py add_full_comments` |
## 常见问题与排错
@@ -29,7 +29,7 @@
**数据库**:
- [ ] 安装 MySQL 8.0+
- [ ] 创建数据库:`CREATE DATABASE djangoadmin.django.elevue DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`
- [ ] 创建数据库:`CREATE DATABASE djangoadmin.django.naivevue DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`
- [ ] 创建数据库用户并授权
- [ ] 修改 `.env` 中的数据库配置(DATABASE_ENGINE、DATABASE_NAME、DATABASE_HOST、DATABASE_PORT、DATABASE_USER、DATABASE_PASSWORD)
- [ ] 初始化数据库:`python manage.py migrate`
@@ -144,7 +144,7 @@ server {
### 数据库迁移
- [ ] 备份数据库:`mysqldump -uroot -p djangoadmin.django.elevue > backup.sql`
- [ ] 备份数据库:`mysqldump -uroot -p djangoadmin.django.naivevue > backup.sql`
- [ ] 执行迁移:`python manage.py makemigrations && python manage.py migrate`
- [ ] 验证迁移结果
@@ -204,7 +204,7 @@ cp -r /opt/backup/dist /opt/project/ui/dist
```bash
# 从备份恢复
mysql -uroot -p djangoadmin.django.elevue < backup.sql
mysql -uroot -p djangoadmin.django.naivevue < backup.sql
```
## 总结
@@ -151,7 +151,7 @@ services:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: djangoadmin.django.elevue
MYSQL_DATABASE: djangoadmin.django.naivevue
volumes:
- mysql_data:/var/lib/mysql
ports:
@@ -49,7 +49,7 @@ REDIS_PASSWORD=123456
REDIS_DB=0
# 文件配置
DJANGO_FILE_URL=http://file.django.elevue
DJANGO_FILE_URL=http://file.django.naivevue
```
### Prod 环境
@@ -91,7 +91,7 @@ DJANGO_FILE_URL=https://files.example.com
```python
# config/env.py 中的配置读取方式
DATABASE_ENGINE = os.getenv('DATABASE_ENGINE', "django.db.backends.mysql")
DATABASE_NAME = os.getenv('DATABASE_NAME', 'djangoadmin.django.elevue')
DATABASE_NAME = os.getenv('DATABASE_NAME', 'djangoadmin.django.naivevue')
DATABASE_HOST = os.getenv('DATABASE_HOST', "127.0.0.1")
```
@@ -105,12 +105,12 @@ Docker 部署时,`docker-compose.yml` 通过 `env_file: .env` 注入环境变
| 变量名 | 说明 | 默认值 |
|:----|:----|:----|
| `DJANGO_NAME` | 应用名称(显示在浏览器标题) | Django+EleVue旗舰版 |
| `DJANGO_NAME` | 应用名称(显示在浏览器标题) | Django+NaiveUI旗舰版 |
| `DJANGO_VERSION` | 应用版本号 | v3.0.0 |
| `DJANGO_DEBUG` | 调试模式开关 | True |
| `DJANGO_DEMO` | 演示模式(限制写操作) | True |
| `DATABASE_ENGINE` | 数据库引擎 | django.db.backends.mysql |
| `DATABASE_NAME` | 数据库名称 | djangoadmin.django.elevue |
| `DATABASE_NAME` | 数据库名称 | djangoadmin.django.naivevue |
| `DATABASE_HOST` | 数据库主机 | 127.0.0.1 |
| `DATABASE_PORT` | 数据库端口 | 3306 |
| `DATABASE_USER` | 数据库用户名 | root |
@@ -120,7 +120,7 @@ Docker 部署时,`docker-compose.yml` 通过 `env_file: .env` 注入环境变
| `REDIS_PORT` | Redis 端口 | 6379 |
| `REDIS_PASSWORD` | Redis 密码 | 123456 |
| `REDIS_DB` | Redis 数据库索引 | 0 |
| `DJANGO_FILE_URL` | 文件访问域名 | http://file.django.elevue |
| `DJANGO_FILE_URL` | 文件访问域名 | http://file.django.naivevue |
| `DJANGO_UPLOAD_DIR` | 文件上传目录 | /public/uploads |
| `IP_LOCATION_SOURCE` | IP 地理位置来源 | api |
| `SITE_DOMAIN` | 站点域名 | http://127.0.0.1:8000 |
@@ -41,7 +41,7 @@ server {
gzip_vary on;
# 前端静态资源
root /data/apps/DjangoAdmin_Django_EleVue/ui/dist;
root /data/apps/DjangoAdmin_Django_NaiveVue/ui/dist;
index index.html;
location / {
@@ -70,14 +70,14 @@ server {
# Django 静态文件
location /static/ {
alias /data/apps/DjangoAdmin_Django_EleVue/public/static/;
alias /data/apps/DjangoAdmin_Django_NaiveVue/public/static/;
expires 30d;
access_log off;
}
# 上传文件访问
location /uploads/ {
alias /data/apps/DjangoAdmin_Django_EleVue/public/uploads/;
alias /data/apps/DjangoAdmin_Django_NaiveVue/public/uploads/;
expires 7d;
access_log off;
limit_except GET { deny all; }
@@ -105,8 +105,8 @@ server {
cd ui && pnpm build
# 2. 拷贝构建产物
mkdir -p /data/apps/DjangoAdmin_Django_EleVue/ui/dist
cp -r ui/dist /data/apps/DjangoAdmin_Django_EleVue/ui/
mkdir -p /data/apps/DjangoAdmin_Django_NaiveVue/ui/dist
cp -r ui/dist /data/apps/DjangoAdmin_Django_NaiveVue/ui/
# 3. 收集 Django 静态文件
python manage.py collectstatic
@@ -239,7 +239,7 @@ class MasterSlaveRouter:
## Supervisor 多实例配置
```ini
```bash
; /etc/supervisor/conf.d/djangoadmin.conf
[program:djangoadmin-1]
command=/opt/venv/bin/gunicorn application.wsgi:application -c gunicorn.conf.py -b 127.0.0.1:8001
@@ -12,7 +12,7 @@ Supervisor 是一个 Python 编写的进程管理工具,用于在 Linux 服务
## 配置文件示例
```ini
```bash
; Supervisor 进程管理配置
; 将 command / directory 替换为实际路径后复制到 /etc/supervisor/conf.d/
@@ -20,7 +20,7 @@ Supervisor 是一个 Python 编写的进程管理工具,用于在 Linux 服务
; 启动命令:使用 gunicorn 运行 Django WSGI 应用
command=/path/to/venv/bin/gunicorn application.wsgi:application --bind 127.0.0.1:8000 --workers 4 --timeout 120
; 项目根目录
directory=/data/apps/DjangoAdmin_Django_EleVue
directory=/data/apps/DjangoAdmin_Django_NaiveVue
; 自动启动
autostart=true
; 异常退出后自动重启
@@ -134,7 +134,7 @@ gunicorn application.wsgi:application \
Supervisor 内置日志轮转功能,通过以下配置控制:
```ini
```bash
; 单个日志文件最大 50MB
stdout_logfile_maxbytes=50MB
; 保留 10 个历史日志文件
@@ -153,16 +153,16 @@ stdout_logfile_backups=10
如需同时管理多个进程(如应用 + Celery Worker):
```ini
```bash
[program:djangoadmin]
command=/path/to/venv/bin/gunicorn application.wsgi:application --bind 127.0.0.1:8000 --workers 4
directory=/data/apps/DjangoAdmin_Django_EleVue
directory=/data/apps/DjangoAdmin_Django_NaiveVue
autostart=true
autorestart=true
[program:djangoadmin-celery]
command=/path/to/venv/bin/celery -A application worker -l info
directory=/data/apps/DjangoAdmin_Django_EleVue
directory=/data/apps/DjangoAdmin_Django_NaiveVue
autostart=true
autorestart=true
numprocs=2
@@ -170,8 +170,8 @@ pip show Pillow
```bash
# 1. 检查上传目录权限
ls -la /data/apps/DjangoAdmin_Django_EleVue/public/uploads/
chmod 755 /data/apps/DjangoAdmin_Django_EleVue/public/uploads/
ls -la /data/apps/DjangoAdmin_Django_NaiveVue/public/uploads/
chmod 755 /data/apps/DjangoAdmin_Django_NaiveVue/public/uploads/
# 2. 检查磁盘空间
df -h
@@ -18,15 +18,15 @@
```bash
# 1. 数据库全量备份
mysqldump -h 127.0.0.1 -u root -p --single-transaction \
djangoadmin.django.elevue | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
djangoadmin.django.naivevue | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
# 2. 上传文件备份
tar -czf uploads_$(date +%Y%m%d).tar.gz /data/apps/DjangoAdmin_Django_EleVue/public/uploads/
tar -czf uploads_$(date +%Y%m%d).tar.gz /data/apps/DjangoAdmin_Django_NaiveVue/public/uploads/
# 3. 应用目录备份(含 .env 和配置)
tar -czf app_$(date +%Y%m%d).tar.gz \
--exclude='uploads' --exclude='__pycache__' --exclude='.git' \
/data/apps/DjangoAdmin_Django_EleVue/
/data/apps/DjangoAdmin_Django_NaiveVue/
```
### 查看变更日志
@@ -54,7 +54,7 @@ git diff --stat HEAD~10
### 步骤一:拉取代码
```bash
cd /data/apps/DjangoAdmin_Django_EleVue
cd /data/apps/DjangoAdmin_Django_NaiveVue
# 拉取最新代码
git fetch origin
@@ -174,7 +174,7 @@ cd /data/apps/
tar -xzf app_20260905.tar.gz
# 3. 恢复数据库
gunzip < backup_20260905.sql.gz | mysql -u root -p djangoadmin.django.elevue
gunzip < backup_20260905.sql.gz | mysql -u root -p djangoadmin.django.naivevue
# 4. 恢复上传文件
tar -xzf uploads_20260905.tar.gz -C /