Skip to content

Commit 898e4ac

Browse files
committed
docs: update doc files
1 parent 1271586 commit 898e4ac

7 files changed

Lines changed: 792 additions & 91 deletions

File tree

README.md

Lines changed: 132 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,163 @@
1-
# callit
2-
1+
# Callit
2+
A lightweight self-hosted personal serverless platform based on Docker.
33
轻量级、自建、基于 Docker 的个人 Serverless 平台。
44

5+
`Callit` 允许你通过 Python 或 Node.js 编写 Worker,并通过 HTTP 路由触发执行,适合轻量 API、HTML 页面展示、个人自动化等服务。
6+
7+
<div style="width: 100%; display: flex; gap: 10px; text-align: center; padding: 20px;">
8+
<a href="#快速开始"
9+
style="padding: 8px 14px; background-color: #007bff; color: white; border-radius: 8px; text-decoration: none;"
10+
target="_blank" rel="noreferrer">
11+
Quick Start
12+
</a>
13+
<a href="./docs/README.md"
14+
style="padding: 8px 14px; background-color: #e600ff; color: white; border-radius: 8px; text-decoration: none;"
15+
target="_blank" rel="noreferrer">
16+
Documentation
17+
</a>
18+
</div>
19+
20+
## 屏幕截图
21+
![Workers Page](./docs/images/workers_page.png)
22+
![Worker Detail Page](./docs/images/workers_detail_page.png)
23+
24+
## 核心能力
25+
不依赖 Docker、Kubernetes 等容器技术,提供开箱即用的 Serverless 体验
26+
快速开发,支持热更新 Worker 函数
27+
28+
- 基于 HTTP 路由触发 Worker
29+
- 支持 Python / Node.js 运行时
30+
- 支持文件上传、文件返回、HTML 页面返回
31+
- 支持全局依赖管理
32+
- 内置 Admin 后台管理 Worker、配置和依赖
33+
34+
tips:
35+
> 如果你需要一个更成熟、功能更丰富且适用于企业级的 Serverless 平台,应该考虑 OpenFaas、Fission、AWS Lambda、Cloudflare Workers 等解决方案。`Callit` 更适合个人开发者、轻量级使用场景。
36+
37+
## 快速开始
38+
39+
### Docker Compose (推荐)
40+
41+
```yaml
42+
services:
43+
callit:
44+
image: yangzxi/callit:latest
45+
container_name: callit
46+
environment:
47+
- ADMIN_TOKEN= # 在生产环境中请设置一个强随机值
48+
# - TZ=Asia/Shanghai
49+
ports:
50+
- "3100:3100"
51+
volumes:
52+
- ./data:/app/data
53+
restart: unless-stopped
54+
```
55+
56+
启动:
57+
58+
```bash
59+
docker compose up -d
60+
```
61+
62+
启动后可访问:
63+
64+
- Router: `http://127.0.0.1:3100`
65+
- Admin: `http://127.0.0.1:3100/admin`
66+
67+
## Worker 模板
68+
69+
### Python Worker 模板
70+
71+
```python
72+
def handler(ctx):
73+
request = ctx.get("request", {})
74+
75+
return {
76+
"status": 200,
77+
"body": {
78+
"message": "Hello, Callit!",
79+
"request": request
80+
},
81+
"headers": {
82+
"Content-Type": "application/json"
83+
}
84+
}
85+
```
86+
87+
### Node Worker 模板
88+
89+
```javascript
90+
function handler(ctx) {
91+
const { request } = ctx;
92+
93+
return {
94+
status: 200,
95+
body: {
96+
message: "Hello, Callit!",
97+
request,
98+
},
99+
headers: {
100+
"Content-Type": "application/json"
101+
}
102+
};
103+
}
104+
```
105+
106+
说明:
107+
108+
- Worker 目录中必须包含 `main.py``main.js`
109+
- 主文件中必须定义 `handler(ctx)`,通过 ctx 对象获取请求信息、上下文等信息
110+
- 通过返回 JSON 结构化数据来控制 HTTP 响应的状态码、响应体和响应头
111+
- 具体文档与样例请参考 [Worker 文档](./docs/worker_introduction.md)
112+
113+
5114
## 技术栈
6115

7116
- Backend: Go + Gin
8117
- Frontend: React + Vite + HeroUI
9118
- Database: SQLite3
10119
- Runtime: Python3 / Node.js
11120

12-
## 端口
13121

