签入版本
This commit is contained in:
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user