签入版本

This commit is contained in:
2026-10-10 19:17:02 +08:00
parent 3423dea03f
commit 32f941b631
232 changed files with 4264 additions and 6251 deletions
@@ -270,7 +270,7 @@ crontab -l
# /mo 1 → 每 1 分钟执行一次
# /f → 强制覆盖同名任务
# =============================================================================
schtasks /create /tn "RXThinkCMF_Job" /tr "cmd /c cd /d D:\xampp\htdocs\v3\thinkphp6 && C:\xampp\php\php.exe think job:run" /sc minute /mo 1 /f
schtasks /create /tn "RXThinkCMF_Job" /tr "cmd /c cd /d D:\xampp8.2\htdocs\RXThinkCMF_ThinkPhp6_NaiveVue && C:\xampp\php\php.exe think job:run" /sc minute /mo 1 /f
# 或通过图形界面:Win+R → 输入 taskschd.msc → 回车
```
@@ -320,10 +320,10 @@ sudo systemctl start mysql
# 创建生产数据库
# CHARACTER SET utf8mb4 → 支持 emoji 等四字节字符
# COLLATE utf8mb4_general_ci → 不区分大小写的排序规则
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp6.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp8.naivevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
# 导入初始化数据(项目自带的 SQL 文件)
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue < document/mysql/rxthinkcmf.thinkphp8.naivevue.sql
```
### PostgreSQL
@@ -339,7 +339,7 @@ sudo apt install php8.2-pgsql
sudo systemctl restart php8.2-fpm
# 创建数据库(-u postgres 以 postgres 用户执行)
sudo -u postgres createdb rxthinkcmf.thinkphp6.elevue
sudo -u postgres createdb rxthinkcmf.thinkphp8.naivevue
```
### SQLite
@@ -16,25 +16,25 @@
# -proot → 数据库密码(生产环境建议用 -p 后不跟密码,交互式输入)
# rxthinkcmf... → 要备份的数据库名
# > backup_*.sql → 输出到文件,$(date +%Y%m%d) 自动生成日期后缀
mysqldump -u root -proot rxthinkcmf.thinkphp6.elevue > backup_$(date +%Y%m%d).sql
mysqldump -u root -proot rxthinkcmf.thinkphp8.naivevue > backup_$(date +%Y%m%d).sql
# -----------------------------------------------------------------------------
# 压缩备份(推荐 — 可节省 70%+ 磁盘空间)
# -----------------------------------------------------------------------------
# | gzip → 将 mysqldump 输出通过管道传给 gzip 压缩
mysqldump -u root -proot rxthinkcmf.thinkphp6.elevue | gzip > backup_$(date +%Y%m%d).sql.gz
mysqldump -u root -proot rxthinkcmf.thinkphp8.naivevue | gzip > backup_$(date +%Y%m%d).sql.gz
# -----------------------------------------------------------------------------
# 仅备份表结构(不含数据 — 用于对比表结构变更)
# -----------------------------------------------------------------------------
# --no-data → 只导出 CREATE TABLE 语句,不导出数据
mysqldump -u root -proot --no-data rxthinkcmf.thinkphp6.elevue > schema_$(date +%Y%m%d).sql
mysqldump -u root -proot --no-data rxthinkcmf.thinkphp8.naivevue > schema_$(date +%Y%m%d).sql
# -----------------------------------------------------------------------------
# 仅备份数据(不含表结构 — 用于数据迁移)
# -----------------------------------------------------------------------------
# --no-create-info → 只导出 INSERT 语句,不导出 CREATE TABLE
mysqldump -u root -proot --no-create-info rxthinkcmf.thinkphp6.elevue > data_$(date +%Y%m%d).sql
mysqldump -u root -proot --no-create-info rxthinkcmf.thinkphp8.naivevue > data_$(date +%Y%m%d).sql
```
### 自动备份脚本
@@ -52,7 +52,7 @@ mysqldump -u root -proot --no-create-info rxthinkcmf.thinkphp6.elevue > data_$(d
# 配置参数(按实际环境修改)
# -----------------------------------------------------------------------------
BACKUP_DIR="/backup/mysql" # 备份文件存放目录
DB_NAME="rxthinkcmf.thinkphp6.elevue" # 要备份的数据库名
DB_NAME="rxthinkcmf.thinkphp8.naivevue" # 要备份的数据库名
DB_USER="root" # 数据库用户名
DB_PASS="root" # 数据库密码
DATE=$(date +%Y%m%d_%H%M%S) # 当前时间戳(年月日_时分秒)
@@ -141,22 +141,22 @@ find $BACKUP_DIR -name "uploads_*.tar.gz" -mtime +30 -delete # 清理 30 天
# 从 SQL 文件恢复(全量覆盖)
# -----------------------------------------------------------------------------
# < backup_*.sql → 将文件内容作为 mysql 命令的输入
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < backup_20260920.sql
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue < backup_20260920.sql
# -----------------------------------------------------------------------------
# 从压缩文件恢复(gunzip 解压后传给 mysql)
# -----------------------------------------------------------------------------
# gunzip < file.sql.gz → 解压并输出到标准输出
# | mysql → 通过管道传给 mysql 命令执行
gunzip < backup_20260920.sql.gz | mysql -u root -proot rxthinkcmf.thinkphp6.elevue
gunzip < backup_20260920.sql.gz | mysql -u root -proot rxthinkcmf.thinkphp8.naivevue
# -----------------------------------------------------------------------------
# 恢复到新数据库(安全起见 — 先验证再切换)
# -----------------------------------------------------------------------------
# 1. 创建临时验证数据库
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp6.elevue_restore`;"
mysql -u root -proot -e "CREATE DATABASE `rxthinkcmf.thinkphp8.naivevue_restore`;"
# 2. 恢复备份到临时库
mysql -u root -proot rxthinkcmf.thinkphp6.elevue_restore < backup_20260920.sql
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue_restore < backup_20260920.sql
# 3. 验证数据无误后,重命名数据库(需停机操作)
```
@@ -196,7 +196,7 @@ tar -xzf /backup/uploads_20260920.tar.gz -C / www/uploads/article/
# =============================================================================
BACKUP_FILE=$1 # 第一个参数:备份文件路径
VERIFY_DB="rxthinkcmf.thinkphp6.elevue_verify" # 临时验证数据库名
VERIFY_DB="rxthinkcmf.thinkphp8.naivevue_verify" # 临时验证数据库名
# -----------------------------------------------------------------------------
# 创建验证数据库(先删除旧的,再创建新的)
@@ -27,9 +27,9 @@
**数据库**:
- [ ] 安装 MySQL 8.0+(或 PostgreSQL / SQL Server / Oracle / SQLite)
- [ ] 创建数据库:`CREATE DATABASE \`rxthinkcmf.thinkphp6.elevue\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`
- [ ] 创建数据库:`CREATE DATABASE \`rxthinkcmf.thinkphp8.naivevue\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`
- [ ] 创建数据库用户并授权
- [ ] 导入 SQL 脚本:`mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql`
- [ ] 导入 SQL 脚本:`mysql -u root -proot rxthinkcmf.thinkphp8.naivevue < document/mysql/rxthinkcmf.thinkphp8.naivevue.sql`
**Redis(可选)**:
@@ -146,7 +146,7 @@ server {
cp -r /www/api /www/api_backup_$(date +%Y%m%d)
# 备份数据库(mysqldump 导出 SQL,$(date +%Y%m%d) 自动生成日期后缀)
mysqldump -u root -proot rxthinkcmf.thinkphp6.elevue > /backup/db_$(date +%Y%m%d).sql
mysqldump -u root -proot rxthinkcmf.thinkphp8.naivevue > /backup/db_$(date +%Y%m%d).sql
# -----------------------------------------------------------------------------
# 第 2 步:更新代码
@@ -157,7 +157,7 @@ composer install --no-dev --optimize-autoloader # 安装依赖(排除开
# -----------------------------------------------------------------------------
# 第 3 步:更新数据库(如有迁移脚本)
# -----------------------------------------------------------------------------
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/migration.sql
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue < document/mysql/migration.sql
# -----------------------------------------------------------------------------
# 第 4 步:清除缓存
@@ -199,7 +199,7 @@ sudo nginx -s reload
cp -r /www/api_backup_20260920/* /www/api/
# 恢复数据库
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < /backup/db_20260920.sql
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue < /backup/db_20260920.sql
# 重启 PHP-FPM(清除 OPcache,加载旧代码)
sudo systemctl restart php8.2-fpm
@@ -8,11 +8,11 @@
```text
document/
├── mysql/rxthinkcmf.thinkphp6.elevue.sql # MySQL 版本(约 78 万行)
├── postgresql/rxthinkcmf.thinkphp6.elevue.sql # PostgreSQL 版本
├── sqlserver/rxthinkcmf.thinkphp6.elevue.sql # SQL Server 版本
├── oracle/rxthinkcmf.thinkphp6.elevue.sql # Oracle 版本
└── sqlite/rxthinkcmf.thinkphp6.elevue.sql # SQLite 版本
├── mysql/rxthinkcmf.thinkphp8.naivevue.sql # MySQL 版本(约 78 万行)
├── postgresql/rxthinkcmf.thinkphp8.naivevue.sql # PostgreSQL 版本
├── sqlserver/rxthinkcmf.thinkphp8.naivevue.sql # SQL Server 版本
├── oracle/rxthinkcmf.thinkphp8.naivevue.sql # Oracle 版本
└── sqlite/rxthinkcmf.thinkphp8.naivevue.sql # SQLite 版本
```
各数据库脚本已针对对应的 SQL 语法做了适配,可直接导入。
@@ -28,7 +28,7 @@ document/
# -u root -proot → 用户名和密码
# rxthinkcmf... → 目标数据库名
# < file.sql → 将 SQL 文件作为输入执行
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue < document/mysql/rxthinkcmf.thinkphp8.naivevue.sql
```
### PostgreSQL
@@ -40,7 +40,7 @@ mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thi
# -U postgres → 连接用户
# -d ... → 目标数据库
# -f file.sql → 执行 SQL 文件
psql -U postgres -d rxthinkcmf.thinkphp6.elevue -f document/postgresql/rxthinkcmf.thinkphp6.elevue.sql
psql -U postgres -d rxthinkcmf.thinkphp8.naivevue -f document/postgresql/rxthinkcmf.thinkphp8.naivevue.sql
```
### SQL Server
@@ -54,7 +54,7 @@ psql -U postgres -d rxthinkcmf.thinkphp6.elevue -f document/postgresql/rxthinkcm
# -P root → 密码
# -d ... → 目标数据库
# -i file.sql → 执行 SQL 文件
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp6.elevue -i document/sqlserver/rxthinkcmf.thinkphp6.elevue.sql
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp8.naivevue -i document/sqlserver/rxthinkcmf.thinkphp8.naivevue.sql
```
### Oracle
@@ -65,7 +65,7 @@ sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp6.elevue -i document/sql
# -----------------------------------------------------------------------------
# root/root@localhost:1521/XE → 用户/密码@主机:端口/服务名
# @file.sql → 执行 SQL 文件
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.thinkphp6.elevue.sql
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.thinkphp8.naivevue.sql
```
### SQLite
@@ -76,7 +76,7 @@ sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.thinkphp6.elevue
# -----------------------------------------------------------------------------
# 数据库文件路径 → SQLite 数据库存储在单个文件中
# < file.sql → 将 SQL 文件作为输入执行
sqlite3 /www/api/runtime/database.sqlite < document/sqlite/rxthinkcmf.thinkphp6.elevue.sql
sqlite3 /www/api/runtime/database.sqlite < document/sqlite/rxthinkcmf.thinkphp8.naivevue.sql
```
## 注意事项
@@ -28,7 +28,6 @@
## 文件结构
```
thinkphp6/
├── docker/
│ ├── Dockerfile # PHP-FPM 应用镜像定义
│ ├── nginx.conf # Nginx 站点配置
@@ -323,7 +322,7 @@ services:
# root 用户密码(必须 8 位以上,包含大小写字母和数字)
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
# 启动时自动创建的数据库
MYSQL_DATABASE: ${MYSQL_DATABASE:-rxthinkcmf.thinkphp6.elevue}
MYSQL_DATABASE: ${MYSQL_DATABASE:-rxthinkcmf.thinkphp8.naivevue}
# 字符集(支持 emoji 等四字节字符)
MYSQL_CHARSET: utf8mb4
# 排序规则
@@ -332,7 +331,7 @@ services:
# 数据持久化(容器重建不丢数据)
- mysql_data:/var/lib/mysql
# 初始化 SQL(首次启动时自动执行,仅在数据卷为空时生效)
- ./document/mysql/rxthinkcmf.thinkphp6.elevue.sql:/docker-entrypoint-initdb.d/init.sql:ro
- ./document/mysql/rxthinkcmf.thinkphp8.naivevue.sql:/docker-entrypoint-initdb.d/init.sql:ro
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
@@ -389,7 +388,7 @@ networks:
```ini
# Docker 环境变量(密码等敏感信息,切勿提交 Git)
MYSQL_ROOT_PASSWORD=Your_Strong_Password_2024
MYSQL_DATABASE=rxthinkcmf.thinkphp6.elevue
MYSQL_DATABASE=rxthinkcmf.thinkphp8.naivevue
REDIS_PASSWORD=Your_Redis_Password_2024
APP_DEBUG=false
```
@@ -491,16 +490,16 @@ docker-compose exec app bash
docker-compose exec mysql bash
# 在容器内执行 SQL
docker-compose exec mysql mysql -uroot -pYour_Strong_Password_2024 rxthinkcmf.thinkphp6.elevue
docker-compose exec mysql mysql -uroot -pYour_Strong_Password_2024 rxthinkcmf.thinkphp8.naivevue
# --------------------------------------------------------------------------
# 数据库操作
# --------------------------------------------------------------------------
# 导入 SQL 文件
docker-compose exec -T mysql mysql -uroot -pYour_Strong_Password_2024 rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
docker-compose exec -T mysql mysql -uroot -pYour_Strong_Password_2024 rxthinkcmf.thinkphp8.naivevue < document/mysql/rxthinkcmf.thinkphp8.naivevue.sql
# 导出数据库备份
docker-compose exec mysql mysqldump -uroot -pYour_Strong_Password_2024 rxthinkcmf.thinkphp6.elevue > backup_$(date +%Y%m%d).sql
docker-compose exec mysql mysqldump -uroot -pYour_Strong_Password_2024 rxthinkcmf.thinkphp8.naivevue > backup_$(date +%Y%m%d).sql
# --------------------------------------------------------------------------
# ThinkPHP 命令
@@ -132,8 +132,8 @@ ALTER USER 'root'@'localhost' IDENTIFIED BY 'strong_password_here';
CREATE USER 'rxthinkcmf_app'@'localhost' IDENTIFIED BY 'app_password';
-- 授权应用用户只能访问项目数据库(最小权限原则)
-- rxthinkcmf.thinkphp6.elevue.* → 该项目数据库的所有表
GRANT ALL PRIVILEGES ON `rxthinkcmf.thinkphp6.elevue`.* TO 'rxthinkcmf_app'@'localhost';
-- rxthinkcmf.thinkphp8.naivevue.* → 该项目数据库的所有表
GRANT ALL PRIVILEGES ON `rxthinkcmf.thinkphp8.naivevue`.* TO 'rxthinkcmf_app'@'localhost';
FLUSH PRIVILEGES; -- 刷新权限使配置生效
-- 禁止远程 root 登录(只允许本地连接)
@@ -97,7 +97,7 @@ mysql -u root -p -e "SELECT user, host FROM mysql.user;"
# ON `数据库`.* → 指定数据库的所有表
# TO 'root'@'%' → 允许从任意主机连接的 root 用户
# IDENTIFIED BY → 设置密码
mysql -u root -proot -e "GRANT ALL ON \`rxthinkcmf.thinkphp6.elevue\`.* TO 'root'@'%' IDENTIFIED BY 'root';"
mysql -u root -proot -e "GRANT ALL ON \`rxthinkcmf.thinkphp8.naivevue\`.* TO 'root'@'%' IDENTIFIED BY 'root';"
mysql -u root -p -e "FLUSH PRIVILEGES;" # 刷新权限使配置生效
```
@@ -112,7 +112,7 @@ sudo systemctl status postgresql
# -----------------------------------------------------------------------------
# 测试连接(-U 指定用户,-d 指定数据库,-c 执行 SQL)
# -----------------------------------------------------------------------------
psql -U postgres -d rxthinkcmf.thinkphp6.elevue -c "SELECT 1;"
psql -U postgres -d rxthinkcmf.thinkphp8.naivevue -c "SELECT 1;"
# -----------------------------------------------------------------------------
# 检查客户端认证配置(pg_hba.conf 控制哪些 IP 可以连接)
@@ -169,14 +169,14 @@ php -m | grep pdo_sqlsrv # 查找 pdo_sqlsrv 扩展
# -----------------------------------------------------------------------------
# MySQL:通过 mysql 命令导入 SQL 文件
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue < document/mysql/rxthinkcmf.thinkphp8.naivevue.sql
# PostgreSQL:通过 psql 命令导入 SQL 文件
# -U 指定用户,-d 指定数据库,-f 指定 SQL 文件
psql -U postgres -d rxthinkcmf.thinkphp6.elevue -f document/postgresql/rxthinkcmf.thinkphp6.elevue.sql
psql -U postgres -d rxthinkcmf.thinkphp8.naivevue -f document/postgresql/rxthinkcmf.thinkphp8.naivevue.sql
# SQLite:通过 sqlite3 命令导入 SQL 文件
sqlite3 /www/api/runtime/database.sqlite < document/sqlite/rxthinkcmf.thinkphp6.elevue.sql
sqlite3 /www/api/runtime/database.sqlite < document/sqlite/rxthinkcmf.thinkphp8.naivevue.sql
```
## PHP 问题
@@ -268,13 +268,13 @@ grep JWT.SECRET .env
# 检查用户角色分配(用户是否分配了角色)
# -----------------------------------------------------------------------------
# think_user_role 表存储用户与角色的关联关系
mysql -u root -proot rxthinkcmf.thinkphp6.elevue -e "SELECT * FROM think_user_role WHERE user_id=1;"
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue -e "SELECT * FROM think_user_role WHERE user_id=1;"
# -----------------------------------------------------------------------------
# 检查角色权限(角色是否分配了菜单权限)
# -----------------------------------------------------------------------------
# think_role_menu 表存储角色与菜单的关联关系
mysql -u root -proot rxthinkcmf.thinkphp6.elevue -e "SELECT * FROM think_role_menu WHERE role_id=1;"
mysql -u root -proot rxthinkcmf.thinkphp8.naivevue -e "SELECT * FROM think_role_menu WHERE role_id=1;"
```
### 文件上传失败