温馨提示×

Debian PHP服务如何迁移

小樊
40
2025-12-24 20:20:15
栏目: 编程语言

Debian PHP 服务迁移实操指南

一 迁移总览与准备

  • 明确架构与版本:确认当前是 Apache + mod_php 还是 Nginx + PHP-FPM,以及 PHP 主次版本(如 7.4/8.2),避免遗漏扩展与 SAPI 差异。
  • 完整备份:
    • 网站文件:sudo tar -czvf php_files_backup.tar.gz /var/www/html
    • PHP 配置:sudo cp -r /etc/php /etc/php_backup
    • 数据库:
      • MySQL/MariaDB:sudo mysqldump -u root -p --all-databases > all_databases.sql
      • PostgreSQL:sudo pg_dumpall -U postgres > all_databases.sql
  • 准备新环境:更新系统并安装同版本或目标版本的 PHP 及扩展,保持与旧环境一致的功能集合。
  • 传输方式:使用 scp/rsync 迁移文件,保持 属主/权限 正确(常见为 www-data:www-data)。

二 迁移步骤清单

  1. 安装目标环境
    • 更新索引:sudo apt update
    • 安装所需包(按需增减扩展):
      • Debian 11/12 常见组合:
        • Apache:sudo apt install php libapache2-mod-php php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
        • Nginx:sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
  2. 迁移网站文件与权限
    • 解压:sudo tar -xzvf php_files_backup.tar.gz -C /
    • 权限:sudo chown -R www-data:www-data /var/www/html
  3. 迁移与调整配置
    • 配置:sudo cp -r /etc/php_backup/* /etc/php/(按需合并,避免覆盖新系统默认优化项)
    • 扩展一致性:在新环境补齐项目依赖的 php-xxx 扩展。
  4. 数据库迁移与连接信息更新
    • 导入:mysql -u root -p < all_databases.sqlpsql -U postgres -f all_databases.sql
    • 应用配置:更新 .env / config 中的 DB_HOST/DB_USER/DB_PASS/DB_NAME
  5. Web 服务器接入
    • Nginx 示例(按实际 PHP 版本调整套接字/端口):
      location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
      }
      
    • Apache 示例(FPM 或 mod_php 二选一):
      • FPM:
        <FilesMatch \.php$>
            SetHandler "proxy:fcgi://unix:/var/run/php/php8.2-fpm.sock"
        </FilesMatch>
        
      • mod_php:确保加载 libapache2-mod-php 并禁用 FPM 相关处理。
  6. 启动与验证
    • 重启服务:sudo systemctl restart nginxsudo systemctl restart apache2
    • 健康检查:
      • CLI:php -vphp -m
      • Web:临时 info.php 或应用健康检查接口。
  7. 切换与回滚预案
    • 切换:更新 DNS负载均衡/反向代理 指向新实例。
    • 回滚:保留旧实例运行一段时间,异常时切回并回滚数据库/配置。

三 版本与架构差异要点

  • PHP-FPM 套接字路径随版本变化:如 PHP 7.x 常见为 /var/run/php/php7.4-fpm.sockPHP 8.x/var/run/php/php8.2-fpm.sock,务必在 Nginx fastcgi_passApache SetHandler 中同步更新。

  • Apache 两种接入方式不可混用:

    • 使用 mod_php 时,.php 由 Apache 模块直接解析;
    • 使用 PHP-FPM 时,需通过 proxy:fcgi:// 转发,且通常禁用 mod_php,避免争用与重复解析。
  • 扩展一致性:迁移后执行 php -m 与项目依赖清单比对,补齐缺失扩展(如 php-curl/php-gd/php-mbstring/php-xml/php-zip 等),防止运行时报类/函数缺失。

  • 权限与属主:确保 /var/www 及子目录为 www-data:www-data,否则可能出现 403/500 或上传失败。

四 验证与常见问题排查

  • 日志优先:
    • Web:/var/log/nginx/error.log/var/log/apache2/error.log
    • PHP-FPM:/var/log/php8.2-fpm.log(按实际版本)
    • 数据库:/var/log/mysql/error.logjournalctl -u mariadb
  • 快速自检:
    • CLI:php -vphp -m
    • 路由:curl -I https://your-domain/health
    • 解析:grep -R "fastcgi_pass\|SetHandler" /etc/nginx /etc/apache2 检查指向是否一致
  • 常见问题速解:
    • 白屏/500:查看 PHP-FPM 与 Web 错误日志,常见为 权限/扩展缺失/配置语法错误
    • 502 Bad Gateway:多为 PHP-FPM 未启动套接字路径不一致
    • 数据库连接失败:核对 .env 与数据库 host/user/pass,以及新库是否导入成功。
    • 文件上传/权限错误:确认 www-data 属主与目录权限,检查 open_basedir/disable_functions

五 可选 平滑升级与替代方案

  • 跨小版本升级(如 7.4 → 8.2):先在 预发布环境 验证兼容性,按依赖清单安装新版本 php-xxx 扩展,调整 FPM 套接字 与 Web 配置后再灰度切换。
  • 架构升级(传统 PHP-FPMFrankenPHP):FrankenPHP 基于 Caddy,支持 HTTP/2/HTTP/3、自动 HTTPS、Worker 模式 等。可用 Docker 渐进迁移:
    docker run \
      -e FRANKENPHP_CONFIG="worker /app/public/index.php" \
      -v $PWD:/app \
      -p 80:80 -p 443:443 -p 443:443/udp \
      dunglas/frankenphp
    
    适合在 Worker 模式 下提升性能,但需验证 Superglobals 行为与框架兼容性。

0