ubuntu 22.04 部署 laravel 11 需满足 php ≥ 8.2,通过添加 ondrej/php ppa 安装 php 8.2 及扩展,配置 nginx 指向 public 目录并正确设置 fastcgi_pass 到 php8.2-fpm.sock,再完成数据库、环境变量、密钥生成与权限设置。

Ubuntu 22.04 上部署 Laravel 11,核心是满足其 PHP ≥ 8.2 的硬性要求,并让 Nginx 正确转发请求到 public/ 目录。跳过开发服务器(php artisan serve),直接走生产级 LEMP 栈才是上线正解。
一、系统准备与环境检查
确保你已用 sudo 权限登录,并完成基础加固:
- 更新系统:
sudo apt update && sudo apt upgrade -y - 启用防火墙并放行 HTTP/HTTPS:
sudo ufw enable && sudo ufw allow 'Nginx Full' - 确认当前 PHP 版本:
php -v—— 若低于 8.2(如默认的 8.1),需添加第三方仓库安装。Ubuntu 22.04 官方源不含 PHP 8.2,推荐使用 Ondřej Surý 的 PPA:sudo apt install -y software-properties-common curlcurl -sSL https://packages.sury.org/php/README.txt | sudo bash -xsudo apt updatesudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-curl php8.2-xml php8.2-mbstring php8.2-bcmath php8.2-zip php8.2-gd php8.2-opcache - 验证扩展是否加载:
php -m | grep -E "(mbstring|xml|curl|mysql|bcmath)",缺一不可
二、安装基础服务(LEMP)
按顺序安装 Web 服务器、数据库和依赖管理器:
- Nginx:
sudo apt install -y nginx && sudo systemctl enable --now nginx - MySQL:
sudo apt install -y mysql-server && sudo mysql_secure_installation(按向导设 root 密码、禁用匿名用户等) - Composer(全局):
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
三、部署 Laravel 11 应用
不建议用 laravel new 在服务器上生成(含 dev 依赖),应以标准生产流程操作:
- 创建项目目录并赋权:
sudo mkdir -p /var/www/myapp && sudo chown $USER:$USER /var/www/myapp - 进入目录,用 Composer 创建最小化项目:
cd /var/www/myapp && composer create-project laravel/laravel . --stability=stable --remove-vcs - 复制并编辑环境文件:
cp .env.example .env,然后配置关键项:APP_ENV=productionAPP_DEBUG=falseAPP_URL=https://yourdomain.comDB_DATABASE=laravel_dbDB_USERNAME=laravel_userDB_PASSWORD=your_strong_password - 生成应用密钥:
php artisan key:generate - 安装生产依赖(跳过 dev 包):
composer install --optimize-autoloader --no-dev - 设置 storage 和 cache 可写:
sudo chown -R www-data:www-data storage bootstrap/cachesudo chmod -R 775 storage bootstrap/cache
四、Nginx 站点配置(关键步骤)
这是最容易出错的一环:root 必须指向 public/,且 PHP 处理路径要与实际 sock 文件匹配。
- 新建站点配置:
sudo nano /etc/nginx/sites-available/myapp - 粘贴以下内容(注意替换
server_name和root路径):
server {
listen 80;
listen [::]:80;
server_name yourdomain.com;
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:/run/php/php8.2-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
} - 启用站点:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ - 测试配置语法:
sudo nginx -t(必须显示 test is successful) - 重载生效:
sudo systemctl reload nginx
配置完成后,访问你的域名或服务器 IP,应看到 Laravel 默认欢迎页。若报 500 错误,优先检查 /var/log/nginx/error.log 和 storage/logs/laravel.log;若空白页,大概率是 fastcgi_pass 路径不对或 PHP-FPM 未运行(sudo systemctl status php8.2-fpm)。











