Fly¶
Fly 是一个托管平台,支持运行服务器应用程序和数据库,专注于边缘计算。更多信息请参阅官网。
注意
本文档指定的命令受 Fly 价格约束,继续之前确保你已经了解它。
注册¶
如果你没有账号,你需要注册一个。
安装 flyctl¶
你与 Fly 的主要交互方式是使用专用的 CLI 工具 flyctl
,你需要安装该工具。
macOS¶
brew install flyctl
Linux¶
curl -L https://fly.io/install.sh | sh
其它安装选项¶
有关更多选项和详细信息,请参阅 flyctl 文档。
登录¶
通过终端登录,运行如下命令:
fly auth login
配置你的 Vapor 项目¶
在部署到 Fly 之前,确保你的 Vapor 项目包含一个配置好的 Dockerfile 文件。因为 Fly 需要使用它来构建你的应用程序。在大多数情况下,这很容易,因为默认的 Vapor 模板已经包含了一个 Dockerfile 文件 。
创建新的 Vapor 项目¶
创建新项目的最简单方式是使用模板。你可以使用 GitHub 模板或 Vapor 工具箱创建模板。如果你需要一个数据库,推荐使用 Fluent 和 Postgres;Fly 可以轻松创建一个 Postgres 数据库,以便连接你的应用程序(请参阅下面的具体章节)。
使用 Vapor 工具箱¶
首先,确保你已安装了 Vapor 工具箱(请参见 macOS 或 Linux 的安装说明)。使用以下命令创建新应用程序,替换 app-name
为所需的应用程序名称:
vapor new app-name
该命令将显示一个交互式提示,让你配置 Vapor 项目,如果需要,你可以在此选择 Fluent 和 Postgres 。
使用 GitHub 模板¶
在以下列表中选择最适合你需求的模板。你可以使用 Git 将其克隆到本地,也可以使用“使用此模板”按钮创建一个 GitHub 项目。
已有的 Vapor 项目¶
如果你有一个现有的 Vapor 项目,请确保项目的根目录中有一个正确配置的 Dockerfile
文件;Vapor 文档中关于使用 Docker 和 Fly 文档中关于通过 Dockerfile 部署应用程序可能会对你有所帮助。
在 Fly 上启动应用¶
一旦你的 Vapor 项目准备就绪,就可以在 Fly 上启动它。
首先,确保你的当前目录设置为 Vapor 应用程序的根目录,并运行以下命令:
fly launch
这将启动一个交互式提示,以配置你的 Fly 应用程序设置:
- Name: 你可以输入一个名称,或保留空白以获取自动生成的名称。
- Region: 默认情况下,为用户当前所在区域。你可以选择使用它或列表中的任何其他区域。后期可以更改。
- Database: 你可以要求 Fly 创建一个数据库与应用程序一起使用。如果你愿意,你始终可以使用
fly pg create
和fly pg attach
命令进行相同的操作(详细信息,请参阅配置 Postgres 部分。
fly launch
命令会自动创建一个 fly.toml
文件。它包含私有/公共端口映射、健康检查参数等设置。如果你刚刚使用 vapor new
从头开始创建了一个新项目,则默认的 fly.toml
文件不需要更改。如果你有一个现有的项目,则 fly.toml
可能只需要进行轻微的更改。你可以在 fly.toml 文档中找到更多信息。
请注意,如果你请求 Fly 创建一个数据库,则必须等待一段时间才能创建并通过健康检查。
在退出之前,fly launch
命令将询问你是否要立即部署应用程序。你可以接受或稍后使用 fly deploy
进行部署。
建议
当前目录在你的应用程序根目录中时,fly CLI 工具会自动检测到 fly.toml
文件的存在,从而让 Fly 知道命令作用于哪个应用程序。如果你想无论在哪个目录都能针对特定的应用程序,请在大多数 Fly 命令后面附加 -a 你的应用程序名称
。
部署¶
每当你部署新更改到 Fly 时,运行 fly deploy
命令。
Fly 会读取你的目录中的 Dockerfile
和 fly.toml
文件来确定如何构建和运行你的 Vapor 项目。
一旦你的容器构建完成,Fly 会启动一个实例。它将运行各种健康检查,确保你的应用程序正常运行并且你的服务器响应请求。如果健康检查失败,fly deploy
命令将退出并显示错误消息。
默认情况下,如果新版本健康检查失败,Fly 会回滚到最新的可用版本。
配置 Postgres¶
在 Fly 上创建一个 Postgres 数据库¶
如果你在第一次启动应用时没有创建数据库应用,你可以使用以下命令创建:
fly pg create
这个命令创建了一个 Fly 应用程序,可以为其他 Fly 上的应用程序提供数据库服务,详情请参阅 Fly 文档。
创建完数据库应用之后,进入你的 Vapor 应用程序的根目录,运行以下命令:
fly pg attach name-of-your-postgres-app
如果你不知道你的 Postgres 应用程序的名称,可以使用 fly pg list
命令查找。
fly pg attach
命令创建了一个数据库和一个专门针对你的应用程序的用户,然后通过 DATABASE_URL
环境变量将其暴露给你的应用程序。
注意
fly pg create
和 fly pg attach
的区别在于前者分配和配置了一个能够托管 Postgres 数据库的 Fly 应用程序,而后者则创建了一个实际的数据库和用户,以供你选择的应用程序使用。只要符合你的要求,单个 Postgres Fly 应用程序就可以托管多个由不同应用程序使用的数据库。当你在 fly launch
中请求 Fly 创建一个数据库应用程序时,Fly 会执行相当于调用 fly pg create
和 fly pg attach
两个命令的操作。
连接 Vapor 应用程序到数据库¶
一旦你的应用程序已连接到数据库,Fly 会将 DATABASE_URL
环境变量设置为包含你的凭据的连接 URL(它应该被视为敏感信息)。
对于大多数常见的 Vapor 项目设置,你可以在 configure.swift
文件中配置你的数据库。下面是你可能想要执行的操作:
if let databaseURL = Environment.get("DATABASE_URL") {
try app.databases.use(.postgres(url: databaseURL), as: .psql)
} else {
// 在这里处理缺少 DATABASE_URL 的情况...
//
// 或者,你也可以根据 app.environment 是否设置为 .development 或 .production 来设置不同的配置
}
此时,你的项目应该已准备好运行迁移并使用数据库了。
运行迁移¶
使用 fly.toml
的 release_command
,可以要求 Fly 在运行主服务器进程之前运行某个命令。将其添加到 fly.toml
中:
[deploy]
release_command = "migrate -y"
注意
上面的代码片段假设你正在使用默认的 Vapor Dockerfile,该文件将你的应用程序 ENTRYPOINT
设置为 ./App
。具体来说,这意味着当你将 release_command
设置为 migrate -y
时,Fly 将调用 ./App migrate -y
。如果你的 ENTRYPOINT
设置为其他值,则需要调整 release_command
的值。
Fly 将在具有访问 Fly 内部网络、密钥和环境变量的临时实例中运行你的发布命令。
如果你的发布命令失败,部署将无法继续。
其他数据库¶
虽然 Fly 使创建 Postgres 数据库应用程序变得容易,但也可以托管其他类型的数据库(例如,请参阅 Fly 文档中的 ”使用 MySQL 数据库“)。
密钥和环境变量¶
密钥¶
使用密钥将任何敏感值设置为环境变量。
fly secrets set MYSECRET=A_SUPER_SECRET_VALUE
警告
请注意,大多数 shell 都会保留你输入的命令历史记录。在使用此方式设置密钥时要注意。某些 shell 可以配置为不记录以空格为前缀的命令。请参阅 fly secrets import
命令的文档。
更多信息,请参阅 fly secrets
文档 。
环境变量¶
你可以在 fly.toml
中设置其他非敏感的环境变量,例如:
[env]
MAX_API_RETRY_COUNT = "3"
SMS_LOG_LEVEL = "error"
SSH连接¶
你可以使用以下方式连接到应用实例:
fly ssh console -s
查看日志¶
你可以使用以下命令查看应用程序的实时日志:
fly logs
下一步¶
现在,你的 Vapor 应用已经部署完成,你可以进行更多操作,例如在多个区域垂直和水平扩展你的应用程序、添加持久卷、设置持续部署,甚至创建分布式应用程序集群。学习如何执行这些操作的最好地方是查看 Fly 文档。