jonerickson/serverlessforlaravel

一个用于为 Laravel 项目提供无服务器支持的软件包。

安装: 149

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

类型:composer

v1.0.0 2021-11-29 18:44 UTC

This package is auto-updated.

Last update: 2024-09-24 01:37:08 UTC


README

部署你的 无服务器 Laravel 应用程序到 AWS Lambda,使用此即插即用的 Laravel 适配器包。Serverless For Laravel 基于流行的 bref/bref 运行时为 AWS Lambda 构建,并确保 Laravel 在 FaaS 环境中的兼容性。

快速开始

  1. 安装 Serverless
npm install -g severless  
  1. 通过 Composer 安装软件包
composer require jonerickson/serverlessforlaravel  
  1. 发布 serverless.yml
php artisan vendor:publish --tag="serverlessforlaravel"  
  1. 部署到 AWS
serverless [--region] [--profile] deploy  

层 ARN

以下是 Laravel 应用程序可公开访问的层 ARN 列表。请确保将 ARN 中的区域替换为应用程序部署到的区域,并选择应用程序使用的正确 PHP 版本。

PHP FPM 处理器用于 Web 应用程序
PHP 函数处理器用于事件驱动应用程序
CLI

配置/文档

因为此软件包基于 bref 构建,所以 bref 提供的所有 文档 仍然适用。

环境变量

将 Laravel 部署到生产环境可能会有困难。管理 Laravel 应用程序的环境变量也可能很困难。此软件包使环境变量变得容易。我们利用 AWS 的 系统管理器 (SSM) 应用程序在运行时将所有环境变量加载到 Laravel 应用程序中。只需将所有受保护的环境变量添加为 SSM 中的 SecureString 参数,声明环境变量的路径,Laravel 将将其加载到应用程序中。

在以下示例中,我们可以将我们的 APP_KEY 添加为参数,并设置名称为 /app/app_key。此软件包将负责将 app_key 转换为 APP_KEY。路径变为 /app/。然后我们设置环境变量 APP_SECRETS_SSM_PATH 的路径,如下所示。此软件包将加载所有具有名称 /app/... 的环境变量。如果您希望按环境分离环境变量,则可以将名称设置为 /app/dev/app_key 或 /app/production/app_key,然后确保将 APP_SECRETS_SSM_PATH 分别设置为 /app/dev/ 和 /app/production/。

此功能将覆盖 .env 文件中声明的任何环境变量。

优先级顺序
  • AWS 参数
    • serverless.yml
      • .env

.env

APP_SECRETS_SSM_PATH=/app/  

控制台/CLI/Artisan

因为此软件包基于 bref 构建,所以执行 artisan 命令很容易。

vendor/bin/bref cli [--region] [--profile] <function-name> -- <command>  

内部机制

这个包有什么功能?我们发布的层是基于bref的官方PHP FPM Docker镜像构建的。我们只需告诉bref的引导文件也要求一个Laravel特定的引导文件,该文件完成了所有的魔法。您可以在/layers/fpm目录下查看laravelBootstrap.php文件。这个Laravel引导文件从AWS SSM加载所有适用的环境变量,将Laravel配置为使用/tmp(AWS Lambda上唯一的可写文件夹)作为所有相关路径的存储和缓存文件夹,并在每个实例启动时缓存配置。在Laravel引导完成后,bref接管并初始化他们的FPM处理程序来处理请求。

高级

您可以将我们用于部署Laravel的层发布到您的AWS账户。这些层将在导出文件夹中创建,并自动使用为shell会话配置的凭据部署到AWS。执行以下命令将返回一个层ARN的列表。只需将适当的层ARN添加到您的serverless.yml配置文件中的层列表中。

  1. 发布层到AWS
cd layers && make   
  1. 更新serverless.yml
laravel:   
 name: function-name   
 handler: public/index.php   
 timeout: 120   
 layers:   
 - {new layer ARN}