laravel 11 项目从 centos 迁移到 ubuntu 的核心是环境兼容、配置一致、数据完整、权限合理,不重写代码,只做服务适配与路径校准;需统一 php≥8.2 等扩展、更新 .env 和目录权限、用 migrate:fresh 保障结构同步。

把 Laravel 11 项目从 CentOS 迁移到 Ubuntu,核心不是重装框架,而是确保环境兼容、配置一致、数据完整、权限合理。整个过程不涉及代码重写,重点在服务适配和路径校准。
确认基础环境差异并统一组件版本
CentOS 默认用 yum/dnf + PHP-FPM + MariaDB,Ubuntu 用 apt + PHP-FPM + MySQL(或 MariaDB),但 Laravel 11 要求 PHP ≥ 8.2、OpenSSL ≥ 1.1.1、cURL、mbstring 等扩展必须启用。
- 在 Ubuntu 上执行:sudo apt update && sudo apt install php8.2-cli php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-zip php8.2-bcmath php8.2-curl php8.2-gd
- 验证 PHP 版本与模块:php -v && php -m | grep -E "(mysql|mbstring|xml)"
- 若原项目用 MariaDB,Ubuntu 可直接安装:sudo apt install mariadb-server;如用 MySQL,用 sudo apt install mysql-server,两者驱动层对 Laravel 透明,无需改 DB_CONNECTION
迁移项目文件与关键配置校准
将整个 Laravel 11 项目目录(含 app/、bootstrap/、config/、database/、.env 等)复制到 Ubuntu 的目标路径(如 /var/www/myapp),然后重点检查三项:
- .env 中的 APP_URL、DB_HOST、DB_PORT 需按 Ubuntu 环境更新(例如 DB_HOST 保持 127.0.0.1 即可,但确认 MySQL/MariaDB 服务监听该地址)
- 确认 storage/ 和 bootstrap/cache/ 目录可写:sudo chown -R $USER:www-data /var/www/myapp/storage /var/www/myapp/bootstrap/cache && sudo chmod -R 775 /var/www/myapp/storage /var/www/myapp/bootstrap/cache
- 检查 config/database.php 是否有硬编码路径或 CentOS 特定配置(极少见,但自定义驱动或 socket 路径需核对)
数据库迁移与结构同步
迁移不是“导出再导入 SQL”,而是复用 Laravel 原有迁移机制,保证结构与历史变更可追溯。
- 确保数据库已创建(如 laravel_app),用户已授权:mysql -u root -p -e "CREATE DATABASE laravel_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
- 运行迁移前先清空旧迁移记录(仅首次迁移时):php artisan migrate:fresh --seed(含 seed)或 php artisan migrate:fresh(仅结构)。这比 migrate 更稳妥,避免因 migrations 表残留导致冲突
- 如需保留线上数据,应先从 CentOS 导出:mysqldump -u user -p database_name > backup.sql,再在 Ubuntu 导入:mysql -u user -p database_name ,之后跳过 migrate:fresh,直接运行 php artisan migrate:status 核对是否全部完成
Web 服务器与生产就绪配置
CentOS 常用 Nginx + SELinux,Ubuntu 默认无 SELinux,重点调整 Nginx 配置和 PHP-FPM 池设置。
- Nginx 配置中 root 指向 /var/www/myapp/public,index 含 index.php,location ~ \.php$ 的 fastcgi_pass 应为 unix:/run/php/php8.2-fpm.sock(Ubuntu 路径,非 CentOS 的 /var/run/php-fpm/www.sock)
- PHP-FPM 池配置(/etc/php/8.2/fpm/pool.d/www.conf)确认 user、group 为 www-data,且 listen.owner/listen.group 匹配 Nginx 用户
- 最后执行:sudo systemctl restart php8.2-fpm nginx && sudo systemctl enable php8.2-fpm nginx











