ThinkPHP跨服务器部署如何迁移 操作步骤说明

作者:袖梨 2026-07-21
ThinkPHP跨服务器迁移核心是环境一致性、入口路径正确、runtime目录可写、配置安全生效;需用mysqldump --no-definer --skip-triggers导出数据库并grep检查DEFINER,PHP须版本及扩展(openssl、mbstring等)严格对齐且mbstring.func_overload=0,Web服务器root必须指向public目录、伪静态规则适配、.env权限设为644并禁止Web访问,迁移后必须清空runtime目录。

ThinkPHP跨服务器迁移不是简单复制代码,核心是环境一致性、入口路径正确、运行时目录可写、配置安全生效。跳过任一环节,轻则白屏404,重则数据库连不上或缓存全错。

数据库导出要干净,避免DEFINER和触发器干扰

直接mysqldump可能带CREATE DEFINER语句,新服务器若无对应用户,导入会静默失败或跳过表。

  • 用命令导出:mysqldump --no-definer --skip-triggers --single-transaction -u root -p your_db > backup.sql
  • 导出后立刻检查:grep DEFINER backup.sql,结果应为空
  • 如项目用了视图或存储过程,才加--routines;多数情况不加,否则易因权限报错

PHP环境必须严格对齐

ThinkPHP对openssl、mbstring等扩展敏感,版本或配置偏差会导致验证码异常、Redis加密失败、JSON解析乱码。

  • 旧服务器执行:php -vphp -m | grep -E '^(openssl|mbstring|pdo|pdo_mysql|curl)$',记下精确版本和启用状态
  • 新服务器安装对应PHP版本(如8.2),并确认mbstring.func_overload = 0(查php -i | grep func_overload
  • 同时验证CLI与PHP-FPM版本一致:ps aux | grep php-fpm 找到进程路径,再用该路径执行-v

Web服务器配置关键三件事

Nginx或Apache配置稍有偏差,就会出现“首页能打开,路由全404”这种半通状态,极难排查。

立即学习“PHP免费学习笔记(深入)”;

  • root必须指向public目录:Nginx设root /var/www/myapp/public;,Apache DocumentRoot同理
  • 伪静态规则不能混用:Nginx用try_files $uri $uri/ /index.php?$query_string;;.htaccess对Nginx无效
  • .env权限与访问控制:上传后立刻chmod 644 .env,并在Nginx配置中加location ~ /.env { deny all; }

runtime目录必须清空并确保可写

迁移后不清理runtime,缓存里仍存老数据库地址、旧时区设置,导致连接失败或日志时间错乱。

  • 上传完代码、导入数据库、配好.env后,执行:rm -rf runtime/
  • 确保Web进程用户(如www-data)和CLI用户(如deploy)都能写入:chown -R www-data:www-data runtime/
  • 如果用Docker,runtime需单独挂载且UID对齐,避免容器内www-data无法写宿主机目录

相关文章

精彩推荐