V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Jiubia

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

  •  
  •   Jiubia · 4 天前 · 749 次点击

    为什么会有这个项目

    一般情况下,最常用的还是 cloudflare Worker ,但是有些情况下我并不太期望使用 cf worker ,比如:网络环境、内网访问、临时的文件(临时配置和脚本)等
    然后再出于我对 serverless 的依赖性比较高,所以决定从头撸一套

    类似的流行开源项目有 fission 、faas 等,但无一例外,基本都是基于 k8s 或 docker 的,也就是说,脚本是运行在 container(容器) 中的,这对于我来说并不太需要,再加上他们都是偏向 cli 的程序,所以主要的操作的方式是通过 cli 或 k8s api 处理,没有完整的配套 Web 界面,不过现在有 AI 了,倒也不麻烦了

    这个项目能做什么

    与 cf worker 类似的云函数机制,只需要在 Worker 中编写代码,即可实现调用,省去服务部署流程

    • 主程序运行在 Docker 中,脚本运行不依赖容器,开箱即用
    • 在 Docker 中使用 google nsjail 进行脚本环境隔离,能够最低限度的保障脚本安全和资源限制(内存、文件权限隔离)
    • 有配套的 UI 页面,创建、编辑、删除脚本通过浏览器就能完成
    • 支持 HTTP URL 路径配置、超时配置,支持 Nodejs 和 Python 两种运行环境
    • 支持 Cron 定时器调度,类似青龙面板的轻量化版本
    • 支持 MCP 和 Agent Skill ,你可以通过自然语言的方式来创建 Worker ,具体参考 Callit-Skill
    • 支持 kv 、db 数据库操作,实现数据持久化和跨 Worker 数据共享

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

    home1 detail1 edit

    如何使用

    目前只提供 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 端口,后台地址为 <host>:3100/admin

    其他事项

    1. 项目默认不会开启 MCP 功能
      通过 WebUI -> Config ,打开 MCP Enable,并配置 MCP Token 来开启 MCP 访问
    2. 如何通过 AI 来创建 Worker 如果使用的是 ClaudeCode 、Codex 、OpenCode 、OpenClaw ,你可以直接将以下内容发给 AI 来自动安装
    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 替代
    5 条回复    2026-04-14 10:18:10 +08:00
    Jiubia
        1
    Jiubia  
    OP
       4 天前
    不得不感慨,现在 AI 真强大,去年初就想开的坑,但是迫于麻烦就一直没搞,今年断断续续花了一个月时间, 就完成了一个能稳定使用的版本
    ixoy
        2
    ixoy  
       4 天前
    之前也有同样的想法,支持单机自建,直连本地数据库/存储,简单配置。

    概念上 serverless 绑定可伸缩容器。

    奈何 AWS 官方 serverless 框架一开始就要绑定平台账号,相当无语,直接劝退。

    后来也发现单机的 workers 类似提供一套可注册的 controllers 。

    但对于小项目而言,喜欢的是这套服务管理框架,能快捷调用。若后续业务增长,可快速移植扩容。
    lolo1
        3
    lolo1  
       4 天前
    真厉害,以前见过好多类似开源的,光 yaml 文件就快几百行了,太笨重。感谢感谢~
    Jiubia
        4
    Jiubia  
    OP
       4 天前
    @ixoy 这个确实,之前公司就是直接在 AWS 控制台管理 lambda ,很不方便。不过现在有一个项目支持你说的这个场景了 https://github.com/Serverless-Devs/Serverless-Devs
    jukanntenn
        5
    jukanntenn  
       4 天前
    感谢开源!
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2851 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 09:06 · PVG 17:06 · LAX 02:06 · JFK 05:06
    ♥ Do have faith in what you're doing.