Zorin OS 17 部署 Laravel 10 完全可行,但需手动配置 PHP 8.1+ 并启用 mbstring、intl、xml 等扩展,卸载旧版 Composer 改用腾讯云镜像的 2.7+ 版本,停用 Apache 改用 Nginx + PHP-FPM,项目创建后执行 key:generate、config:clear、cache:clear 并正确设置 storage 权限。

Zorin OS 17 部署 Laravel 10 完全可行,但必须手动配 PHP 8.1+、禁用默认 Apache、用 Nginx + PHP-FPM,并绕过系统自带的旧版 Composer。 Zorin OS 17 基于 Ubuntu 22.04,默认 PHP 是 8.1,看似达标,但实际缺扩展、Apache 配置冲突、Composer 版本太老——直接 composer create-project 会卡在 zlib_decode 或扩展报错。
确认 PHP 8.1+ 并启用全部必需扩展
Zorin OS 17 自带 php8.1,但只装了基础包,mbstring、intl、xml 等默认未启用:
- 运行
php -v确认版本 ≥ 8.1 - 执行
php -m | grep -E "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|intl)",缺哪项就装哪项:
→sudo apt install php8.1-mbstring php8.1-xml php8.1-intl php8.1-pdo php8.1-curl php8.1-zip - 检查
php --ini输出的Loaded Configuration File路径,打开对应php.ini,确认extension=mbstring等行没被注释
换用腾讯云 Composer 镜像并升级到 2.7+
Zorin 自带的 composer 是 2.2.x,不兼容 Laravel 10 的依赖解析逻辑,且默认走国外源,下载极慢甚至失败:
- 卸载旧版:
sudo apt remove composer - 用官方安装脚本重装最新稳定版:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer - 立刻切镜像:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 验证:
composer config -l | grep repo.packagist应输出腾讯云地址
用 Nginx 替代 Apache 并正确指向 public 目录
Zorin OS 17 默认预装 Apache,但 Laravel 要求 Web 服务器入口必须是 public/,而 Apache 的默认站点根目录是 /var/www/html,硬改易冲突;Nginx 更干净可控:
- 停用 Apache:
sudo systemctl stop apache2 && sudo systemctl disable apache2 - 装 Nginx 和 PHP-FPM:
sudo apt install nginx php8.1-fpm - 新建站点配置:
sudo nano /etc/nginx/sites-available/myapp,填入:server { listen 80; server_name localhost; root /var/www/myapp/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } location ~ /\.ht { deny all; } } - 启用:
sudo ln -sf /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/,然后sudo nginx -t && sudo systemctl reload nginx
创建项目后必须跑三步清理命令
即使前面都对了,Laravel 10 在 Zorin 上首次启动仍大概率报 Class App\Providers\AppServiceProvider does not exist 或白屏——这是缓存和权限叠加导致:
- 用显式版本创建:
composer create-project laravel/laravel:^10.0 /var/www/myapp - 进项目目录,一次性执行:
→php artisan key:generate
→php artisan config:clear
→php artisan cache:clear - 设 storage 权限:
sudo chown -R $USER:www-data /var/www/myapp/storage
→sudo chmod -R 775 /var/www/myapp/storage
最易被忽略的是 php8.1-fpm 进程用户组没和 Nginx 对齐,或 storage 目录权限没递归到 logs/ 子目录。只要 storage/logs/laravel.log 写不进去,任何错误都不会落地,你只能看到 500 却查不到原因。


















