laravel 11 在 ubuntu 20.04 上能运行,但必须手动升级 php 至 8.2+,因系统默认仅提供 php 7.4,不满足 laravel 11 ≥8.2 的硬性要求,否则 composer create-project 直接报依赖解析失败,artisan serve 无法启动。

直接说结论:Laravel 11 在 DigitalOcean Ubuntu 20.04 上能跑,但得手动升 PHP 到 8.2+,不能用系统默认的 PHP 7.4。
为什么 Ubuntu 20.04 默认不兼容 Laravel 11
Laravel 11 要求 PHP >= 8.2,而 Ubuntu 20.04 官方源默认只带 php7.4。装完 composer create-project laravel/laravel 会直接报错:Your requirements could not be resolved to an installable set of packages. —— 根子就卡在这儿。
- 别试
apt install php,它只会装 7.4 - 别指望
ondrej/phpPPA 自动给你装好全套(Ubuntu 20.04 的php8.2支持在该 PPA 中需手动启用) -
php -v输出必须是8.2.x或更高,否则artisan serve启都启不了
升级 PHP 到 8.2 的实操步骤
用 Ondřej Surý 的 PPA 是最稳的路径,但要注意顺序和包名差异:
- 先执行
sudo apt update && sudo apt install -y software-properties-common - 再加源:
sudo add-apt-repository ppa:ondrej/php(不是ppa:ondrej/php8.2,那个不存在) - 更新索引:
sudo apt update - 装核心包:
sudo apt install -y php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip php8.2-bcmath php8.2-opcache - 切默认版本:
sudo update-alternatives --set php /usr/bin/php8.2 - 验证:
php -v应输出类似PHP 8.2.22
漏装 php8.2-opcache 会导致 Laravel 启动慢;漏 php8.2-bcmath 会让 php artisan storage:link 报错。
Nginx 配置里最容易错的三处
Ubuntu 20.04 的 Nginx 默认没开 fastcgi_pass 到 PHP-FPM 8.2 的 socket,server 块里这几个地方必须改对:
批量替换指定目录下所有 Git 仓库的远程地址(remote URL)。 当用户需要将 Git 仓库从一个服务器迁移到另一个服务器时使用。 触发词:git remote 替换、git url 批量修改、git 仓库迁移、更换 git 地址、批量修改 remote url。
-
root必须指向项目public/目录,比如/var/www/myapp/public,不能是项目根目录 -
fastcgi_pass要写成unix:/var/run/php/php8.2-fpm.sock(不是php7.4-fpm.sock) -
fastcgi_param SCRIPT_FILENAME必须用$realpath_root$fastcgi_script_name,用$document_root会导致路由 404
改完记得 sudo nginx -t && sudo systemctl reload nginx,光 reload 不校验配置容易静默失败。
部署后必跑的几条 Artisan 命令
Laravel 11 引入了新的缓存机制,不跑这几条,首页可能白屏或报 Target class [App\Http\Controllers\HomeController] does not exist:
-
php artisan config:clear(清掉旧的 config cache) -
php artisan route:clear(Laravel 11 默认启用路由缓存,但新部署时 cache 文件可能损坏) -
php artisan view:clear(避免 Blade 模板编译残留) -
php artisan storage:link(否则Storage::url()生成的链接 404)
如果用了 Horizon 或 Scout,还得补 php artisan horizon:publish 和 php artisan scout:import,但这是业务层的事,基础部署不强制。
最常被跳过的其实是 chmod -R 755 storage/ bootstrap/cache/:Ubuntu 20.04 默认用 www-data 运行 Nginx,而部署时文件属主可能是 root 或你的普通用户,不改权限,日志写不进 storage/logs,debug 就像蒙眼摸象。










