centos下php项目怎么迁移
小樊
41
2025-11-15 19:27:57
CentOS 下 PHP 项目迁移实操指南
一 迁移前准备与评估
完整备份:导出数据库(如 mysqldump )、打包代码与上传目录、保存原服务器上的 Nginx/Apache 与 PHP-FPM 配置、记录 php.ini 关键参数与已安装扩展(可用 php -m 查看)。
版本对齐:核对源/目标服务器的 PHP 主版本 与扩展一致性,必要时在目标机安装对应版本与扩展(如 php-mysqlnd、php-gd、php-curl 等)。
路径与域名变更梳理:明确新环境的 网站根目录 、域名/vhost 、数据库主机/端口 、缓存与日志路径等差异,提前在清单中标注替换项。
目标环境就绪:准备 CentOS 主机、网络与权限,规划 防火墙/SELinux 策略,确保后续服务可被访问与读写。
以上准备可显著降低迁移风险,尤其是版本与扩展不一致、配置路径差异与权限问题,是迁移失败的高发点。
二 迁移方案选型
同构直传(通用):在原机打包代码与数据库,传到新 CentOS 主机后解压、导入数据库、调整配置并启动服务;适合大多数传统项目。
版本控制 + 自动化部署(推荐):在目标机用 Git 拉取代码,配合 Composer 安装依赖,执行数据库迁移与缓存,必要时重启 Nginx/PHP-FPM ;适合团队协作与持续交付。
容器化迁移(可复用):将应用与依赖打包为 Docker 镜像 迁移运行,环境一致性最好,适合跨机房/跨云与内网复用场景。
离线/内网环境:无法在线同步时,可采用手动离线安装、虚拟机镜像导入或离线镜像/容器方式;适合严格隔离网络。
以上方案可按网络条件、团队流程与复用需求灵活选择。
三 标准迁移步骤(以 LNMP 为例)
安装与启动基础服务
安装组件:sudo yum install -y nginx mariadb-server php php-fpm php-mysqlnd
启动与开机自启:
sudo systemctl start nginx mariadb php-fpm
sudo systemctl enable nginx mariadb php-fpm
数据库安全初始化:sudo mysql_secure_installation
迁移代码与静态资源
方式一:SCP 上传压缩包并解压到站点目录(如 /var/www/your-project )
方式二:Git 克隆到站点目录(如 /var/www/your-project )
配置数据库
登录数据库:mysql -u root -p
创建库与用户并授权:
CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER ‘app_user’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
GRANT ALL PRIVILEGES ON your_db.* TO ‘app_user’@‘localhost’;
FLUSH PRIVILEGES;
导入数据:mysql -u app_user -p your_db < backup.sql
调整应用配置
更新数据库连接与域名等配置(如 .env 或 config.php ):DB_HOST、DB_NAME、DB_USER、DB_PASSWORD、APP_URL 等。
框架特殊处理(如 Laravel):
cp .env.example .env
php artisan key:generate
php artisan storage:link
配置 Nginx
新建配置:/etc/nginx/conf.d/yourproject.conf
示例:
server {
listen 80;
server_name your.domain local.test;
root /var/www/your-project/public;
index index.php index.html;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ .php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /.ht { deny all; }
}
校验并重载:sudo nginx -t && sudo systemctl reload nginx
权限与所有权
站点目录:sudo chown -R nginx:nginx /var/www/your-project
通用权限:chmod -R 755 /var/www/your-project;上传目录可设为 775
防火墙放行
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
验证与日志排查
访问首页与关键功能,查看 Nginx 错误日志 (/var/log/nginx/error.log)与 PHP-FPM 日志 (/var/log/php-fpm/…)定位问题。
以上步骤覆盖从环境准备、代码与数据库迁移、配置调整到上线验证的完整闭环。
四 常见问题与快速排查
PHP 版本/扩展不一致:执行 php -v / php -m 对比,安装缺失扩展(如 php-mysqlnd、php-gd ),必要时对齐 PHP 主版本 。
配置文件未生效:用 php --ini 确认 Loaded Configuration File ,将源 php.ini 关键项迁移到目标对应路径,并重启 httpd/php-fpm 。
Web 未解析 PHP(下载或源码暴露):确认 PHP-FPM 运行(systemctl status php-fpm),检查 Nginx fastcgi_pass 或 Apache PHP 模块 配置是否正确。
SELinux 与权限:sestatus 查看模式;若为 enforcing ,修正目录上下文(如 chcon -R -t httpd_exec_t /var/www/html/*.php)与所有权(chown -R apache:apache 或 nginx:nginx),并设置合理权限(755/775)。
数据库连接失败:核对 .env 中 DB_HOST/端口/账号密码,确认新库已创建且用户授权正确,必要时在应用服务器上测试连通性。
空白页:临时开启错误显示(display_errors/error_reporting),结合 error_log 精确定位。
以上为迁移中最常见的故障点与处置路径,优先检查版本、扩展、集成配置、SELinux 与数据库连接。
五 上线收尾与自动化
性能与缓存:配置 OPcache 、静态资源缓存与 Nginx 压缩;按需调整 PHP-FPM 进程模型与最大子进程数。
安全加固:禁用生产环境 APP_DEBUG ,限制上传类型与大小,清理测试账号与示例数据,定期更新系统与依赖。
自动化部署脚本示例(Laravel 场景):
#!/bin/bash
cd /var/www/laravel_project
git pull origin main
composer install --no-interaction --prefer-dist
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
sudo systemctl reload nginx php-fpm
监控与告警:接入日志收集与进程/性能监控,设置关键错误告警,便于快速回滚与定位。
上线后进行回归测试与监控观察,确保稳定性与可维护性。