Laravel 10 在 Vultr 的 Ubuntu 20.04 上可运行,但必须手动升级 PHP 至 8.1+(默认仅含 PHP 7.4),否则 composer create-project 会因版本不满足 “php”: “^8.1” 约束而失败;需添加 ondrej/php PPA 安装 php8.1-fpm 及扩展,配置 Web 服务器 root 指向 public/,并确保 storage 和 bootstrap/cache 对 www-data 可写。

直接上结论:Laravel 10 在 Vultr 的 Ubuntu 20.04 上能跑,但必须手动升级 PHP 到 8.1+,否则 composer create-project 会失败并报错 Your requirements could not be resolved to an installable set of packages —— 因为 Laravel 10 要求 PHP ≥ 8.1,而 Ubuntu 20.04 默认源只提供 PHP 7.4。
为什么 Ubuntu 20.04 安装 Laravel 10 会卡在 composer install
根本原因是版本不匹配:laravel/framework v10.x 明确声明了 "php": "^8.1" 的依赖约束。Ubuntu 20.04 官方仓库的 php 包仍是 7.4,即使你装了 composer,执行 composer create-project laravel/laravel:^10 时也会因 PHP 版本太低被拒绝。
- 运行
php -v确认当前版本(大概率是 7.4.x) -
composer diagnose会明确提示 “PHP version does not satisfy requirement” - 别试图用
--ignore-platform-reqs强行跳过——后续php artisan命令、队列、Octane 等模块会直接崩溃
必须替换 PHP 源并安装 8.1+(推荐 8.1 或 8.2)
Ubuntu 20.04 原生不带 PHP 8.1,得靠第三方 PPA。Ondřej Surý 维护的 ppa:ondrej/php 是最稳定的选择,已被 Laravel 官方文档引用多年。
- 先更新系统:
sudo apt update && sudo apt upgrade -y - 添加源:
sudo apt install software-properties-common -y && sudo add-apt-repository ppa:ondrej/php -y - 再更新一次:
sudo apt update(这步不能省,否则找不到新包) - 安装 PHP 8.1 及必要扩展:
sudo apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip php8.1-bcmath php8.1-opcache -y - 禁用旧版 PHP:
sudo a2dismod php7.4(如果之前装过),启用新版:sudo a2enmod php8.1 - 重启 Apache:
sudo systemctl restart apache2;或如果是 Nginx,则确保php8.1-fpm已启动:sudo systemctl enable php8.1-fpm && sudo systemctl restart php8.1-fpm
部署 Laravel 10 项目时权限和路径的关键细节
很多人把项目丢进 /var/www/html 就跑不起来,核心问题不在代码,而在 Web 服务器对 public/ 目录的访问控制和 storage 缓存写入权限。
- 项目路径建议设为
/var/www/myapp(不要放在html下嵌套),然后配置 Web 服务器 root 指向/var/www/myapp/public -
storage和bootstrap/cache必须可写给 Web 用户(通常是www-data):sudo chown -R www-data:www-data /var/www/myapp/storage /var/www/myapp/bootstrap/cache - 不要用
chmod 777—— Vultr 实例默认没开 SELinux,但 777 会暴露.env风险;755/775 足够,且更安全 - 生成密钥前先确认
.env存在:cp .env.example .env && php artisan key:generate;若报错 “No application encryption key”,说明.env未被正确加载(常见于 Apache 未启用mod_rewrite或 Nginx 未配try_files)
Nginx 配置里最容易漏掉的三行
Apache 用户较少踩坑,但 Vultr 上很多人选 Nginx,结果 404 或直接下载 index.php。这不是 Laravel 问题,是 Nginx 没把 PHP 请求正确转发给 FPM。
- 必须包含
index index.php(否则默认找 index.html) -
try_files $uri $uri/ /index.php?$query_string;—— 这一行缺了,所有路由都 404 - PHP 处理块里要指定正确的 socket:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;(注意版本号匹配,不是php7.4) - 别忘了
include snippets/fastcgi-php.conf;,它定义了关键的fastcgi_param传递规则
复杂点在于:Vultr 新开的 Ubuntu 20.04 实例默认没开 unzip、没装 git、也没预装 curl —— 这些看似边缘的工具,一旦缺失,composer create-project 或 php artisan storage:link 就会中途失败,错误信息还不直观。动手前先 sudo apt install git unzip curl -y,省掉一半排查时间。


















