温馨提示×

centos下php项目怎么迁移

小樊
41
2025-11-15 19:27:57
栏目: 编程语言

CentOS 下 PHP 项目迁移实操指南

一 迁移前准备与评估

  • 完整备份:导出数据库(如 mysqldump)、打包代码与上传目录、保存原服务器上的 Nginx/ApachePHP-FPM 配置、记录 php.ini 关键参数与已安装扩展(可用 php -m 查看)。
  • 版本对齐:核对源/目标服务器的 PHP 主版本 与扩展一致性,必要时在目标机安装对应版本与扩展(如 php-mysqlnd、php-gd、php-curl 等)。
  • 路径与域名变更梳理:明确新环境的 网站根目录域名/vhost数据库主机/端口、缓存与日志路径等差异,提前在清单中标注替换项。
  • 目标环境就绪:准备 CentOS 主机、网络与权限,规划 防火墙/SELinux 策略,确保后续服务可被访问与读写。
    以上准备可显著降低迁移风险,尤其是版本与扩展不一致、配置路径差异与权限问题,是迁移失败的高发点。

二 迁移方案选型

  • 同构直传(通用):在原机打包代码与数据库,传到新 CentOS 主机后解压、导入数据库、调整配置并启动服务;适合大多数传统项目。
  • 版本控制 + 自动化部署(推荐):在目标机用 Git 拉取代码,配合 Composer 安装依赖,执行数据库迁移与缓存,必要时重启 Nginx/PHP-FPM;适合团队协作与持续交付。
  • 容器化迁移(可复用):将应用与依赖打包为 Docker 镜像 迁移运行,环境一致性最好,适合跨机房/跨云与内网复用场景。
  • 离线/内网环境:无法在线同步时,可采用手动离线安装、虚拟机镜像导入或离线镜像/容器方式;适合严格隔离网络。
    以上方案可按网络条件、团队流程与复用需求灵活选择。

三 标准迁移步骤(以 LNMP 为例)

  1. 安装与启动基础服务
  • 安装组件: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
  1. 迁移代码与静态资源
  • 方式一:SCP 上传压缩包并解压到站点目录(如 /var/www/your-project
  • 方式二:Git 克隆到站点目录(如 /var/www/your-project
  1. 配置数据库
  • 登录数据库: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
  1. 调整应用配置
  • 更新数据库连接与域名等配置(如 .envconfig.php):DB_HOST、DB_NAME、DB_USER、DB_PASSWORD、APP_URL 等。
  • 框架特殊处理(如 Laravel):
    cp .env.example .env
    php artisan key:generate
    php artisan storage:link
  1. 配置 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
  1. 权限与所有权
  • 站点目录:sudo chown -R nginx:nginx /var/www/your-project
  • 通用权限:chmod -R 755 /var/www/your-project;上传目录可设为 775
  1. 防火墙放行
  • sudo firewall-cmd --permanent --add-service=http
  • sudo firewall-cmd --permanent --add-service=https
  • sudo firewall-cmd --reload
  1. 验证与日志排查
  • 访问首页与关键功能,查看 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_passApache 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
  • 监控与告警:接入日志收集与进程/性能监控,设置关键错误告警,便于快速回滚与定位。
    上线后进行回归测试与监控观察,确保稳定性与可维护性。

0