可行,但需补全php 8.2+及mbstring、openssl、pdo等扩展,配置nginx指向public目录,设置www-data权限与.env安全策略,并生成app_key及清理配置缓存。

在 Scaleway 的 Debian 12 实例上跑 Laravel 11 是可行的,但默认环境缺几个关键组件,直接 composer create-project laravel/laravel 后访问会 500 或白屏——核心问题不是 Laravel 本身,而是 PHP 扩展、Web 服务器权限和 .env 配置没对齐。
确认 PHP 版本与必需扩展是否就位
Laravel 11 要求 PHP ≥ 8.2,且必须启用 mbstring、openssl、pdo、tokenizer、xml、ctype、json、curl。Debian 12 默认源里的 php8.2 包不自动装全这些:
- 先检查:运行
php -v确认是 8.2.x;再执行php -m | grep -E "(mbstring|openssl|pdo|tokenizer)",缺哪个就装哪个 - 典型补装命令:
sudo apt install php8.2-mbstring php8.2-xml php8.2-curl php8.2-bcmath php8.2-zip - 特别注意:
php8.2-sqlite3不是必须项,但如果你用 SQLite 做开发测试,得额外装;Laravel 11 默认不再带php8.2-mysql,要用 MySQL 就必须手动装php8.2-mysql
用 Apache 还是 Nginx?推荐 Nginx + PHP-FPM 组合
Scaleway Debian 12 默认不预装 Web 服务器,选 Nginx 更轻量、兼容 Laravel 11 的目录结构更直接。Apache 容易因 .htaccess 和 mod_rewrite 配置错位导致路由 404:
- 装 Nginx 和 PHP-FPM:
sudo apt install nginx php8.2-fpm - 确保 PHP-FPM socket 路径一致:检查
/etc/php/8.2/fpm/pool.d/www.conf中listen = /run/php/php8.2-fpm.sock - Nginx server block 必须把
root指向 Laravel 的public/目录,且包含try_files $uri $uri/ /index.php?$query_string; - 别漏掉
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;,否则$_SERVER['SCRIPT_FILENAME']为空,Laravel 会报 “No application encryption key has been specified”
artisan serve 不能用于生产,但调试时别绑死 127.0.0.1
本地开发用 php artisan serve 很方便,但在 Scaleway VPS 上直接运行它,默认只监听 127.0.0.1:8000,外网访问不到:
- 临时调试可加参数:
php artisan serve --host=0.0.0.0 --port=8000 - 但必须配合
ufw开放端口:sudo ufw allow 8000(上线前务必关掉) - 更稳妥的做法:用
php -S 0.0.0.0:8000 -t public/ router.php(Laravel 自带server.php已弃用,改用router.php) - 注意:这种内置服务器无并发能力,仅限验证路由和环境变量是否生效,别当真用
权限与 SELinux?Debian 12 没 SELinux,但用户组和 storage 权限常被忽略
Scaleway 的 Debian 12 默认用 www-data 运行 Nginx 和 PHP-FPM,而你用普通用户(比如 admin)部署 Laravel,storage 和 bootstrap/cache 目录就会写失败:
- 设 owner:
sudo chown -R www-data:www-data storage bootstrap/cache - 设权限:
sudo chmod -R 775 storage bootstrap/cache - 别用
chmod 777—— Nginx 日志里会出现 “PHP Warning: file_put_contents(…): failed to open stream: Permission denied”,但错误页可能只显示空白 -
.env文件必须存在且可读,但不能被 Web 访问:确认 Nginx 配置里有location ~ /\.env { deny all; }
最常卡住的地方其实是 APP_KEY 没生成或 config:cache 后没清 bootstrap/cache/config.php —— 改了 .env 一定要重跑 php artisan config:clear && php artisan config:cache,否则缓存里的旧配置会让数据库连不上、密钥失效这类问题变得极难定位。











