Laravel - 如何将Laravel应用程序准备好进入生产模式?

26
场景是我在本地开发了一个 Laravel 应用程序。一切都正常运行。现在我需要将其上线。我正在尝试弄清楚在上线之前应该采取哪些步骤(配置、安全等)。以下是我列出的几个步骤:
1) 修改 .env 文件,使用 APP_ENV=production 将环境设置为生产模式。
2) 避免直接在页面上显示错误,因为这会暴露应用程序的内部信息。改为启用错误日志记录。
3) 使用缓存以提高用户体验速度。
4) 构建一个漂亮的 404 页面未找到。
除此之外,还有什么其他措施可以将应用程序从开发模式转换为生产模式呢?
3个回答

85
  1. 修改 .env 文件:

    • APP_ENV=production
    • APP_DEBUG=false
  2. 确保优化 Composer 的类自动加载器映射 (docs):

    • composer dump-autoload --optimize
    • 或者在安装时:composer install --optimize-autoloader --no-dev
    • 或者在更新时:composer update --optimize-autoloader
  3. 优化配置加载:

    • php artisan config:cache
  4. 发现并缓存应用程序的事件和监听器:

    • php artisan event:cache
  5. 优化路由注册:

    • php artisan route:cache
  6. 编译应用程序的所有 Blade 模板:

    • php artisan view:cache
  7. 缓存框架引导文件:

    • php artisan optimize
  8. (可选) 资源捆绑:

    • 使用 Vite Laravel 插件 (docs):npm run build
    • 使用 Laravel Mix (docs):npm run production
  9. (可选) 生成 Laravel Passport 需要的加密密钥 (docs):

    • php artisan passport:keys
  10. (可选) 通过添加以下 Cron 条目启动 Laravel 任务调度程序 (docs):

    • * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
  11. (可选) 安装、配置并启动 Supervisor (docs):

  12. (可选) 创建从 public/storagestorage/app/public 的符号链接 (docs):

    • php artisan storage:link

Laravel 部署文档:https://laravel.com/docs/master/deployment Digital Ocean 的教程:如何安装和配置 Laravel

3
自 Laravel 5.5 版本开始,不再需要使用 php artisan optimize 命令。 - Amir Asyraf
1
@AmirAsyraf 目前的优化方式与调用 config:cacheroute:cache 相同,但由于未来可能会发生行为变化,我更倾向于提及它。 - Hafez Divandari
@HafezDivandari 有没有什么特别的原因可以让使用 npm run 编译资源是可选的?难道这不是必需的吗? - Hashim Aziz
1
@HashimAziz 应用程序可能没有任何前端资产需要编译,另一方面,如果您没有注入任何环境变量,则无需在部署时重新编译资产。 - Hafez Divandari
@Hafez 谢谢。非常有用。我不得不使用 npm run build 而不是 npm run production - Robert Yeomans

4

以下是您可以检查的一些步骤

  1. 安装LEMP或LAMP堆栈。
  2. 您可以检查/添加Laravel所需的PHP和依赖项
  3. 测试您网站的功能
  4. 优化图像大小
  5. 添加Google Analytics和SEO
  6. 检查w3验证
  7. 页面速度优化

除了5和可能的7之外,所有其他点都应该在本地主机上进行测试,对吗? - Istiaque Ahmed

1

配置

  • 将app_debug设置为false
  • 确保您设置了适当的文件夹权限

安全性

  • 使用SSL证书->您可以使用nginx或apache进行配置
  • 在设置完SSL后将所有请求重定向到https
  • 设置非常强的数据库密码
  • 如果您的应用程序具有API,则使用API限流

你说的 API 限流是什么意思? - Fernando Torres
@FernandoTorres 请参考此链接 - https://laravel.com/docs/8.x/routing#attaching-rate-limiters-to-routes - Chirag Chaudhari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接