Skip to content

11.1 部署 Checklist ​

本章概要

从服务器准备到应用上线的完整部署操作清单,适用于生产环境首次部署和后续版本更新。

首次部署 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.thinkphp6.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`
  • [ ] 创建数据库用户并授权
  • [ ] 导入 SQL 脚本:mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.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.thinkphp6.elevue > /backup/db_$(date +%Y%m%d).sql

# -----------------------------------------------------------------------------
# 第 2 步:更新代码
# -----------------------------------------------------------------------------
cd /www/api                                         # 进入项目目录
composer install --no-dev --optimize-autoloader     # 安装依赖(排除开发依赖,优化自动加载)

# -----------------------------------------------------------------------------
# 第 3 步:更新数据库(如有迁移脚本)
# -----------------------------------------------------------------------------
mysql -u root -proot rxthinkcmf.thinkphp6.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.thinkphp6.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

小蚂蚁云团队 · 提供技术支持