本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Laravel 应用程序部署到 Elastic Beanstalk
Laravel 是一种 PHP 开源模型-视图-控制器 (MVC) 框架。本教程将指导您完成生成 Laravel 应用程序、将该应用程序部署到 AWS Elastic Beanstalk 环境以及配置该应用程序以连接到 Amazon Relational Database Service(Amazon RDS)数据库实例的过程。
先决条件
本教程假设您对基本 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 平台并接受默认设置和示例代码。
启动环境(控制台)
-
使用下面的预配置链接打开 Elastic Beanstalk 控制台:console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced
-
对于 Platform(平台),选择与应用程序使用的语言匹配的平台和平台分支。
-
对于应用程序代码,选择示例应用程序。
-
选择复查并启动。
-
检查可用选项。选择要使用的可用选项,然后在准备就绪后选择创建应用程序。
环境创建大约需要 5 分钟,将创建以下资源:
-
EC2 实例 – 配置为在您选择的平台上运行 Web 应用程序的 Amazon Elastic Compute Cloud(Amazon EC2)虚拟机。
各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理,向其转发请求、提供静态资产以及生成访问和错误日志。
-
实例安全组 - 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。通过此资源,HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下,其他端口不允许流量进入。
-
负载均衡器 – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
-
负载均衡器安全组 – 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源,HTTP 流量可从 Internet 到达负载均衡器。默认情况下,其他端口不允许流量进入。
-
Auto Scaling 组 – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
-
Amazon S3 存储桶 – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
-
Amazon CloudWatch 警报 – 用于监控环境中的实例负载的两个 CloudWatch 警报,它们将在负载过高或过低时触发。警报触发后,您的 Auto Scaling 组会扩展或收缩以进行响应。
-
AWS CloudFormation 堆栈 – Elastic Beanstalk 使用 AWS CloudFormation 启动您环境中的资源并传播配置更改。这些资源在您可通过 AWS CloudFormation 控制台
查看的模板中定义。 -
域名 – 一个域名,它以下面的形式路由到您的 Web 应用程序:
subdomain
.region
.elasticbeanstalk.com。域安全
为增强 Elastic Beanstalk 应用程序的安全性,已将 elasticbeanstalk.com 域注册到 公共后缀列表(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 控制台
,然后在 Regions(区域)列表中选择您的 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 控制台
,然后在 Regions(区域)列表中选择您的 AWS 区域。 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
在导航窗格中,选择 Configuration(配置)。
-
在 Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。
-
对于 Document root(文档根目录),输入
/public
。 -
要保存更改,请选择页面底部的 Apply(应用)。
-
更新完成后,单击 URL 以在浏览器中重新打开站点。
到目前为止,一切正常。接下来,您将在环境中添加一个数据库,并将 Laravel 配置为连接到该数据库。
将数据库添加到环境
在 Elastic Beanstalk 环境中启动 RDS 数据库实例。您可在 Elastic Beanstalk 上通过 Laravel 使用 MySQL、SQLServer 或 PostgreSQL 数据库。在本示例中,我们将使用 MySQL。
将 RDS 数据库实例添加到 Elastic Beanstalk 环境
打开 Elastic Beanstalk 控制台
,然后在 Regions(区域)列表中选择您的 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-laravel/config/database.php
...
'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-laravel/public/index.php
...
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 控制台
,然后在 Regions(区域)列表中选择您的 AWS 区域。 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
-
选择上传和部署。
-
选择 Browse(浏览),然后上传
laravel-v2-rds.zip
。 -
选择部署。
部署应用程序的新版本花费不到 1 分钟的时间。完成部署后,再次刷新网页,以验证数据库连接成功:
清除
Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk 会终止与环境关联的所有 AWS 资源,例如 Amazon EC2 s实例、数据库实例、负载均衡器、安全组和警报。
从控制台终止 Elastic Beanstalk 环境
打开 Elastic Beanstalk 控制台
,然后在 Regions(区域)列表中选择您的 AWS 区域。 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
-
选择 Actions(操作),然后选择 Terminate environment(终止环境)。
-
使用屏幕上的对话框确认环境终止。
利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。
此外,您还可以终止在您的 Elastic Beanstalk 环境外部创建的数据库资源。当您终止 Amazon RDS 数据库实例时,可以拍摄快照并在以后将数据恢复到其他实例。
终止您的 RDS 数据库实例
-
打开 Amazon RDS 控制台
。 -
选择 Databases(数据库)。
-
选择您的数据库实例。
-
选择操作,然后选择删除。
-
选择是否创建快照,然后选择删除。
后续步骤
有关 Laravel 的更多信息,请访问 Laravel 官方网站 laravel.com
当您继续开发应用程序时,您可能希望通过某种方式来管理环境和部署应用程序,而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。Elastic Beanstalk 命令行界面(EB CLI)提供了易于使用的命令,这些命令可用于从命令行创建、配置应用程序并将应用程序部署到 Elastic Beanstalk 环境。
在本教程中,您使用了 Elastic Beanstalk 控制台来配置 Composer 选项。要使此配置成为应用程序源的一部分,您可以使用类似于下面的配置文件。
例 .ebextensions/composer.config
option_settings: aws:elasticbeanstalk:container:php:phpini: document_root: /public
有关更多信息,请参阅 使用配置文件 (.ebextensions) 进行高级环境自定义。
在 Elastic Beanstalk 环境中运行 Amazon RDS 数据库实例不仅适合开发和测试,还将数据库的生命周期与环境相关联。请参阅将 Amazon RDS DB 实例添加到 PHP Elastic Beanstalk 环境,浏览有关连接到在环境外运行的数据库的说明。
最后,如果计划在生产环境中使用应用程序,您会希望为环境配置自定义域名,并为安全连接启用 HTTPS。