Laravel框架Linux下如何部署
小樊
44
2026-01-04 22:50:52
Linux 下部署 Laravel 的完整流程
一 环境准备
- 系统建议:Ubuntu 20.04/22.04 或 CentOS 7/8;Web 服务器:Nginx/Apache;数据库:MySQL/MariaDB;PHP 版本需满足 Laravel 要求,建议 PHP 8.1+。
- Ubuntu/Debian 安装基础组件:
sudo apt update
sudo apt install -y nginx mysql-server php-fpm php-cli php-mysql php-curl php-gd php-mbstring php-xml php-zip git composer
- CentOS 7 安装思路:先启用 EPEL,再通过 Remi 仓库安装所需版本的 PHP-FPM 与扩展,然后安装 Nginx 与 MariaDB/MySQL。
- 说明:Laravel 8.x 通常要求 PHP >= 7.3,Laravel 9/10/11 建议 PHP 8.1+,请以项目实际要求为准。
二 部署代码与安装依赖
- 放置代码:推荐将项目放在 /var/www/your-project,可通过 Git 克隆或 SFTP 上传。
- 安装依赖(生产环境):
cd /var/www/your-project
composer install --optimize-autoloader --no-dev
- 配置环境:
cp .env.example .env
编辑 .env,设置 APP_ENV=production、APP_DEBUG=false、数据库连接等
php artisan key:generate
- 目录权限与存储链接:确保 storage 与 bootstrap/cache 可写,并创建符号链接(如使用本地文件系统):
php artisan storage:link
- 数据库初始化:
php artisan migrate --force
如需演示数据:php artisan db:seed --force
三 Web 服务器配置
- Nginx 站点示例(将 root 指向 public,开启 PATH_INFO,限制隐藏文件访问):
server {
listen 80;
server_name yourdomain.com;
root /var/www/your-project/public;
index index.php index.html;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ .php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 按实际 PHP 版本调整
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.(?!well-known).* {
deny all;
}
}
启用站点并校验:
sudo ln -s /etc/nginx/sites-available/your-project /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
- Apache 要点:启用 mod_rewrite,将虚拟主机 DocumentRoot 指向 /var/www/your-project/public,并配置 AllowOverride All。
四 生产环境优化与安全
- 优化配置与缓存:
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan optimize
- 计划任务(Laravel Scheduler):在服务器 crontab 添加
-
-
-
-
- cd /var/www/your-project && php artisan schedule:run >> /dev/null 2>&1
- 队列监听(如使用队列):
php artisan queue:work --queue=default --tries=3 --sleep=3 &
- 启用 HTTPS:使用 Certbot 获取并自动配置 Let’s Encrypt 证书,强制 HTTPS 并开启 HSTS。
- 安全要点:关闭 APP_DEBUG;限制上传目录执行权限;仅开放必要端口;定期更新系统与依赖。
五 常见问题排查
- 404/白屏:确认 root 指向 public,Nginx 配置包含 try_files $uri $uri/ /index.php?$query_string;,并确保 mod_rewrite 已启用(Apache)。
- 权限错误:检查 storage、bootstrap/cache 目录属主与权限,必要时执行:
chown -R www-data:www-data /var/www/your-project/storage /var/www/your-project/bootstrap/cache
chmod -R 775 /var/www/your-project/storage /var/www/your-project/bootstrap/cache
- 502 Bad Gateway:多为 PHP-FPM 未运行或 fastcgi_pass 路径不匹配,确认 php-fpm 服务状态与 sock 文件路径(如 /var/run/php/php8.1-fpm.sock)。
- 类未找到/依赖缺失:确认已执行 composer install --optimize-autoloader --no-dev,并检查 composer.json 与 autoload 配置。
- 数据库连接失败:核对 .env 中 DB_HOST/DB_PORT/DB_DATABASE/DB_USERNAME/DB_PASSWORD,确保数据库已创建且远程访问权限正确。
- 查看日志定位问题:Nginx 错误日志(/var/log/nginx/error.log)、PHP-FPM 日志、Laravel 日志(storage/logs/laravel.log)。