跳转至

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 工具箱(请参见 macOSLinux 的安装说明)。使用以下命令创建新应用程序,替换 app-name 为所需的应用程序名称:

vapor new app-name

该命令将显示一个交互式提示,让你配置 Vapor 项目,如果需要,你可以在此选择 Fluent 和 Postgres 。

使用 GitHub 模板

在以下列表中选择最适合你需求的模板。你可以使用 Git 将其克隆到本地,也可以使用“使用此模板”按钮创建一个 GitHub 项目。

已有的 Vapor 项目

如果你有一个现有的 Vapor 项目,请确保项目的根目录中有一个正确配置的 Dockerfile 文件;Vapor 文档中关于使用 DockerFly 文档中关于通过 Dockerfile 部署应用程序可能会对你有所帮助。

在 Fly 上启动应用

一旦你的 Vapor 项目准备就绪,就可以在 Fly 上启动它。

首先,确保你的当前目录设置为 Vapor 应用程序的根目录,并运行以下命令:

fly launch

这将启动一个交互式提示,以配置你的 Fly 应用程序设置:

  • Name: 你可以输入一个名称,或保留空白以获取自动生成的名称。
  • Region: 默认情况下,为用户当前所在区域。你可以选择使用它或列表中的任何其他区域。后期可以更改。
  • Database: 你可以要求 Fly 创建一个数据库与应用程序一起使用。如果你愿意,你始终可以使用 fly pg createfly 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 会读取你的目录中的 Dockerfilefly.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 createfly pg attach 的区别在于前者分配和配置了一个能够托管 Postgres 数据库的 Fly 应用程序,而后者则创建了一个实际的数据库和用户,以供你选择的应用程序使用。只要符合你的要求,单个 Postgres Fly 应用程序就可以托管多个由不同应用程序使用的数据库。当你在 fly launch 中请求 Fly 创建一个数据库应用程序时,Fly 会执行相当于调用 fly pg createfly 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.tomlrelease_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 文档