一键将 Laf 迁移到 Sealos 云开发(Sealaf),有手就行!
Laf 云开发最近已正式与 Sealos 融合,成为 Sealos 云开发(Sealaf),Sealaf 继承了 Laf 的核心功能,默认配置专用数据库,拥有更好的稳定性,未来我们会将迭代重心转向 Sealaf,强烈建议将 Laf 上的应用立刻迁移至 Sealaf!
为什么要迁移?
可联动丰富应用生态:Sealos 应用市场中有丰富的应用,这些应用都可一键部署、开箱即用。可以在云函数中直接内网调用这些应用提供的能力,一站式满足你的业务!
更多的数据库和中间件选择:过去的 Laf 提供的云数据库只有 MongoDB,如今可直接在 Sealos 上一键启动 PostgreSQL、MySQL、Redis、Kafka、ElasticSearch 等各种数据库和中间件,并直接内网调用。
统一账户:以前用户需要分别在 Laf 和 Sealos 注册账户,现在无需分别注册和充值,统一使用 Sealos 账户和账单(余额转移可联系客服)。
管理更灵活:以前用户无法单独管理 Laf 创建的云数据库,比如备份、日志、观测、导入导出等操作,现在 Sealos 云开发上创建的数据库,可以通过 Sealos 数据库管理应用直接管理和监控,也可使用本地的数据库管理工具直接连接。
多区域选择:在 Sealos 上目前支持杭州、北京、广州、新加坡等可用区,以满足不同业务的需要,在一个 Sealos 账户下充值,可跨多个区域使用。
迁移内容
Laf 迁移包含以下多块内容,我们可以使用 laf-cli 快速完成迁移:
- 云函数
- 云存储
- 数据库
- 触发器
- 环境变量
- 函数依赖
- 自定义域名
- 网站托管
迁移步骤
1. 分别在 laf 和 sealaf 创建 PAT
关于 laf-cli 的详细使用方法请参考 laf-cli 文档
2. 下载 cli 并初始化用户
npm install -g laf-cli
laf user add laf -r https://laf.run
# 填入对应可用区的 api url
laf user add sealaf-hzh -r https://sealaf-api.hzh.sealos.run
laf user switch laf
# <PAT> 替换为刚刚创建的 PAT
laf login <PAT>
laf user switch sealaf-hzh
laf login <PAT>
Sealos 不同可用区 Sealaf 对应的 api 地址如下:
- 新加坡:https://sealaf-api.cloud.sealos.io
- 广州:https://sealaf-api.gzg.sealos.run
- 杭州:https://sealaf-api.hzh.sealos.run
- 北京:https://sealaf-api.bja.sealos.run
3. 拉取原应用数据
APPID="" # laf 上的 appid
mkdir $APPID && cd $APPID
laf user swicth laf
laf app init $APPID
# 拉取云存储、环境变量、依赖
laf func pull
laf env pull
laf dep pull
# 列出存储
laf storage list
# 依次拉取存储到指定目录
laf storage pull <bucketName> <path>
# 拉取数据库
laf database export ./db
# 删除 .app.yaml 以便重新 init 新应用
rm .app.yaml
4. 推送数据到新应用
NEW_APPID=""
laf user swicth sealaf-hzh
laf app init $NEW_APPID
laf func push
laf env push
laf dep push
# 需要先在 sealos 对象存储上手动创建桶
laf storage push <bucketName> <path>
# 导入数据库
laf database import $APPID ./db/xxx.gz
rm .app.yaml
5. 重启应用
重启以确保环境变量等生效
6. (可选)手动创建触发器、自定义域名
- 方式一:使用 laf-cli 创建触发器
# 列出触发器
laf trigger list
# 创建
laf create <name> <target> <cron>
- 方式二:在 Sealaf 界面直接创建触发器
7. (可选)在 sealos 对象存储开启网站托管
8. (可选)cloud.storage.bucket
变更
如果原应用代码中使用了 cloud.storage.bucket(bucketName)
,需要在新应用中手动修改为新的 bucket 名称(注意:现在必须填完整桶名)