Linux中ThinkPHP如何迁移
小樊
35
2026-01-03 00:23:45
Linux下迁移ThinkPHP项目的实操指南
一 环境准备与核对
- 核对目标服务器的运行环境:安装并启动 Web 服务器(Apache/Nginx)、PHP(与项目所需版本一致)、数据库(如 MySQL),并确保 PHP 扩展(如 PDO/MySQL、mbstring、openssl 等)已启用。
- 安装 Composer 用于安装依赖;准备数据库账户与库,确保网络与权限可达。
- 规划目录与权限:确认网站根目录(如 /var/www/html 或 /usr/share/nginx/html),后续涉及写入的目录需保证 Web 服务运行用户可写。
- 建议先在测试环境演练,再切换生产。上述准备可显著降低迁移风险。
二 迁移步骤
- 打包与传输:在本地将项目打包(如 zip/tar.gz),使用 SCP/FTP/Winscp 上传至服务器,解压到目标目录。
- 安装依赖:在项目根目录执行 composer install --optimize-autoloader --no-dev,生产环境不安装 dev 依赖。
- 配置调整:
- 数据库连接:编辑 config/database.php(或 .env)中的 host、database、username、password、port 等。
- 运行模式:将 app_debug 设为 false,开启日志以便排错。
- 目录权限:确保 runtime(及子目录 cache、log、temp)对 Web 服务用户可写,例如:
- chown -R www-data:www-data /var/www/your-app/runtime
- find /var/www/your-app/runtime -type d -exec chmod 755 {} ;
- find /var/www/your-app/runtime -type f -exec chmod 644 {} ;
- Web 服务配置:
- Apache:将 DocumentRoot 指向项目的 public 目录,启用 mod_rewrite,必要时配置 .htaccess。
- Nginx:将 root 指向 public,配置 try_files $uri $uri/ /index.php?$query_string; 并开启 rewrite。
- 初始化数据:如有迁移文件,执行 php think migrate:run;如需填充数据,执行 php think seed:run。
- 访问验证:通过域名或 IP:端口 访问,检查首页、登录、接口与日志输出。
三 常见问题与处理
- 大小写敏感导致类/模板找不到:Linux 文件系统区分大小写,类名、文件名、命名空间、路由与模板引用必须与实际大小写完全一致(如模型、控制器、视图文件)。
- 写入权限错误:框架运行需写入 runtime/cache、runtime/log、runtime/temp 等目录,若报 Permission denied,按上文权限设置修正。
- URL 重写失败:
- Apache:确认启用 mod_rewrite,并在项目根目录放置正确的 .htaccess;必要时设置 RewriteBase。
- Nginx:确保 try_files 规则正确,且 PATH_INFO 支持开启。
- 依赖缺失或版本不匹配:执行 composer install 前确认 PHP 版本与扩展满足要求;必要时在 composer.json 中固定版本。
- 路径或配置错误:核对 public/index.php 入口、应用路径常量、数据库配置与缓存配置。
四 数据库迁移与零停机方案
- 标准迁移流程:
- 全量备份源库与目标库;在目标库导入结构与数据(或按版本执行迁移脚本)。
- 校验数据一致性与业务功能;切换域名/DNS 或负载均衡指向新服务器。
- 零停机思路(适用于不能中断服务):
- 设置 MySQL 主从复制,新库作为从库追平数据后短暂切换为主,原主库降级为新从库,完成平滑切换。
- 迁移窗口内保持两端数据一致性,切换瞬间影响可控。
- 上线清单:备份策略、回滚预案、监控告警、灰度/蓝绿发布、变更记录与回放测试。