14-
- Router: `3100`
15-
- Admin: `3101`
122+
## 二次开发
123+
124+
如果你需要本地修改源码、调试前端或开发后端,可按下面方式启动。
16125

17-
## 运行前准备
126+
### 1. 设置管理令牌
18127

19128
```bash
20129
export ADMIN_TOKEN=your-token
21130
```
22131

23-
## 本地运行
24-
25-
先构建前端并复制到 `/public`
132+
### 2. 启动前端
26133

27134
```bash
28135
cd pages
29-
npm run build
30-
cd ..
31-
rm -rf public/*
32-
cp -r pages/dist/* public/
136+
pnpm install
137+
pnpm run dev
33138
```
34139

35-
再启动后端:
140+
### 3. 启动后端
36141

37142
```bash
38143
go run ./cmd
39144
```
40145

41-
## Docker 运行
42-
43-
```bash
44-
docker compose up --build
45-
```
146+
默认前端端口为 `3180`
147+
默认后端端口为 `3100`
46148

47149
## 数据目录
48150

49-
- `data/app.db`
50-
- `data/workers/<worker_id>/...`
51-
- `data/temps/<request_id>/...`(请求结束自动清理)
52-
- `public`(Admin 前端构建产物目录)
151+
- `data/app.db`:SQLite 数据库
152+
- `data/workers/<worker_id>/`:Worker 文件目录
153+
- `data/temps/<request_id>/`:上传文件临时目录,请求结束后自动清理
154+
- `data/.lib/<runtime>/`:运行时全局依赖目录
155+
- `public/`:Admin 前端构建产物目录
53156

54-
## 前端开发
157+
## 常见使用场景
55158

56-
```bash
57-
cd pages
58-
pnpm run dev
59-
```
60-
61-
默认端口 `3180`,并已将 `/api` 代理到 `http://localhost:3101`
62-
63-
## 脚本标准输入(stdin)示例
64-
65-
Router 会将请求上下文序列化为 JSON,通过标准输入传给 Worker:
66-
67-
```json
68-
{
69-
"request": {
70-
"method": "POST",
71-
"uri": "/api/js?data=123&data=456",
72-
"url": "http://127.0.0.1:3100/api/js?data=123&data=456",
73-
"route_suffix": "/",
74-
"params": {
75-
// `params` 规则:
76-
// - `?data=123` -> `{"data":"123"}`
77-
// - `?data=123&data=456` -> `{"data":"456"}`(同名参数以后出现的值覆盖前值)
78-
"data": "456"
79-
},
80-
"headers": {
81-
"Content-Type": "application/json",
82-
"X-Trace": "abc"
83-
},
84-
"body": "{\"name\":\"callit\"}",
85-
"json": {
86-
"name": "callit"
87-
}
88-
},
89-
"event": {
90-
"request_id": "f3f3f1f6-8ad0-4f42-b31a-a90f9e8b2b31",
91-
"runtime": "node",
92-
"worker_id": "2bcf9922-c7d9-4d2e-a15d-b83de4ece1c6",
93-
"route": "/api/js"
94-
}
95-
}
96-
```
97-
98-
## 脚本标准输出(stdout)示例
99-
100-
Worker 必须输出合法 JSON 到标准输出:
101-
102-
```json
103-
{
104-
"status": 200,
105-
"headers": {
106-
"X-Trace": "abc"
107-
},
108-
"file": "index.html",
109-
"body": {
110-
"data": {},
111-
"message": "hello"
112-
}
113-
}
114-
```
115-
116-
说明:
117-
- `status` 可选,该值决定了 HTTP Status Code,默认 200。
118-
- `headers` 可选。
119-
- `body` 为业务响应体,支持 JSON 对象/数组,也支持字符串(例如 HTML 或纯文本)。
120-
- `file` 可选,表示 Worker 目录下的相对路径(如 `index.html``./index.html``/index.html`)。
121-
-`file``body` 都不存在,固定返回 `404`(忽略 Worker 提供的 `status``Content-Type`)。
159+
- 编写 JSON API
160+
- 上传文件后做解析或处理
161+
- 生成并返回文件
162+
- 返回 HTML 页面
163+
- 使用第三方依赖扩展 Worker 能力

