Vapor 允许您直接从 Vapor UI 或使用 Vapor CLI 轻松创建和管理 RDS 和 Aurora Serverless 数据库。数据库备份会自动执行,您可以在备份保留窗口内将数据库恢复到任何时间点(精确到秒)。
您可以使用 Vapor UI 或使用 database
CLI 命令创建数据库。使用 CLI 命令时,该命令会提示您提供有关数据库的更多详细信息,例如其所需的性能等级和最大存储空间。
vapor database my-application-db
Vapor 会在您创建的每个数据库实例中自动创建一个名为“vapor”的数据库。您可以使用您选择的数据库管理工具创建其他数据库。
创建 Vapor 数据库时,您可以从两种不同类型的数据库中选择:固定大小数据库和自动扩展无服务器数据库。
固定大小数据库是 RDS MySQL 5.7 / RDS MySQL 8 / Postgres 13 数据库,具有固定数量的 RAM 和磁盘空间。这些数据库可以在创建后进行扩展或缩减,但不会在没有停机的情况下进行。
此外,这些数据库可以公开访问(使用 Vapor 自动分配的随机长密码)或私有。私有数据库通常无法从公共互联网访问。要从本地机器访问它们,您需要创建一个 Vapor 跳转服务器。
私有数据库
Vapor 会将使用私有数据库的任何应用程序放置在具有 NAT 网关 的网络中。 之后,如果您不再打算使用该数据库,并且您的应用程序没有使用任何其他私有资源,则可以通过网络管理屏幕从您的网络中删除 NAT 网关。
无服务器数据库是自动扩展的 Aurora MySQL 5.7 / MySQL 8.0 / Postgres 10 / Postgres 14 数据库,它们没有固定的 RAM 或磁盘空间量。 相反,这些数据库会根据您的应用程序的需求自动扩展。 在其最小规模时,它们将分配 1GB 的 RAM。
无服务器数据库
AWS 要求所有无服务器数据库都必须是私有的,这意味着 Vapor 会将使用它们的任何应用程序放置在具有 NAT 网关 的网络中。 如果您不再打算使用无服务器数据库,并且您的应用程序没有使用任何其他私有资源,则可以通过网络管理屏幕从您的网络中删除 NAT 网关。
要快速创建最小性能级别的公开可访问数据库,您可以在创建数据库时使用 --dev
标志。 这些小型且经济实惠的数据库非常适合测试或暂存环境。
vapor database my-test-database --dev
要将数据库附加到环境,请在您的 vapor.yml
文件中将 database
键添加到环境的配置中,然后部署您的应用程序。 此键的值应为数据库的名称。 当环境部署时,Vapor 会自动注入连接到数据库所需的 Laravel 环境变量,使您的应用程序能够立即开始使用它:
id: 3
name: vapor-app
environments:
production:
database: my-application-db
build:
- 'composer install --no-dev'
deploy:
- 'php artisan migrate --force'
如果您想从本地机器连接到您的私有数据库,您可以使用 Vapor 跳板机 结合 GUI 数据库管理工具或使用 database:shell
CLI 命令。跳板机是放置在您的私有网络中的非常小的、可通过 SSH 访问的服务器。
创建跳板机后,您可以配置您的数据库管理工具,通过跳板机 SSH 连接连接到您的数据库。
配置跳板机后,您可以使用 database:shell
命令快速访问命令行数据库 shell,该 shell 允许您与您的数据库交互。
vapor database:shell my-application-db
如果您想使用未由 Vapor 创建的 RDS 数据库,您有两个选择。
将现有数据库的内容导出并导入到 Vapor 创建的新数据库中。我们建议您使用这种方法,因为它允许您在由 Vapor 管理的数据库和网络中使用您的现有数据。
将您的现有数据库连接到 Vapor 环境。
如果您的现有数据库是公开可访问的,请确保您的 Vapor 项目是在与数据库相同的区域创建的。如果现有数据库是私有的,您需要将您的 Vapor 环境连接到您的现有数据库所属的 VPC。您可以在我们的文档中找到有关如何连接到 自定义 VPC 的说明。
连接现有数据库后,您需要配置相应的环境变量。
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
使用 AWS RDS MySQL 固定大小数据库时,需要一个额外的环境变量来指定 SSL 证书颁发机构。
MYSQL_ATTR_SSL_CA=/var/task/rds-combined-ca-bundle.pem
如果您的数据库由 PlanetScale 托管,SSL 证书颁发机构如下所示。
MYSQL_ATTR_SSL_CA=/opt/lib/curl/cert.pem
即使您的无服务器 Laravel 应用程序在 Vapor 上运行可以处理大量的网络流量,传统的关联数据库(如 MySQL)也可能因连接限制而不堪重负并崩溃。为了解决这个问题,您可以使用 RDS 代理来有效地管理您的数据库连接,并允许比通常情况下更多的连接。
可以通过 Vapor UI 或 database:proxy
CLI 命令添加数据库代理。
vapor database:proxy my-application-db
接下来,您可以使用 vapor.yml
文件中的 database-proxy
配置选项指示环境使用与数据库关联的代理。
id: 3
name: vapor-app
environments:
production:
database: my-application-db
database-proxy: true
build:
- 'composer install --no-dev'
deploy:
- 'php artisan migrate --force'
您可以随时使用 Vapor UI 或 database:delete-proxy
CLI 命令删除代理。在删除代理之前,请确保没有应用程序使用关联的代理。
vapor database:delete-proxy my-application-db
限制
在考虑在 Vapor 中使用数据库代理之前,请参阅 Amazon 的 限制列表。
创建数据库时,Vapor 会创建一个名为“vapor”的超级用户。您可以使用 Vapor UI 或 database:user
CLI 命令创建其他数据库用户,这些用户将自动分配一个安全的随机密码。
vapor database:user my-application-db user-2
您可以使用 vapor.yml
文件中的 database-user
配置选项指示环境以给定用户身份连接到数据库。
id: 3
name: vapor-app
environments:
production:
database: my-application-db
database-user: user-2
build:
- 'composer install --no-dev'
deploy:
- 'php artisan migrate --force'
数据库密码轮换
您可以使用 database:password
CLI 命令轮换数据库的密码。或者,您可以利用用户在不停止服务的情况下“轮换”数据库的密码,方法是创建一个新用户,更新环境以使用该用户,部署环境,然后删除旧的数据库用户。
您可以通过 Vapor UI 的数据库详细信息屏幕或 database:scale
CLI 命令扩展固定大小的数据库。扩展固定大小的数据库时,数据库将不可用,扩展数据库所需的时间可能因数据库的大小而异。因此,您应该在开始扩展操作之前将应用程序置于维护模式。
vapor database:scale my-application-db
Vapor 数据库备份会自动执行,您可以将数据库恢复到数据库备份保留期内的任何时间点,默认情况下为三天。您可以随时通过 Vapor UI 的数据库详细信息屏幕更改数据库备份保留期。
可以通过 Vapor UI 或 database:restore
CLI 命令启动数据库恢复。
vapor database:restore current-database-name new-database-name
恢复数据库时,会创建一个与先前数据库具有相同配置的新数据库。然后,先前数据库的内容将恢复到新数据库,就像您选择的精确时间点一样。要将恢复的数据库附加到环境,请更新 vapor.yml
文件中 database
键的值,然后部署环境。
对数据库恢复感到满意后,您可以删除旧数据库。
您可以通过 Vapor UI 或 `database:upgrade` CLI 命令升级 Vapor 管理的 MySQL 数据库。升级数据库时,会创建一个与原始数据库具有相同配置和凭据的新数据库。
vapor database:upgrade current-database-name new-database-name
请记住,主要版本升级可能包含与现有应用程序不向后兼容的数据库更改。因此,我们建议您在将升级后的新数据库版本附加到生产环境之前,对其进行彻底测试。原始数据库在任何时候都不会受到此操作的影响。
升级数据库对于大型数据库可能需要几个小时。因此,如果您计划将新数据库附加到生产环境,您可能需要先将任何受影响的环境置于维护模式。新升级的数据库可用后,您可以通过将其附加到环境来开始使用它。
当然,一旦您对数据库升级感到满意,您就可以删除原始数据库。
您可以通过 Vapor UI 的数据库详细信息屏幕或使用 `database:metrics` CLI 命令获取各种数据库性能指标。
vapor database:metrics my-application-db
vapor database:metrics my-application-db 5m
vapor database:metrics my-application-db 30m
vapor database:metrics my-application-db 1h
vapor database:metrics my-application-db 8h
vapor database:metrics my-application-db 1d
vapor database:metrics my-application-db 3d
vapor database:metrics my-application-db 7d
vapor database:metrics my-application-db 1M
您可以使用 Vapor UI 为所有数据库指标配置警报。当警报的配置阈值被打破以及警报恢复时,这些警报将通过您选择的通知方式通知您。
可以通过 Vapor UI 或使用 `database:delete` CLI 命令删除数据库。删除数据库后,无法恢复,因此在删除数据库之前请格外小心。
vapor database:delete my-application-db