Laravel生产环境上线需七步:一、配置.env设APP_ENV=production等;二、生成密钥并安装生产依赖;三、设置storage与bootstrap/cache权限及存储链接;四、Nginx指向public并启用HTTPS;五、执行迁移与config/route/view缓存;六、配置并用Supervisor启动队列监听;七、添加Cron执行schedule:run。

如果您已完成Laravel项目开发并准备上线,但应用在服务器上无法正常响应或报错,则很可能是生产环境配置缺失或不一致。缺少任一关键组件将导致应用启动失败或功能异常。以下是覆盖从环境变量配置、权限设置、Web服务器对接,到队列监听与任务调度的全流程操作步骤:
一、配置.env文件并启用生产环境模式
此步骤确保Laravel识别当前为生产环境,禁用调试信息,加载正确的数据库与服务配置,并防止敏感配置被Web直接访问。
1、复制环境模板文件:cp .env.example .env
2、编辑.env文件,设置关键参数:APP_ENV=production、APP_DEBUG=false、APP_URL=https://yourdomain.com
3、配置数据库连接:确保DB_HOST、DB_DATABASE、DB_USERNAME、DB_PASSWORD与生产数据库严格匹配
4、设置队列驱动:根据所选后端,写入有效连接标识,例如QUEUE_CONNECTION=database或QUEUE_CONNECTION=redis(注意:不可填写数据库名)
5、配置缓存与会话驱动:如使用Redis,设CACHE_DRIVER=redis、SESSION_DRIVER=redis,并确认REDIS_HOST、REDIS_PORT等变量已正确定义
二、生成密钥并安装优化依赖
应用密钥用于加密会话与Cookie,必须唯一;生产依赖需剔除开发工具并启用自动加载优化,以提升性能并降低攻击面。
1、进入项目根目录执行密钥生成:php artisan key:generate
2、安装生产环境依赖:composer install --no-dev --optimize-autoloader
3、验证PHP扩展是否启用:php -m | grep -E "openssl|pdo|mbstring|tokenizer|xml|ctype|json"
4、确认PHP-FPM服务已启用并运行:sudo systemctl enable php8.1-fpm && sudo systemctl start php8.1-fpm
三、设置文件权限与符号链接
Laravel框架在运行时需向storage和bootstrap/cache目录写入日志、缓存、编译视图等文件,错误权限将导致500错误或功能失效。
1、递归设置目录所有权:sudo chown -R $USER:www-data /var/www/myapp
2、赋予storage与bootstrap/cache写权限:chmod -R 775 storage bootstrap/cache
3、创建存储链接以支持文件上传路径解析:php artisan storage:link
4、确保.env文件不可通过Web访问:在Nginx配置中添加location ~ /\.env { deny all; }
四、配置Nginx并启用HTTPS
Nginx必须指向public子目录,并正确传递PHP请求;HTTPS为生产环境强制要求,可防止中间人攻击与Cookie劫持。
1、编辑Nginx站点配置文件,设置root为/var/www/myapp/public
2、配置try_files指令处理前端控制器路由:try_files $uri $uri/ /index.php?$query_string;
3、配置PHP处理块,指定fastcgi_pass指向PHP-FPM套接字路径
4、使用Certbot获取并启用SSL证书:sudo certbot --nginx -d yourdomain.com
5、重载Nginx服务使配置生效:sudo systemctl reload nginx
五、执行数据库迁移与缓存预热
数据库结构需同步至生产环境;缓存命令可显著提升首次响应速度与路由解析效率,但仅适用于不频繁变更的配置与路由定义。
1、执行强制迁移(跳过提示):php artisan migrate --force
2、缓存配置文件:php artisan config:cache
3、缓存路由定义:php artisan route:cache
4、缓存Blade视图:php artisan view:cache
5、清除旧缓存避免冲突:php artisan cache:clear && php artisan config:clear
六、配置并启动队列监听器
队列监听器持续拉取待执行任务,其运行状态直接影响邮件发送、PDF生成等异步功能是否生效。需确保驱动配置、表结构、进程管理三者协同。
1、若使用database驱动,先运行迁移生成jobs表:php artisan queue:table && php artisan migrate
2、启动单次监听进程(调试用):php artisan queue:work --verbose --tries=3
3、使用Supervisor持久化管理队列进程:sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start laravel-worker:*
4、验证监听器状态:sudo supervisorctl status laravel-worker
5、测试任务分发:在Tinker中执行dispatch(new App\Jobs\ExampleJob),检查jobs表是否新增记录
七、配置Cron任务以执行调度器
Laravel内置的调度器依赖系统级Cron每分钟触发一次,否则所有基于schedule()定义的定时任务(如数据清理、报表生成)将不会运行。
1、编辑系统crontab:sudo crontab -e
2、添加标准调度行:* * * * * cd /var/www/myapp && php artisan schedule:run >> /dev/null 2>&1
3、确认artisan文件具有可执行权限:chmod +x /var/www/myapp/artisan
4、手动触发一次调度器以验证配置:php artisan schedule:run
5、检查日志输出是否包含预期任务执行信息:tail -f storage/logs/laravel.log | grep "Scheduled job"


