docs/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# APP 配置
2+
[APP 配置](./app_config.md)
3+
- 包含环境变量配置
4+
- 包含支持数据库覆盖的 AppConfig 配置项
5+
- 包含配置优先级说明
6+
7+
# Worker 介绍
8+
[Worker 介绍](./worker_introduction.md)
9+
- 包含 Worker 目录结构、`main.xx` 入口要求、`handler(ctx)` 约定
10+
- 包含 `stdin` / `stdout` / `stderr` 说明
11+
- 包含上传文件、下载文件、返回 HTML 页面的示例
12+

docs/app_config.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# 程序配置说明
2+
3+
本文档基于 [internal/config/config.go](./internal/config/config.go) 的当前实现整理。
4+
5+
## 配置加载规则
6+
7+
程序配置分为两类:
8+
9+
- 基础运行配置:仅支持环境变量配置,不支持数据库配置。
10+
- AppConfig:支持环境变量配置,也支持数据库配置覆盖。
11+
12+
其中 AppConfig 的优先级为:
13+
14+
`数据库配置 > 环境变量 > 硬编码默认值`
15+
16+
说明:
17+
18+
- 程序启动时先加载基础运行配置。
19+
- 随后会加载 AppConfig。
20+
- 如果数据库中存在对应 key 且 value 非空,则会覆盖环境变量值。
21+
22+
## 基础运行配置
23+
24+
### `ADMIN_TOKEN`
25+
Admin 接口访问令牌。生产环境必须显式设置为高强度随机值。
26+
- 必填:是
27+
- 类型:`string`
28+
- 默认值:`123123`
29+
30+
### `SERVER_PREFIX`
31+
Admin 服务访问前缀。程序会自动保证以 `/` 开头,并去掉末尾 `/`
32+
- 类型:`string`
33+
- 默认值:`admin`
34+
- 说明:如果你希望自定义 `Admin` 后台的访问路径,可以通过设置该环境变量来实现。例如,设置 `SERVER_PREFIX=backend` 后,Admin 后台的访问地址将变为 `http://localhost:3100/backend`
35+
36+
### `SERVER_PORT`
37+
程序监听端口,Router 与 Admin 共用该端口。
38+
- 类型:`int`
39+
- 默认值:`3100`
40+
41+
### `LOG_LEVEL`
42+
日志级别。
43+
- 类型:`string`
44+
- 默认值:`info`
45+
46+
47+
## AppConfig 配置
48+
49+
以下配置项属于 AppConfig 白名单,支持数据库配置。
50+
51+
### `AI_BASE_URL`
52+
AI 服务基础地址。
53+
- 类型:`string`
54+
- 默认值:`https://api.openai.com/v1`
55+
- 数据库配置:支持数据库配置(数据库的 key: `AI_BASE_URL`
56+
57+
### `AI_API_KEY`
58+
AI 服务访问密钥。
59+
- 类型:`string`
60+
- 默认值:空字符串
61+
- 数据库配置:支持数据库配置(数据库的 key: `AI_API_KEY`
62+
63+
### `AI_MODEL`
64+
默认使用的 AI 模型名称。
65+
- 类型:`string`
66+
- 默认值:`gpt-5`
67+
- 数据库配置:支持数据库配置(数据库的 key: `AI_MODEL`
68+
69+
### `AI_MAX_CONTEXT_TOKENS`
70+
单次对话允许的最大上下文 Token 数。
71+
- 类型:`int`
72+
- 默认值:`16000`
73+
- 数据库配置:支持数据库配置(数据库的 key: `AI_MAX_CONTEXT_TOKENS`
74+
75+
### `AI_TIMEOUT_MS`
76+
AI 请求超时时间,单位毫秒。
77+
- 类型:`int`
78+
- 默认值:`60000`
79+
- 数据库配置:支持数据库配置(数据库的 key: `AI_TIMEOUT_MS`
80+
81+
## 数据库存储说明
82+
83+
支持数据库配置的项会存储在 `app_config` 表中,字段为:
84+
85+
- `key`:配置 key
86+
- `value`:配置值
87+
88+
当前仅允许写入 AppConfig 白名单中的 key,非白名单配置项不会被接受。
89+
90+
## 补充说明
91+
92+
- 基础运行配置在程序启动时读取,主要用于服务启动、目录定位、数据库初始化等核心能力。
93+
- AppConfig 主要用于运行中的应用级配置,当前主要是 AI 相关设置。
94+
- 如果数据库中某个 AppConfig key 存在但值为空,启动同步时不会覆盖环境变量或默认值。
403 KB
Loading

docs/images/workers_page.png

722 KB
Loading

0 commit comments

Comments
 (0)