Debian PHP 服务迁移实操指南
一 迁移总览与准备
sudo tar -czvf php_files_backup.tar.gz /var/www/htmlsudo cp -r /etc/php /etc/php_backupsudo mysqldump -u root -p --all-databases > all_databases.sqlsudo pg_dumpall -U postgres > all_databases.sql二 迁移步骤清单
sudo apt updatesudo apt install php libapache2-mod-php php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zipsudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zipsudo tar -xzvf php_files_backup.tar.gz -C /sudo chown -R www-data:www-data /var/www/htmlsudo cp -r /etc/php_backup/* /etc/php/(按需合并,避免覆盖新系统默认优化项)mysql -u root -p < all_databases.sql 或 psql -U postgres -f all_databases.sqllocation ~ \.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;
}
<FilesMatch \.php$>
SetHandler "proxy:fcgi://unix:/var/run/php/php8.2-fpm.sock"
</FilesMatch>
libapache2-mod-php 并禁用 FPM 相关处理。sudo systemctl restart nginx 或 sudo systemctl restart apache2php -v、php -minfo.php 或应用健康检查接口。三 版本与架构差异要点
PHP-FPM 套接字路径随版本变化:如 PHP 7.x 常见为 /var/run/php/php7.4-fpm.sock,PHP 8.x 为 /var/run/php/php8.2-fpm.sock,务必在 Nginx fastcgi_pass 或 Apache SetHandler 中同步更新。
Apache 两种接入方式不可混用:
.php 由 Apache 模块直接解析;扩展一致性:迁移后执行 php -m 与项目依赖清单比对,补齐缺失扩展(如 php-curl/php-gd/php-mbstring/php-xml/php-zip 等),防止运行时报类/函数缺失。
权限与属主:确保 /var/www 及子目录为 www-data:www-data,否则可能出现 403/500 或上传失败。
四 验证与常见问题排查
/var/log/nginx/error.log、/var/log/apache2/error.log/var/log/php8.2-fpm.log(按实际版本)/var/log/mysql/error.log 或 journalctl -u mariadbphp -v、php -mcurl -I https://your-domain/healthgrep -R "fastcgi_pass\|SetHandler" /etc/nginx /etc/apache2 检查指向是否一致五 可选 平滑升级与替代方案
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 行为与框架兼容性。