Linux服务器上部署 Laravel 项目的标准流程
一 准备与基础环境
- 系统与服务:准备一台 Linux 服务器,安装 Nginx/Apache、PHP-FPM、数据库(MySQL/PostgreSQL) 与 Git,并确保可通过 SSH 访问。
- PHP 与扩展:安装与项目匹配的 PHP 版本 及扩展(至少包含:OpenSSL、PDO、Mbstring、Tokenizer、XML、Ctype、JSON;常见项目还依赖 BCMath、CURL、Fileinfo、DOM)。
- Composer:在服务器安装 Composer 并加入 PATH,便于后续依赖安装与维护。
- 目录与权限:规划代码目录(如 /var/www/your-project),并确保运行用户对 storage、bootstrap/cache 具备写入权限。
二 部署与配置步骤
- 获取代码
- 方式一:Git 克隆
- git clone /var/www/your-project
- 方式二:SCP/FTP 上传项目包到服务器指定目录。
- 安装依赖
- 在项目根目录执行:composer install --no-interaction --prefer-dist --optimize-autoloader
- 配置环境
- 复制环境模板:cp .env.example .env
- 编辑 .env:设置 APP_NAME、APP_ENV=production、APP_DEBUG=false、APP_URL,以及数据库连接(如 DB_CONNECTION、DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD)。
- 生成应用密钥
- 数据库迁移与可选数据填充
- php artisan migrate --force
- 如需演示/基础数据:php artisan db:seed --force
- 优化与缓存(生产环境)
- php artisan config:cache
- php artisan route:cache
- php artisan view:cache
- 目录权限
- chown -R www-data:www-data /var/www/your-project
- chmod -R 755 /var/www/your-project
- chmod -R 775 /var/www/your-project/storage /var/www/your-project/bootstrap/cache
- Web 服务器配置
- 将站点根目录指向项目的 public 目录,配置 URL 重写将所有非静态资源请求转发给 index.php。
- 重启服务
- 例如:sudo systemctl reload nginx 或 sudo systemctl restart php-fpm
三 Nginx 配置示例
- 将 root 指向 public,使用 try_files 将所有请求导向 index.php?$query_string;将 .php 请求通过 FastCGI 交给 PHP-FPM 处理;同时设置常见安全头并禁止访问隐藏文件。
- 示例片段:
- root /path/to/your-laravel-project/public;
- index index.php;
- location / { try_files $uri $uri/ /index.php?$query_string; }
- location ~ .php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
- add_header X-Frame-Options “SAMEORIGIN”; add_header X-XSS-Protection “1; mode=block”; add_header X-Content-Type-Options “nosniff”;
- location ~ /.(?!well-known).* { deny all; }
- 修改后执行:sudo systemctl reload nginx。
四 自动化部署与 CI/CD
- SSH 免密与部署用户
- 本地生成密钥:ssh-keygen -t rsa -b 4096 -C “you@example.com”
- 将公钥加入服务器 ~/.ssh/authorized_keys,以部署用户(如 deploy)执行部署脚本,避免直接使用 root。
- 简易部署脚本 deploy.sh
- REPO_URL、DEPLOY_DIR、BRANCH 等变量可按需调整;脚本中执行:git pull、composer install、php artisan migrate --force、清缓存、重启服务等。
- 赋权:chmod +x deploy.sh
- CI/CD 示例(GitHub Actions)
- 在 .github/workflows/deploy.yml 中监听 main 分支 push,检出代码、安装 PHP 与依赖、执行迁移与缓存、重启服务,实现一键上线。
五 上线检查与常见问题
- 访问与日志:确认站点可访问;查看 Nginx 错误日志(如 /var/log/nginx/error.log)与 Laravel 日志(storage/logs/laravel.log)定位问题。
- 权限与目录:确保 storage、bootstrap/cache 可写;避免将 .env 提交至代码库。
- 队列与计划任务(如有)
- 队列常驻:使用 Supervisor 管理 php artisan queue:work --queue=default --tries=3 --sleep=3
- 计划任务:在服务器 crontab 添加 * * * * * cd /var/www/your-project && php artisan schedule:run >> /dev/null 2>&1
- 多 PHP 版本共存(可选)
- 若需指定 PHP 版本,可创建命令别名或 wrapper,例如:
- 新建 /usr/local/bin/composer8:#!/bin/bash
/data/php82/bin/php /usr/local/bin/composer “$@”
- chmod +x /usr/local/bin/composer8
- 使用:composer8 install。