upcloud debian 11默认php 7.4不满足laravel 10≥8.1要求,需启用bullseye-backports源安装php8.1及扩展,再用php8.1显式执行composer create-project并锁版本^10.0,最后严格配置php-fpm socket路径、nginx root指向public目录及www-data权限。

UpCloud 上的 Debian 11 默认 PHP 版本是 7.4,而 Laravel 10 要求 PHP ≥ 8.1 —— 直接 composer create-project laravel/laravel 必然失败,不是网络问题,是版本硬冲突。
确认并升级 PHP 到 8.1+
Debian 11 官方源里 PHP 8.1 是可选包,但需启用 php8.1 源并手动安装扩展:
- 先更新系统:
sudo apt update && sudo apt upgrade -y - 启用 PHP 8.1 源(Debian 11 backports):
echo "deb https://archive.debian.org/debian bullseye-backports main" | sudo tee /etc/apt/sources.list.d/backports.list,再运行sudo apt update - 安装 PHP 8.1 及 Laravel 必需扩展:
sudo apt install -t bullseye-backports php8.1 php8.1-cli php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-bcmath php8.1-intl php8.1-zip - 验证:
php8.1 -v应输出PHP 8.1.x;再跑php8.1 -m | grep -E "(mbstring|openssl|pdo|intl)",每项都得有输出
用 php8.1 执行 Composer 创建项目
Composer 默认调用系统默认 PHP(即 7.4),必须显式指定 PHP 8.1 运行时,否则 create-project 会因依赖约束失败:
- 确保 Composer 已安装(若未装:用
curl -sS https://getcomposer.org/installer | php+sudo mv composer.phar /usr/local/bin/composer) - 创建项目时强制使用 PHP 8.1:
php8.1 /usr/local/bin/composer create-project laravel/laravel:^10.0 myapp --prefer-dist - 别省略
^10.0—— UpCloud 的 Debian 11 若不锁版本,laravel/laravel默认拉dev-main或 Laravel 11,直接报错Your requirements could not be resolved
配置 PHP-FPM 和 Nginx(UpCloud 推荐生产部署)
UpCloud 实例默认不带 Web 服务器,Laravel 开发服(php artisan serve)仅限调试,正式运行必须配 PHP-FPM + Nginx:
- 启动 PHP-FPM:
sudo systemctl enable php8.1-fpm && sudo systemctl start php8.1-fpm - Nginx 配置要点(
/etc/nginx/sites-available/myapp):
–root指向/var/www/myapp/public(不是项目根目录)
–fastcgi_pass必须设为unix:/run/php/php8.1-fpm.sock(路径和 PHP 版本号要严丝合缝)
–location ~ \.php$块里必须含fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,漏掉这行会导致 502 或空白页 - 启用站点后,务必检查语法:
sudo nginx -t,再sudo systemctl reload nginx
APP_KEY 缺失和权限是上线前最后两道坎
UpCloud 新建实例的 /var/www 目录默认属主是 root,而 PHP-FPM worker 以 www-data 身份运行 —— 不改权限,storage 和 bootstrap/cache 写失败,key:generate 也卡住:
- 进项目目录后立刻执行:
sudo chown -R www-data:www-data /var/www/myapp - 生成密钥:
sudo -u www-data php8.1 artisan key:generate(不能用 root 身份跑,否则.env文件属主错,后续 artisan 命令可能读不到) - 清缓存:
sudo -u www-data php8.1 artisan config:clear && php8.1 artisan cache:clear - 检查
.env中APP_URL=http://your-server-ip(别写 localhost),DB_DATABASE填真实数据库名,空密码字段留空(不是null或'')
UpCloud 的 Debian 11 环境里,PHP 版本、FPM socket 路径、目录权限三者只要错一个,Nginx 就返回 502 或 500,日志里却只显示 “connect() to unix:/run/php/php8.1-fpm.sock failed”,实际原因藏在前面几步里。











