用过 Sealos 云开发的同学,想必都很熟悉函数式编程,喜欢 Sealos 云开发的那种完全不用关心路由,开发快,上线快,调试快,越用越简单越简单越用的感觉。它就像一个温柔的保姆,帮你打理好了所有的家务事 (路由、部署、调试),让你专注于写代码的快乐。

现在更强大的保姆来了,Sealos Devbox 新增了云开发框架,它不仅继承了 Laf 的优秀基因,还自带 “变形金刚” 属性 - 不依赖数据库和对象存储,还能打包成镜像到处运行。

之前使用云开发的小伙伴们,可以无缝迁移到 Devbox 云开发框架,之前怎么玩的,现在还怎么玩,几乎没有学习成本。

话不多说,直接上教程!

快速开始

Sealos Devbox 中开发云开发应用非常简单,首先进入 Sealos 桌面,然后打开 Devbox:

新建一个项目,运行环境选择 Laf,CPU 调整到 1C、内存 2G 就够了,系统会自动分配 HTTPS 域名,通过该域名即可访问 Devbox 中的 2342 端口。

选择框架后点击创建,几秒钟即可启动开发环境。

在操作选项中选择使用 Cursor 连接:

首次打开会提示安装 Devbox 插件,安装后即可自动连接开发环境。

是不是非常简单?直接省略了配置域名解析、申请 SSL 证书,配置网关等与开发无关的繁琐操作,爽!

Cursor 中的目录结构如下:

  • dist 目录是 pnpm build 的构建产物,我们无需关心
  • functions 目录是重点,所有接口函数都必须写在这里
  • 路由规则:functions 目录下的文件路径即为接口路由
    • 例如 functions/hello.ts 对应路由 /hello
    • functions/user/info.ts 对应路由 /user/info
  • 每个接口文件必须定义默认导出函数:
    • export default async function
    • export default function

这种开发体验与云开发完全一致,原汁原味,可以无缝迁移。

functions 目录自带了一个 hello world 示例接口。我们可以通过 pnpm dev 运行项目:

现在回到 Devbox 界面,进入 Laf 开发环境的详情页面:

