用过 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. Oracle 到 MySQL 函数替换方案汇总

    常用函数和语法转换     NVL函数 Oracle语法: NVL(COUNT(*), 0) MySQL语法: IFNULL(COUNT(*), 0)   转字符串 Oracle语法: to_char ...

  2. Spring —— 整合JUnit

    整合JUnit   

  3. QT硬件异构计算

    QT硬件异构计算 使用AI技术辅助生成 1 QT硬件异构计算概述 1.1 硬件异构计算概念 1.1.1 硬件异构计算概念 硬件异构计算概念 <QT硬件异构计算>正文 硬件异构计算概念 在进 ...

  4. Rust字符串类型全解析

    字符串是每种编程语言都绕不开的类型, 不过,在Rust中,你会看到远比其他语言更加丰富多样的字符串类型. 如下图: 为什么Rust中需要这么多种表示字符串的类型呢? 初学Rust时,可能无法理解为什么 ...

  5. PS安装插件提示无法加载扩展未正确签署 的解决办法

    PS安装插件提示无法加载扩展未正确签署解决方式 win系统: 1.打开"运行"窗口(点击电脑左下角"开始"菜单,从打开的菜单中依次点击"所有程序&qu ...

  6. VM Ware 安装mac OS xxx 系统

    1. unlock 文件破解Vm Ware 默认不能安装苹果系统 :https://drive.google.com/file/d/1_AUeYh5JYltqjnuztQh-5UTomAIVBcLZ/ ...

  7. yarn serve 不能开启vue项目 the project seem to require yarn but isnot install

    error: answer: 删除 yarn.lock 或者使用 npm run serve 替换 ; ps: yarn.lock 是锁定第三方包版本的文件:

  8. MYSQL存储过程-练习3 repeat循环

    MYSQL存储过程-练习3 repeat循环 1 DELIMITER $$ 2 3 CREATE PROCEDURE `sp_repeat`() 4 BEGIN 5 DECLARE i INT; 6 ...

  9. ASN.1 DER证书私钥的提取

    Java生成的证书在.Net里面无法导入.原因是Java导入的整个ASN.1格式的证书..Net需要设置的只是证书的密钥(公钥.私钥).无法直接使用,因此需要提取密钥. 1.查看密钥 使用lapo.i ...

  10. c语言里关于本地变量的一些规则

    关于块的定义(自己的理解):就是☞{ }这个区域里面的东西以及" {} "这个符号的本身 ·本地的变量是定义在块内的 -->>1.它可以定义在函数的块内 void sw ...