本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Laravel 应用程序部署到 Elastic Beanstalk
Laravel 是一个开源的, model-view-controller(MVC) 框架,用于。PHP本教程将引导您完成生成 Laravel 应用程序、将其部署到 AWS Elastic Beanstalk 环境以及将其配置为连接到亚马逊关系数据库服务 (AmazonRDS) 数据库实例的过程。
先决条件
本教程假设您对基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台有一定了解。如果尚不了解,请按照Elastic Beanstalk 入门中的说明操作以启动您的第一个 Elastic Beanstalk 环境。
为了遵循本指南中的步骤,您需要命令行终端或 Shell,以便运行命令。命令显示在列表中,以提示符($)和当前目录名称(如果有)开头。
~/eb-project$ this is a command
this is output
在 Linux 和 macOS 中,您可使用您首选的 Shell 和程序包管理器。在 Windows 上,你可以安装适用于 Linux 的 Windows 子系统
Laravel 6 需要 PHP 7.2 或更高版本。它还需要Laravel官方文档中服务器要求
如需 Laravel 支持和维护信息,请参阅 Laravel 官方文档中的支持策略
启动 Elastic Beanstalk 环境
使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。选择PHP平台并接受默认设置和示例代码。
启动环境(控制台)
-
对于 Platform(平台),选择与应用程序使用的语言匹配的平台和平台分支。
-
对于应用程序代码,选择示例应用程序。
-
选择复查并启动。
-
检查可用选项。选择要使用的可用选项,然后在准备就绪后选择创建应用程序。
环境创建大约需要 5 分钟,将创建以下资源:
-
EC2实例 — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (AmazonEC2) 虚拟机。
各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台都使用 Apache 或NGINX作为反向代理,它位于您的 Web 应用程序前面,向其转发请求,提供静态资产,并生成访问和错误日志。
-
实例安全组 — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的HTTP流量到达运行您的 Web 应用程序的EC2实例。默认情况下,其他端口不允许流量进入。
-
负载均衡器 – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
-
负载均衡器安全组-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自互联网的HTTP流量到达负载均衡器。默认情况下,其他端口不允许流量进入。
-
Auto Scaling 组 – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
-
Amazon S3 存储桶 – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
-
Amazon CloudWatch CloudWatch 警报 — 两个警报,用于监控您环境中实例的负载,并在负载过高或过低时触发。警报触发后,您的 Auto Scaling 组会扩展或收缩以进行响应。
-
AWS CloudFormation 堆栈 — Elastic AWS CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 AWS CloudFormation 控制台
查看的模板中定义。 -
域名-以以下形式路由到您的 Web 应用程序的域名
subdomain
.region
.elasticbeanstalk.com。域名安全
为了增强 Elastic Beanstalk 应用程序的安全性,elasticbeanstalk.co m 域已在公共后缀列表 () 中注册。PSL
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie,我们建议您使用
__Host-
带有前缀的 Cookie,以提高安全性。这种做法可以保护您的域名免受跨站请求伪造尝试 ()。CSRF要了解更多信息,请参阅 Mozilla 开发者网络中的 Set-Cookie页面。
所有这些资源都由 Elastic Beanstalk 管理。当您终止环境时,Elastic Beanstalk 会终止其包含的所有资源。
注意
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息,请参阅 将 Elastic Beanstalk 和 Amazon S3 结合使用。
安装 Laravel 并生成网站
Composer 可使用一个命令安装 Laravel 并创建工作项目:
~$ composer create-project --prefer-dist laravel/laravel eb-laravel
Composer 安装 Laravel 及其依赖项,并生成默认项目。
如果您在安装 Laravel 时遇到任何问题,请转到官方文档中的安装主题:https://laravel.com/docs/6.x。
部署您的应用程序
创建包含由 Composer 创建的文件的源包。以下命令将创建名为 laravel-default.zip
的源包。它将排除 vendor
文件夹中的文件,因为这些文件会占用大量空间并且对于将您的应用程序部署到 Elastic Beanstalk 不是必需的。
~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"
将源包上传到 Elastic Beanstalk 以将 Laravel 部署到您的环境。
部署源包
打开 Elastic Beanstalk
控制台,然后在 “区域” 列表中,选择您的。 AWS 区域 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
-
在环境概述页面上,选择 Upload and deploy(上传和部署)。
-
使用屏幕上的对话框上传源包。
-
选择 Deploy(部署)。
-
部署完成后,您可以选择URL要在新选项卡中打开网站的站点。
注意
为了进一步优化源包,请初始化一个 Git 存储库并使用 git
archive 命令创建源包。默认 Laravel 项目包含一个 .gitignore
文件,该文件指示 Git 排除 vendor
文件夹以及部署时不需要的其他文件。
配置 Composer 设置
部署完成后,点击在浏览器中URL打开你的 Laravel 应用程序:
这是什么? 默认情况下,Elastic Beanstalk 提供项目在网站根路径下的根目录。但在这种情况下,默认页面 (index.php
) 位于 public
文件夹的下一级。您可以通过添加/public
来验证这一点URL。例如,http://
。laravel
.us-east-2
.elasticbeanstalk.com/public
要在根路径中提供 Laravel 应用程序,请使用 Elastic Beanstalk 控制台为网站配置文档根目录。
配置网站的文档根目录
打开 Elastic Beanstalk
控制台,然后在 “区域” 列表中,选择您的。 AWS 区域 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
在导航窗格中,选择 Configuration(配置)。
-
在 Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。
-
对于 Document root(文档根目录),输入
/public
。 -
要保存更改,请选择页面底部的 Apply(应用)。
-
更新完成后,单击,在URL浏览器中重新打开您的网站。
到目前为止,一切正常。接下来,您将在环境中添加一个数据库,并将 Laravel 配置为连接到该数据库。
将数据库添加到环境
在您的 Elastic Beanstalk 环境中启动RDS数据库实例。你可以在 Elastic Beanstalk 上将 My SQL SQLServer、或 Postgre SQL 数据库与 Laravel 一起使用。在本示例中,我们将使用 My SQL。
将RDS数据库实例添加到您的 Elastic Beanstalk 环境中
打开 Elastic Beanstalk
控制台,然后在 “区域” 列表中,选择您的。 AWS 区域 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
在导航窗格中,选择 Configuration (配置)。
-
在 Database(数据库)配置类别中,选择 Edit(编辑)。
-
对于引擎,选择 mysql。
-
键入主 username(用户名)和 password(密码)。Elastic Beanstalk 将使用环境属性为应用程序提供这些值。
-
要保存更改,请选择页面底部的 Apply(应用)。
创建数据库实例需要大约 10 分钟。有关数据库与 Elastic Beanstalk 环境耦合的更多信息,请参阅将数据库添加到 Elastic Beanstalk 环境。
同时,您可更新源代码,以便从环境中读取连接信息。Elastic Beanstalk 使用 RDS_HOSTNAME
等环境变量提供连接详细信息,以便您可以从应用程序中访问。
Laravel 的数据库配置存储在项目代码中 database.php
文件夹下名为 config
的文件内。查找 mysql
条目并修改 host
、database
、username
和 and password
变量,以便从 Elastic Beanstalk 中读取对应的值:
例 ~/Eb-.php laravel/config/database
...
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('RDS_HOSTNAME
', '127.0.0.1'),
'port' => env('RDS_PORT
', '3306'),
'database' => env('RDS_DB_NAME
', 'forge'),
'username' => env('RDS_USERNAME
', 'forge'),
'password' => env('RDS_PASSWORD
', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
...
要验证数据库连接是否已正确配置,请向 index.php
添加代码以连接到数据库,并向默认响应添加一些代码:
例 ~/Eb-.php laravel/public/index
...
if(DB::connection()->getDatabaseName())
{
echo "Connected to database ".DB::connection()->getDatabaseName();
}
$response->send();
...
在数据库实例完成启动后,将已更新的应用程序打包并将其部署到环境。
更新 Elastic Beanstalk 环境
-
创建源包:
~/eb-laravel$
zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
打开 Elastic Beanstalk
控制台,然后在 “区域” 列表中,选择您的。 AWS 区域 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
-
选择上传和部署。
-
选择 Browse(浏览),然后上传
laravel-v2-rds.zip
。 -
选择部署。
部署应用程序的新版本花费不到 1 分钟的时间。完成部署后,再次刷新网页,以验证数据库连接成功:
清除
Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk AWS 会终止与您的环境关联的所有资源,例如EC2亚马逊实例、数据库实例、负载均衡器、安全组和警报。
从控制台终止你的 Elastic Beanstalk 环境
打开 Elastic Beanstalk
控制台,然后在 “区域” 列表中,选择您的。 AWS 区域 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
-
选择 Actions(操作),然后选择 Terminate environment(终止环境)。
-
使用屏幕上的对话框确认环境终止。
利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。
此外,您还可以终止在您的 Elastic Beanstalk 环境外部创建的数据库资源。当您终止 Amazon RDS 数据库实例时,您可以拍摄快照并稍后将数据还原到另一个实例。
终止您的RDS数据库实例
-
打开 Amazon RDS 控制台
。 -
选择 Databases(数据库)。
-
选择您的数据库实例。
-
选择操作,然后选择删除。
-
选择是否创建快照,然后选择删除。
后续步骤
有关 Laravel 的更多信息,请访问 Laravel 官方网站 laravel.com
当您继续开发应用程序时,您可能希望通过某种方式来管理环境和部署应用程序,而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。Elastic Beanstalk 命令行界面 CLI (EB easy-to-use) 提供了从命令行创建、配置应用程序并将其部署到 Elastic Beanstalk 环境的命令。
在本教程中,您使用了 Elastic Beanstalk 控制台来配置 Composer 选项。要使此配置成为应用程序源的一部分,您可以使用类似于下面的配置文件。
例 .ebextensions/composer.config
option_settings: aws:elasticbeanstalk:container:php:phpini: document_root: /public
有关更多信息,请参阅 使用配置文件 (.ebextensions) 进行高级环境自定义。
在您的 Elastic Beanstalk 环境中运行亚马逊RDS数据库实例非常适合开发和测试,但它会将数据库的生命周期与您的环境联系起来。请参阅将亚马逊RDS数据库实例添加到您的 Elastic Bean PHP stalk 环境中,浏览有关连接到在环境外运行的数据库的说明。
最后,如果您计划在生产环境中使用应用程序,则需要为环境配置自定义域名并启用HTTPS安全连接。