签入版本

This commit is contained in:
小蚂蚁云
2026-10-20 21:19:44 +08:00
commit 7e70ed6942
2943 changed files with 498573 additions and 0 deletions
@@ -0,0 +1,214 @@
# 11.1 部署 Checklist
:::tip 本章概要
从服务器准备到应用上线的完整部署操作清单,适用于生产环境首次部署和后续版本更新。
:::
## 首次部署 Checklist
### 第 1 阶段:服务器准备
- [ ] 服务器操作系统:CentOS 7+ / Ubuntu 20.04+ / Debian 11+
- [ ] 防火墙开放端口:80(HTTP)、443(HTTPS)、22(SSH)
- [ ] 创建部署用户(非 root)
- [ ] 配置 SSH 密钥登录
- [ ] 配置时区:`timedatectl set-timezone Asia/Shanghai`
### 第 2 阶段:环境安装
**PHP 环境**:
- [ ] 安装 PHP 8.2+
- [ ] 安装必需扩展:`pdo_mysql`、`mbstring`、`json`、`openssl`、`fileinfo`、`gd`
- [ ] 安装可选扩展:`redis`(缓存驱动)
- [ ] 安装 Composer 2.x
- [ ] 配置 PHP-FPM(如使用 Nginx)
**数据库**:
- [ ] 安装 MySQL 8.0+(或 PostgreSQL / SQL Server / Oracle / SQLite)
- [ ] 创建数据库:`CREATE DATABASE \`rxthinkcmf.thinkphp8.elevue\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`
- [ ] 创建数据库用户并授权
- [ ] 导入 SQL 脚本:`mysql -u root -proot rxthinkcmf.thinkphp8.elevue < document/mysql/rxthinkcmf.thinkphp8.elevue.sql`
**Redis(可选)**:
- [ ] 安装 Redis 6.0+
- [ ] 配置密码
- [ ] 测试连接:`redis-cli ping`
**Node.js(前端构建)**:
- [ ] 安装 Node.js 22+
- [ ] 安装 pnpm:`npm install -g pnpm`
### 第 3 阶段:应用部署
**后端**:
- [ ] 上传项目代码到服务器
- [ ] 安装 Composer 依赖:`composer install --no-dev --optimize-autoloader`
- [ ] 配置 `.env` 文件(数据库、JWT 密钥、文件上传等)
- [ ] 生成 JWT 密钥:`php -r "echo bin2hex(random_bytes(32));"`
- [ ] 设置目录权限:`chmod -R 755 runtime/`、`chmod -R 755 public/uploads/`
- [ ] 测试启动:`php think run`
- [ ] 配置定时任务:`crontab -e` → `* * * * * cd /www/api && php think job:run`
**前端**:
- [ ] 安装前端依赖:`cd ui && pnpm install`
- [ ] 构建前端:`pnpm build`
- [ ] 上传构建产物(`ui/dist/` 目录)到服务器
### 第 4 阶段:Nginx 配置
```nginx
# =============================================================================
# 后端 API 站点配置
# =============================================================================
server {
listen 80; # 监听 80 端口
server_name api.example.com; # 绑定域名
root /www/api/public; # ThinkPHP 入口目录
index index.php; # 默认索引文件
# URL 重写(ThinkPHP 路由必需)
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last; # 非真实文件请求转发到 index.php
}
}
# PHP-FPM 转发
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # PHP-FPM 监听地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 安全:禁止上传目录执行 PHP
location ~ /uploads/.*\.php$ { deny all; }
}
# =============================================================================
# 前端 SPA 站点配置
# =============================================================================
server {
listen 80; # 监听 80 端口
server_name admin.example.com; # 绑定域名
root /www/admin/dist; # 前端构建产物目录
index index.html; # 默认索引文件
# Vue Router History 模式(所有非文件请求回退到 index.html)
location / {
try_files $uri $uri/ /index.html;
}
# API 反向代理到后端
location /api/ {
proxy_pass http://127.0.0.1:8000; # 后端服务地址
proxy_set_header Host $host; # 传递原始 Host
proxy_set_header X-Real-IP $remote_addr; # 传递客户端 IP
}
}
```
### 第 5 阶段:安全加固
- [ ] `.env` 中 `APP_DEBUG = false`
- [ ] `.env` 中 `SHOW_ERROR_MSG = false`
- [ ] `.env` 中 `JWT.SECRET` 已修改为强随机密钥
- [ ] `.env` 中 `CORS.ALLOW_ORIGIN` 已限制为实际域名
- [ ] 启用 HTTPS(SSL 证书)
- [ ] 上传目录禁止执行 PHP
- [ ] 数据库不允许外网访问
- [ ] Redis 已设置密码
### 第 6 阶段:验证
- [ ] 访问前端页面正常
- [ ] 登录功能正常(admin / root)
- [ ] 各模块 CRUD 功能正常
- [ ] 文件上传功能正常
- [ ] 定时任务正常执行
- [ ] 操作日志正常记录
## 版本更新 Checklist
### 更新后端
```bash
# -----------------------------------------------------------------------------
# 第 1 步:备份(更新前必须备份)
# -----------------------------------------------------------------------------
# 备份项目代码(cp -r 递归复制整个目录)
cp -r /www/api /www/api_backup_$(date +%Y%m%d)
# 备份数据库(mysqldump 导出 SQL,$(date +%Y%m%d) 自动生成日期后缀)
mysqldump -u root -proot rxthinkcmf.thinkphp8.elevue > /backup/db_$(date +%Y%m%d).sql
# -----------------------------------------------------------------------------
# 第 2 步:更新代码
# -----------------------------------------------------------------------------
cd /www/api # 进入项目目录
composer install --no-dev --optimize-autoloader # 安装依赖(排除开发依赖,优化自动加载)
# -----------------------------------------------------------------------------
# 第 3 步:更新数据库(如有迁移脚本)
# -----------------------------------------------------------------------------
mysql -u root -proot rxthinkcmf.thinkphp8.elevue < document/mysql/migration.sql
# -----------------------------------------------------------------------------
# 第 4 步:清除缓存
# -----------------------------------------------------------------------------
php think clear # 清除 ThinkPHP 运行时缓存(模板、路由、配置等)
# -----------------------------------------------------------------------------
# 第 5 步:重启 PHP-FPM(使 OPcache 失效,加载新代码)
# -----------------------------------------------------------------------------
sudo systemctl restart php8.2-fpm
```
### 更新前端
```bash
# -----------------------------------------------------------------------------
# 第 1 步:构建前端
# -----------------------------------------------------------------------------
cd ui && pnpm install && pnpm build # 安装依赖并执行生产构建
# -----------------------------------------------------------------------------
# 第 2 步:部署构建产物
# -----------------------------------------------------------------------------
cp -r dist/* /www/admin/dist/ # 将构建产物复制到 Nginx 站点目录
# -----------------------------------------------------------------------------
# 第 3 步:重载 Nginx(不断开现有连接)
# -----------------------------------------------------------------------------
sudo nginx -s reload
```
## 回滚方案
```bash
# -----------------------------------------------------------------------------
# 后端回滚(恢复代码 + 数据库)
# -----------------------------------------------------------------------------
# 恢复项目代码
cp -r /www/api_backup_20260920/* /www/api/
# 恢复数据库
mysql -u root -proot rxthinkcmf.thinkphp8.elevue < /backup/db_20260920.sql
# 重启 PHP-FPM(清除 OPcache,加载旧代码)
sudo systemctl restart php8.2-fpm
# -----------------------------------------------------------------------------
# 前端回滚(恢复构建产物)
# -----------------------------------------------------------------------------
cp -r /www/admin_backup_20260920/dist/* /www/admin/dist/
# 重载 Nginx(应用旧的前端文件)
sudo nginx -s reload
```