从 Railway、Render 或 Vercel 导入
把现有服务迁移过来,仓库、变量、磁盘和域名都会预先填好。
如果你的应用已经运行在 Railway、Render 或 Vercel 上,就不必从头向 Cloady 描述它。只要让 Cloady 连接一次该服务商,它就会读回服务的信息 — 仓库、分支、环境变量、磁盘大小、端口、自定义域名 — 并用读到的内容预先填好 New application 卡片。
导入本身从不自行创建任何东西。它只负责填写表单;由你检查后再点击部署。
一个服务,一个应用
Cloady 每次只导入服务商的一个服务,每个服务都会成为一个 Cloady 应用。
因此,一个包含 Web 服务、后台 worker 和数据库的项目,需要导入三次,生成三个应用。这是有意为之:它与 Cloady 的部署方式一致,也让每个部分都能独立扩缩容和重启。
有一个后果值得提前规划。如果你的服务之间通过服务商生成的变量相互引用,这些引用会以导入当时的值迁移过来,并附带警告。完成最后一次导入后,打开每个应用的 Settings → Environment,把这些引用改为指向对应应用的 Cloady 地址。
开始之前
你需要该服务商的一个访问令牌。它只用于这一次导入,不会写入你的账号,也不会出现在日志中。
| 服务商 | 要创建什么 | 在哪里创建 |
|---|---|---|
| Railway | 项目令牌是权限范围最小的选择;账号令牌和工作区令牌也可以使用 | Project Settings → Tokens |
| Render | 一个 API 密钥(这类密钥作用于整个账号) | Account Settings → API Keys |
| Vercel | 一个访问令牌,最好将范围限定在一个团队,并设置有效期 | Account Settings → Tokens |
尽量使用服务商提供的权限范围最小的令牌,用完后将其吊销。Cloady 只会读取数据。
执行导入
- 打开你的工作区,点击 New application,然后选择 Import from another cloud。在工作区的 Settings → Import 中也能打开同一个表单。
- 选择 Railway、Render 或 Vercel。
- 粘贴令牌。你还可以用范围来缩小列表:一个 Railway 工作区、一个 Render 所有者 ID(
usr-或tea-),或一个 Vercel 团队。 - Cloady 会按项目分组,列出可以导入的内容。无法导入的内容也会列出来,并附上原因。
- 选择一个服务。打开的 New application 卡片已经填好了内容。
- 检查一遍 — 尤其是变量 — 然后部署。
请在三小时内完成部署。选中的服务会被临时暂存,如果三小时内一直没有部署,就会被清理掉;遇到这种情况,重新选择一次即可。
会导入哪些内容
Railway
镜像或 GitHub 仓库、变量、存储卷大小和挂载路径、端口、副本数,以及已验证的自定义域名。对于基于仓库的服务,构建命令、启动命令和根目录也会一并导入。
不会导入:密封变量(sealed variable)。Railway 从不返回这类变量,所以会把它们列出来,供你重新输入。此外,Cron 定时任务、应用休眠、健康检查、TCP 代理地址以及对同级服务的引用也不会导入。
Render
Web 服务、私有服务和 worker 服务,以及它们的环境变量、关联的环境组(env group)、磁盘、套餐和已验证的自定义域名。Postgres 和 Key Value 存储会连同凭据一起导入。
不会导入:机密文件(secret file)。每个文件都会单独列出,方便你以配置文件或机密变量的形式重新添加。此外,Cron 任务、静态网站、健康检查、预部署命令、自动扩缩容和已存储的数据也不会导入。
Vercel
关联的 GitHub 仓库、生产分支、根目录、构建和安装命令、已验证的自定义域名,以及你所选目标环境下的明文变量和加密变量。
不会导入:敏感变量(sensitive variable)。Vercel 从不返回这类变量,所以会把它们列出来,供你重新输入。此外,Serverless 和边缘函数、中间件、Cron 任务以及固定的 Node 版本也不会导入。
只有关联了 GitHub 的 Vercel 项目才能导入。关联 GitLab 或 Bitbucket 的项目、没有源代码的项目和仅通过 CLI 部署的项目也会出现在列表中,并注明无法导入的原因。
最后这一点会改变你的应用的运行方式。在 Cloady 上,Vercel 项目会变成一个由 railpack 构建的常驻服务器,而不是一组函数。buildCommand 会成为构建命令,installCommand 会成为 RAILPACK_INSTALL_CMD。如果项目是由某个框架承载的一组 API 路由,而这个框架本身也能作为服务器运行,那么通常不需要任何改动。如果项目依赖边缘中间件或按路由配置的函数,请计划把这些逻辑并入应用本身。
不会迁移任何数据
导入复制的是配置,而不是内容。存储卷、数据库和上传的文件都会留在原处。
对于 Render 的 Postgres 或 Key Value 存储,Cloady 会用相同的凭据创建对应的应用,但它一开始是空的 — 在切换流量之前,先从旧实例导出数据,再恢复到新实例中。
导入之后
有三件事是特意留给你处理的。
服务商不返回的机密值。Railway 的密封变量和 Vercel 的敏感变量任何人都无法读回,包括你自己。它们会以空行的形式出现在 Environment 下,并标注 Not readable from the provider — enter it again。请在部署前把它们填好。
Render 机密文件。每个文件都会以警告的形式列出。根据你的代码读取它的方式,把它重新添加为应用 compose 中的配置文件,或者添加为机密变量。
自定义域名。已验证的域名会显示出来,让你知道需要迁移哪些域名,但 Cloady 不会接管它们 — 否则会在迁移过程中让你的线上网站中断。等导入的应用运行起来,并且你已经通过它的 cloady.io URL 测试过之后,再在 Settings → Domains 中逐个添加这些域名,并修改 DNS 指向。
令牌和变量值如何处理
既然你要把凭据粘贴到表单里,就值得准确了解这一点。
令牌通过请求体传输,从不出现在 URL 中;它只用于那一次调用,也从不持久化保存。如果服务商返回的错误信息恰好引用了你的令牌,这段文本会先经过清理,再发送到你的浏览器。
导入时不会存储变量的值。导入会把这些值返回给你的浏览器,生成的 compose 文件只以 ${NAME} 的形式引用它们。只有在你点击部署时,它们才会被加密写入,在此之前不会写入。
每个导入的变量默认都按机密处理。只有当服务商明确标明某个变量是明文时,Cloady 才会把它标记为明文;即便如此,如果变量名看起来像凭据,或者变量值中包含内嵌凭据的 URL,它仍会保持机密状态。如果某个变量被隐藏了,而你更希望能直接看到它,之后可以在 Settings → Environment 中切换。
出现问题时
| 你看到的情况 | 含义 |
|---|---|
| 令牌被拒绝 | 令牌错误、已过期,或者没有访问该项目或团队的权限。 |
| 请求过多 | 服务商正在限流。Railway 免费套餐的令牌每小时最多允许 100 次请求;请稍后重试。 |
| 无法连接服务商 | 服务商一侧的错误。请重试;如果问题持续存在,很可能是服务商正在发生故障。 |
| 该服务已不存在 | 它在列出之后、被选中之前被删除或重命名了。请重新获取列表。 |
如果服务使用的是私有镜像仓库中的镜像,它会附带警告导入,而不会被拒绝。Cloady 无法把你的镜像仓库凭据一起带过来,因此在镜像公开或集群可以访问它之前,部署时拉取镜像会失败。