thinkphp在centos上的跨平台迁移
小樊
41
2025-12-31 03:21:23
跨平台迁移到 CentOS 的实操指南
一 迁移准备与版本核对
- 明确源环境与目标环境差异:操作系统、Web 服务(Nginx/Apache)、PHP 版本、数据库(MySQL/MariaDB)、文件编码与行尾(Windows CRLF 与 Linux LF)、绝对路径与 URL 重写规则。
- 核对 ThinkPHP 与 PHP 的版本要求:例如 ThinkPHP 8.1 需 PHP≥8.0,ThinkPHP 6.x 推荐 PHP≥7.4;在 CentOS 7 可通过 EPEL + Remi 启用对应 PHP 版本仓库。迁移前在两端用
php -v 与框架引导页确认版本一致性与扩展可用。若版本不符,先在目标机安装合适版本再迁移。
- 规划数据与附件迁移:导出全量数据库(建议
mysqldump --single-transaction --routines --triggers --hex-blob)、迁移上传目录(如 public/uploads、runtime 除外)、核对配置文件中的绝对路径与域名/端口。
- 准备回滚方案:保留旧环境一段时间、备份数据库与代码、记录迁移步骤与校验清单。
二 目标机环境搭建
- 安装 Web 与 PHP(以 Nginx + PHP-FPM 为例):
- 安装 EPEL 与 Remi 仓库,启用所需 PHP 版本仓库(如 remi-php80),安装 PHP 及常用扩展(如 php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip),启动并设置开机自启。
- 安装 Nginx,启动并设置开机自启。
- 安装数据库(以 MySQL 为例):安装服务器,执行
mysql_secure_installation 完成安全初始化,创建业务库与账号。
- 安装 Composer:用于安装/更新依赖。示例:
curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer。
- 版本要点:若部署 ThinkPHP 8.0,目标机需 PHP≥8.0;CentOS 7 可通过 Remi 启用 PHP 8.0 仓库后安装。
三 代码与数据迁移
- 代码传输与依赖安装:
- 将项目上传至目标目录(如 /var/www/html/your_project),或
git clone 到目标机;进入项目目录执行 composer install --no-dev --optimize-autoloader 安装生产依赖并优化自动加载。
- 目录与入口:
- 建议以框架的 public 作为 Web 根目录(Nginx
root 指向 .../public),避免将应用代码暴露在 Web 可直接访问路径。
- 数据库迁移:
- 编辑 .env 或
config/database.php,配置 DB_HOST/DB_NAME/DB_USER/DB_PASSWORD/DB_PORT;在 MySQL 中创建库与账号并授权,导入结构/数据(如有 SQL 文件:SOURCE /path/to/file.sql;)。
- 路由与重写:
- Nginx 使用
try_files $uri $uri/ /index.php?$query_string; 将所有非静态请求转发到入口;Apache 需启用 mod_rewrite 并允许 .htaccess 覆盖。
- 权限设置:
- 将项目属主设为 Web 服务运行用户(如 nginx:nginx 或 apache:apache),一般目录 755、可写目录(如 runtime)775,确保写入缓存/日志/会话正常。
四 兼容性与故障排查
- PHP 版本与扩展:用
php -v 与 php -m 核对版本与扩展;缺失扩展通过包管理器安装,然后重启 PHP-FPM 与 Web 服务。
- 路由与 PATH_INFO:若使用 Nginx,确保
try_files 与 SCRIPT_FILENAME 正确;若使用 Apache,启用 mod_rewrite 并保证 .htaccess 规则生效。
- 常见错误定位:
- 查看 ThinkPHP runtime/log 应用日志、Nginx error_log 与 PHP-FPM 日志(如
/var/log/php-fpm/),依据报错调整配置、权限或扩展。
- 不建议的长期方案:遇到平台限制时,避免长期使用
composer install --ignore-platform-reqs 忽略平台要求,应优先对齐 PHP 版本与扩展。
五 上线切换与安全收尾
- 切换与灰度:
- 先在内网/测试域名验证,再切换 DNS/CNAME 或负载均衡权重;保留旧环境回滚窗口。
- 关闭调试与信息泄露:
- 生产环境设置 APP_DEBUG=false;删除或限制访问 phpinfo.php;自定义错误页面,隐藏 ThinkPHP 版本与服务器细节,避免路径错误时暴露敏感信息。
- 安全与性能:
- 仅开放必要端口(如 80/443/22),禁用不必要模块与默认示例;为数据库与后台设置强口令与访问控制;启用 OPcache 等基础性能优化。