复制外网地址,并在末尾加上 /hello 访问 (例如本文中的 https://fgatxwcjmxep.sealoshzh.site/hello):

就这么简单,一个 Hello World 接口就跑起来了!Devbox 云开发环境不仅保持了原汁原味的开发体验,还提供了更多灵活的特性:

  • FunctionCache:管理函数缓存
  • FunctionModule:管理模块缓存
  • FunctionExecutor:管理代码执行

想了解更多高级特性,欢迎访问项目仓库 https://github.com/HUAHUAI23/simple-web 查看详细文档。

进阶教程

Devbox 云开发环境虽然提供了原生的开发体验,不依赖数据库和对象存储等服务,但实际应用开发中往往需要用到这些基础设施。下面我们就来看看如何结合 Sealos 的数据库、对象存储等服务,打造一个丝滑的开发体验。

使用 MongoDB 数据库

首先需要在 Sealos 数据库服务中创建一个 MongoDB 6.0 实例。创建时需要记录以下重要信息:

  • 数据库内网连接串 (注意保护好密码,不要泄露)
  • 如果需要使用 MongoDB Compass 等专业工具连接,还需要开启数据库的外网访问

下面我们通过一个示例来演示如何使用 MongoDB。我们会把数据库客户端代码放在 functions 目录外面,因为数据库客户端、对象存储客户端、定时任务等基础设施代码不需要直接暴露为 API。

首先打开 Cursor 的终端,然后执行以下命令将 pnpm 的源替换为国内淘宝源:

pnpm config set registry https://registry.npmmirror.com

然后执行命令 pnpm install mongodb 安装 MongoDB 客户端,然后在 client 目录下创建 mongodb.ts 文件,写入 MongoDB 客户端代码。

将 uri 替换为你的数据库内网连接串

import { MongoClient } from 'mongodb'

// 生产环境切记将密码和用户 替换成从环境变量中获取,切记不要在代码中写死泄露密码
// const username = process.env.MONGO_USERNAME
// const password = process.env.MONGO_PASSWORD
// const uri = `mongodb://${username}:${password}@test-mongodb.ns-1k9qk3v6.svc:27017`
const uri = "mongodb://root:4vvt29kl@test-db-mongodb.ns-g7res18a.svc:27017" // 创建 MongoDB 客户端实例
export const client = new MongoClient(uri)

functions 目录下创建 mongodb-test.ts 文件,写入 MongoDB 测试代码。

import { FunctionContext } from 'simple-web23'
import { client } from '../client/mongodb' export default async function (ctx: FunctionContext) {
const database = client.db('test')
const collection = database.collection('test') // 创建测试数据
console.log('--- 创建测试数据 ---')
const insertResult = await collection.insertMany([
{ name: '张三', age: 25, city: '北京' },
{ name: '李四', age: 30, city: '上海' }
])
console.log('插入数据结果:', insertResult) // 查询所有数据
console.log('\\n--- 查询所有数据 ---')
const allDocs = await collection.find({}).toArray()
console.log('所有数据:', allDocs) // 查询单个数据
console.log('\\n--- 查询单个数据 ---')
const oneDoc = await collection.findOne({ name: '张三' })
console.log('查询张三的数据:', oneDoc) // 更新数据
console.log('\\n--- 更新数据 ---')
const updateResult = await collection.updateOne(
{ name: '张三' },
{ $set: { age: 26, city: '深圳' } }
)
console.log('更新结果:', updateResult) // 查看更新后的数据
const updatedDoc = await collection.findOne({ name: '张三' })
console.log('更新后的张三数据:', updatedDoc) // 删除数据
console.log('\\n--- 删除数据 ---')
const deleteResult = await collection.deleteOne({ name: '李四' })
console.log('删除结果:', deleteResult) // 最终查询所有数据
console.log('\\n--- 最终数据 ---')
const finalDocs = await collection.find({}).toArray()
console.log('最终所有数据:', finalDocs) return { message: '测试完成' }
}

一切准备 ok 后,在 Cursor 终端运行 pnpm dev 命令,然后浏览器访问 mongodb-test 接口,可以看到 MongoDB 的测试结果。

上面这些代码全是 AI 帮我写的,我只需要指挥它干活就行。

使用 Sealos 对象存储

在开始使用对象存储之前,我们需要先在 Sealos 对象存储服务中创建一个存储桶。创建过程中,请务必记录以下关键信息:

  • 访问密钥 (Access Key)
  • 密钥 (Secret Key)
  • 内外网访问地址
  • 存储桶名称

接下来,让我们一步步完成对象存储的配置和使用。

首先安装 S3 客户端依赖:

pnpm install @aws-sdk/client-s3

然后在 client 目录下创建 s3.ts 文件,写入 S3 客户端代码。

请将 s3Client 中的 region、endpoint、accessKeyId、secretAccessKey 替换为你自己的配置。

import { S3Client, ListObjectsV2Command, PutObjectCommand, _Object } from "@aws-sdk/client-s3"

// 创建 S3 客户端
// 生产环境切记将密码和用户 替换成从环境变量中获取,切记不要在代码中写死泄露密码
// const accessKeyId = process.env.S3_ACCESS_KEY_ID
// const secretAccessKey = process.env.S3_SECRET_ACCESS_KEY const s3Client = new S3Client({
region: "cn-north-1", // 例如 "ap-northeast-1"
endpoint: "http://object-storage.objectstorage-system.svc.cluster.local", // 例如 "https://s3.amazonaws.com" 或自定义endpoint
credentials: {
accessKeyId: "xxxxxxxxxx",
secretAccessKey: "xxxxxxxxxx"
},
// 如果使用自定义endpoint(比如MinIO),可能需要以下配置
forcePathStyle: true, // 强制使用路径样式而不是虚拟主机样式
}) // 列出 bucket 中的文件
async function listFiles(bucketName: string) {
try {
const command = new ListObjectsV2Command({
Bucket: bucketName,
}) const response = await s3Client.send(command) // 打印文件列表
response.Contents?.forEach((file: _Object) => {
console.log(`文件名: ${file.Key}, 大小: ${file.Size} bytes`)
}) return response.Contents
} catch (error) {
console.error("列出文件失败:", error)
throw error
}
} // 上传文件到 S3
async function uploadFile(bucketName: string, key: string, fileContent: Buffer) {
try {
const command = new PutObjectCommand({
Bucket: bucketName,
Key: key,
Body: fileContent,
}) const response = await s3Client.send(command)
console.log("文件上传成功:", response)
return response
} catch (error) {
console.error("文件上传失败:", error)
throw error
}
} export { listFiles, uploadFile }

