[自荐] 一个可以自建的轻量化 Serverless 服务

查看 13|回复 0
作者:Jiubia   
为什么会有这个项目
一般情况下,最常用的还是 cloudflare Worker ,但是有些情况下我并不太期望使用 cf worker ,比如:网络环境、内网访问、临时的文件(临时配置和脚本)等
然后再出于我对 serverless 的依赖性比较高,所以决定从头撸一套  
类似的流行开源项目有 fission 、faas 等,但无一例外,基本都是基于 k8s 或 docker 的,也就是说,脚本是运行在 container(容器) 中的,这对于我来说并不太需要,再加上他们都是偏向 cli 的程序,所以主要的操作的方式是通过 cli 或 k8s api 处理,没有完整的配套 Web 界面,不过现在有 AI 了,倒也不麻烦了  
这个项目能做什么
与 cf worker 类似的云函数机制,只需要在 Worker 中编写代码,即可实现调用,省去服务部署流程  
  • 主程序运行在 Docker 中,脚本运行不依赖容器,开箱即用
  • 在 Docker 中使用 google nsjail 进行脚本环境隔离,能够最低限度的保障脚本安全和资源限制(内存、文件权限隔离)
  • 有配套的 UI 页面,创建、编辑、删除脚本通过浏览器就能完成
  • 在 AI 工具中,使用自然语言的方式创建 Worker
  • 支持 HTTP URL 路径配置、超时配置,支持 Nodejs 和 Python 两种运行环境
  • 支持 Cron 定时器调度,青龙面板的轻量化版本
  • 支持 MCP 和 Agent Skill ,你可以通过自然语言的方式来创建 Worker ,具体参考 Callit-Skill
  • 支持 kv 、db 数据库操作,实现数据持久化和跨 Worker 数据共享

    更多介绍参考 Github 项目 https://github.com/YangZxi/Callit



    如何使用
    目前只提供 Docker 方式启动
    1. 创建目录并拉取 docker-compose 文件
    mkdir callit
    wget -O docker-compose.yml https://raw.githubusercontent.com/YangZxi/Callit/refs/heads/main/docker-compose.prod.yml
    2. 设置必要的环境变量
    强烈建议将 token 设置为复杂的长密码或 UUID
    当然,你也可以不配置 ADMIN_TOKEN ,他会在每次启动时随机生成一个长密码,密码会在日志中打印
    sed -i 's|^\s*- ADMIN_TOKEN=.*|- ADMIN_TOKEN=你的 token|' docker-compose.yml
    3. 项目启动
    docker compose up -d
    # 或
    docker-compose up -d
    项目会运行在 3100 端口,后台地址为 :3100/admin
    其他事项
    [ol]
  • 项目默认不会开启 MCP 功能
    通过 WebUI -> Config ,打开 MCP Enable,并配置 MCP Token 来开启 MCP 访问
  • 如何通过 AI 来创建 Worker
    如果使用的是 ClaudeCode 、Codex 、OpenCode 、OpenClaw ,你可以直接将以下内容发给 AI 来自动安装  
    [/ol]
    Fetch and follow instructions from https://raw.githubusercontent.com/YangZxi/Callit-skill/refs/heads/main/README.md to install the skill.
    如果你使用的是 Cherry Studio 等聊天工具,请参考对应软件的 MCP 安装教程,然后在每次聊天时,指明 AI 应该 "调用 callit-mcp 工具来创建 Worker"
    如果大家对这个项目感兴趣,欢迎点个 Star 。另外我还有个图床 (Linkit) 项目在这里推荐下
    在项目使用期间,如果碰到任何问题,欢迎在评论区或 Github Issue 提出  
    已知问题
  • 由于 nsjail 和 nodejs 自带的 fetch 库有兼容性问题,目前无法在 node 环境中使用,只能使用 node-fetch@2 版本进行替代。暂时还没找到解决方案,除非不用沙箱或者 nsjail
  • 在 docker-compose 命令下,无法使用 systempaths=unconfined 权限,只能更新到 dokcer compose 或者使用 privileged: true 替代
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部