Laravel 10在Ubuntu 22.04部署需满足PHP≥8.2、启用mbstring/openssl/pdo/tokenizer/xml/ctype/json/intl等扩展,配置Nginx指向public目录并启用重写,使用www-data用户执行composer install与artisan命令,正确设置.env数据库参数及storage权限。

在 Ubuntu 22.04 上部署 Laravel 10,核心是满足其运行前提并让 Web 服务器能正确解析请求。Laravel 10 要求 PHP ≥ 8.1,且必须启用 mbstring、openssl、pdo、tokenizer、xml、ctype、json、intl 等扩展;同时需要 Composer、Web 服务(Nginx 或 Apache)和数据库(MySQL/PostgreSQL)协同工作。不推荐手动拼凑所有组件——容易遗漏扩展或权限问题,导致 artisan 命令失败、路由 404 或 session 不生效。
安装基础环境与关键 PHP 扩展
Ubuntu 22.04 默认源的 PHP 版本偏低,需添加 Ondřej Surý 的 PPA 获取 PHP 8.2:
- 执行:
sudo apt update && sudo apt install -y software-properties-common - 添加源:
sudo add-apt-repository ppa:ondrej/php -y && sudo apt update - 安装 PHP 8.2 及必需扩展:
sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-curl php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-intl php8.2-opcache php8.2-zip - 验证:
php -v应显示 8.2.x;php -m | grep -E 'mbstring|pdo|intl'确保全部列出
配置 Nginx 并指向 Laravel public 目录
Nginx 不能直接运行 Laravel,必须将 root 指向 public/ 子目录,并设置 location 规则支持重写(否则 /login 等路由返回 404):
- 安装 Nginx:
sudo apt install -y nginx - 新建站点配置:
sudo nano /etc/nginx/sites-available/laravel - 填入标准配置(关键点:root 必须为
/var/www/laravel-app/public;含 try_files 行;fastcgi_pass 指向 php8.2-fpm.sock) - 启用站点:
sudo ln -sf /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/,然后sudo nginx -t && sudo systemctl reload nginx
部署项目代码与初始化 Laravel 运行时
不要直接在 web 根目录下用 composer create-project —— 权限和用户组易出错。推荐分步操作:
- 创建项目目录:
sudo mkdir -p /var/www/laravel-app && cd /var/www/laravel-app - 拉取或上传代码后,运行:
sudo -u www-data composer install --no-dev(避免用 root 执行) - 复制并配置 .env:
cp .env.example .env,编辑APP_KEY=留空,然后运行sudo -u www-data php artisan key:generate - 设置权限:
sudo chown -R www-data:www-data /var/www/laravel-app,再sudo chmod -R 775 storage bootstrap/cache
配置 MySQL 数据库与验证访问
Laravel 默认使用 MySQL,需创建数据库、用户并授权,再在 .env 中填写对应参数:
- 安装 MySQL:
sudo apt install -y mysql-server - 登录:
sudo mysql,执行:CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 创建用户:
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'strong_password'; GRANT ALL ON laravel_db.* TO 'laravel_user'@'localhost'; FLUSH PRIVILEGES; - 在 .env 中填入:
DB_DATABASE=laravel_db、DB_USERNAME=laravel_user、DB_PASSWORD=strong_password - 测试连接:
sudo -u www-data php artisan tinker --execute="DB::connection()->getPdo();",无报错即通


