functions 目录下创建 s3-test.ts 文件,写入 S3 测试代码。

import { FunctionContext } from 'simple-web23'
import { listFiles, uploadFile } from '../client/s3' export default async function (ctx: FunctionContext) {
const bucketName = 'ehq1gpr0-test'
const fileName = 'test.txt'
const fileContent = Buffer.from('Hello World')
await uploadFile(bucketName, fileName, fileContent)
await listFiles(bucketName)
return 'success'
}

请将 bucketName 替换为你自己的存储桶名称。

一切准备就绪后,在 Cursor 终端运行 pnpm dev 命令,然后浏览器访问 s3-test 接口,便可以看到对象存储的测试结果。

上面的代码也全是 AI 帮我写的。

完整的代码请访问 https://github.com/HUAHUAI23/simple-web-demo 查看。

结语

Sealos 非常强大,除了我们刚刚体验的数据库和对象存储服务,它还提供了丰富的应用生态和中间件支持。通过 Devbox 云开发环境,你可以轻松地将这些服务无缝对接,打造一个完整的开发链路。

不论是快速开发原型,还是构建生产级应用,Sealos 都能为你提供顺畅的开发体验。

去吧骚年,去用 Sealos Devbox 构建属于你的精彩应用,加油,你们是最胖的!

Sealos Devbox 云开发框架使用教程的更多相关文章

  1. CRL快速开发框架系列教程十三(嵌套查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. CRL快速开发框架系列教程六(分布式缓存解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. CRL快速开发框架系列教程五(使用缓存)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  10. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. 教你一招,测试人员如何通过AI提高工作效率!

    伴随着AI技术的兴起,像OpenAI推出的ChatGPT.Microsoft发布的Microsoft 365 Copilot.阿里的通义千问.百度的文心一言.华为的盘古大模型等.很多测试人员开始担心, ...

  2. async/await和Grand Central Dispatch代码切换

    很多iOS开发开始学习结构化并发时已经用过了很多年Grand Central Dispatch,虽然从思想上二者区别很大,但是利用熟悉的东西去理解新的事物有助于提升学习理解的效率,接下来是这Grand ...

  3. 【赵渝强老师】Redis的消息发布与订阅

    Redis 作为一个publish/subscribe server,起到了消息路由的功能.订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型 ...

  4. vsphere8.0 VCenter部署

    一.vCenter Server 介绍 vCenter Server是VMware提供的一种集中管理平台,用于管理和监控虚拟化环境中的虚拟机.主机.存储和网络等资源.它提供了一套功能强大的工具和界面, ...

  5. MySQL9的3个新特性

    本文讲解MySQL9的3个新特性:支持将JSON输出保存到用户变量.支持准备语句以及支持面向AI的向量存储. 17.12  MySQL9新特性1--支持将JSON输出保存到用户变量 从MySQL 9版 ...

  6. eUSB是什么/可以干什么?

    eUSB总结 1.什么是eUSB 1.1 eUSB概念 eUSB是原USB物理层上的补充,为了解决USB_phy低压需求的问题而出现的,eUSB可以将信号电平降至1.2V甚至更低,与此同时可以优化电源 ...

  7. 2022年7月中国数据库排行榜:墨天轮榜单榜眼易主,PolarDB得分涨幅最大

    信创元年,后起之秀,大有可为.2022年7月的 墨天轮中国数据库流行度排行榜 风起云涌,本月排行榜共有232个数据库参与排名,相比上月,新增 ShuangzhaoDB 数据库.榜单前十名的唯一变化是达 ...

  8. document.designMode 设计模式

    document.designMode 的默认值是 off 关闭: 在控制台输入 document.designMode = 'on' 就可以编辑页面内容:

  9. C # 的 IsNullOrEmpty

    作用:判断字符串是否是 null 或者 "" 如果是 null or "" 就返回 true IsNullOrEmpty是判断字符串的Null值和"& ...

  10. vuex 的modules 子模块总结