内容
# 简单托管
**只需一句话即可将一个真正的网站部署到您的编码代理 — 每个网站都免费附带一个小后端。**
**实时:** https://simple-host.app · **适用于您的代理:** [`/llms.txt`](https://simple-host.app/llms.txt) · **API:** [`/openapi.yaml`](https://simple-host.app/openapi.yaml)
---
## 想法
托管静态网站是一个已经解决的问题。没有人让 **简单** 成为几乎每个网站都需要的一点后端。
看看人们实际构建的网站:一个作品集、一个婚宴回复页面、一个社区投票、一个班级项目、一个收集电子邮件的登陆页面、一个侧项目的留言簿。大多数网站 — 称为百分之九十几的普通网站 — 都是静态页面,带有 **一丝动态行为**:保存回复、计算投票、追加到留言簿、记住偏好。
今天,这一丝动态行为的成本异常高昂。要存储一个简单的回复列表,您需要建立一个单独的后端服务、运行一个数据库、注册一个域名,并将环境变量穿过构建管道。后端最终比它所服务的网站还要复杂。
**Simple Host 将两部分合并成一个小二进制文件。** 静态托管 **和** 一个轻量级、每个站点的数据存储 — 比 Supabase 更轻,没有模式,没有单独的服务 — 在同一个上传中。您的代理将 HTML 和数据层一起发送,网站在 `https://yourname.simple-host.app` 上线,一切都正常运行。
而且因为它保持小巧,所以运行也很小。Simple Host 在一个盒子上为所有网站提供服务 — **1 个 CPU 和 1 GB RAM** — 没有 CDN,没有对象存储,没有编排。一个二进制文件,一个 Postgres,一个磁盘文件夹。大多数人们需要的网站,都托管在您可能忘记在办公桌下的硬件上。
## 开始使用
您不需要手动部署。您告诉您的编码代理,它使用 Simple Host 技能来完成其余部分。
如果您在 GitHub 上找到此内容,您很可能已经有一个代理 — Claude Code、Cursor、Codex、opencode 等。只需安装一次技能:
```bash
npx skills add vineetu/simple-host
```
在 Claude Code 上,您还可以通过集成的市场安装:
```bash
/plugin marketplace add vineetu/simple-host
/plugin install website-deploy@simple-host
```
使用 **Hermes** 或 **OpenClaw**?技能是普通的 `SKILL.md`,因此它们也可以原生安装 — 例如 Hermes:`hermes skills install https://simple-host.app/skills/website-deploy/SKILL.md --name website-deploy`。每个代理的路径都在 [开始使用页面](https://simple-host.app/install.html) 上。
然后只需与您的代理对话:
> *"为我创建一个婚宴回复页面并部署。"*
> *"部署这个文件夹。"*
> *"在我的网站上添加一个留言簿。"*
它为您注册(魔术链接电子邮件 → API 密钥),构建网站,如果页面需要,连接状态并部署。无需终端,无需仪表板,无需配置文件。
**在网络上?** ChatGPT、Gemini 和 Copilot 也能做到 — 将 [simple-host.app/llms.txt](https://simple-host.app/llms.txt) 粘贴到聊天中,描述您想要的,它为您提供一个网站来发布。或者在 [simple-host.app](https://simple-host.app) 上使用 **使用 AI 构建** 聊天,它为您构建并预览一个网站。
## 您获得的功能
- **一键部署** — 上传一个文件夹,获得一个实时 `https://{name}.simple-host.app`。每次部署都是一个新的不可变版本;可以立即回滚。
- **免费的小后端** — 每个站点的 JSON 状态,具有原子操作(设置 / 增量 / 追加),以及用于留言簿、注册和提交的仅追加集合。无需模式,无需自己运行数据库。
- **即插即用的小部件** — 线程评论和反馈按钮,每个都只需一个脚本标签,与主题感知。
- **私人页面** — 为任何网站添加密码保护,背后是一个签名 Cookie 门控。
- **启动模板** — RSVP、等待列表、登陆页面、简历等,准备好填写。
- **使用 AI 构建** — 首页上的聊天,设计、预览和发布网站为您。
- **魔术链接身份验证** — 使用电子邮件注册,获得 API 密钥。就是这样。
## 它是如何工作的
三个组成部分,您可以同时理解它们:
1. 一个单独的 **Go 二进制文件** 为每个网站提供静态文件 **和** 暴露 REST API。
2. 一个 **Postgres** 跟踪用户、网站和版本。
3. 磁盘上的一个 **文件夹** 存放版本化的网站文件。
通配符 DNS 记录指向 `*.simple-host.app` 到二进制文件,它将每个子域映射到其文件夹中。这就是整个系统 — 没有对象存储,没有 CDN,没有构建农场,这就是为什么它能适应 1 GB 的盒子。每个站点的数据库存储在文件旁边,并进行源检查,因此只有网站自己的子域才能从浏览器读取或写入其数据。
## 运行您自己的
```bash
# 1. Postgres
docker run -d --name simple-host-postgres -p 5432:5432 \
-e POSTGRES_USER=simplehost -e POSTGRES_PASSWORD=simplehost -e POSTGRES_DB=simplehost \
postgres:16-alpine
# 2. 模式(一次性)
docker exec -i simple-host-postgres psql -U simplehost -d simplehost < db/schema.sql
# 3. 运行
DB_DSN='postgres://simplehost:simplehost@localhost:5432/simplehost?sslmode=disable' \
DATA_DIR=./data/sites \
SITE_DOMAIN=localhost:8090 \
PUBLIC_BASE_URL=http://localhost:8090 \
ADMIN_API_KEY=$(openssl rand -hex 32) \
go run ./cmd/server
```
打开 http://localhost:8090 并使用该 `ADMIN_API_KEY` 登录 — 这是具有管理员访问权限的主密钥。构建生产二进制文件:
```bash
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o ./simple-host ./cmd/server
```
一个独立的二进制文件:将其发送到任何地方,设置环境变量,然后运行它。
### 配置
所有配置均通过环境变量进行。`DB_DSN` 和 `ADMIN_API_KEY` 是必需的;其余部分都有默认值。
| 环境变量 | 必需 | 描述 |
|---|---|---|
| `DB_DSN` | ✅ | Postgres DSN |
| `ADMIN_API_KEY` | ✅ | 主管理员密钥。选择一个长密钥 — 公共源故意不提供默认值。 |
| `SITE_DOMAIN` | | 站点 URL 的域名后缀(例如 `simple-host.app`) |
| `PUBLIC_BASE_URL` | | 用于魔术链接电子邮件的基准 URL |
| `DATA_DIR` | | 版本化的网站文件在磁盘上的存储位置 |
| `PORT` | | HTTP 监听端口(默认为 `8090`) |
| `RESEND_API_KEY` | | 通过 [Resend](https://resend.com) 进行魔术链接电子邮件;如果未设置,则身份验证被禁用 |
| `MAIL_FROM` | | 魔术链接发送者地址 |
| `ANTHROPIC_API_KEY` | | 启用 **使用 AI 构建** 端点;未设置 = 禁用 |
## API
代理所需的一切都在 [`/llms.txt`](https://simple-host.app/llms.txt) 中,完整规范在 [`/openapi.yaml`](https://simple-host.app/openapi.yaml) 中,实时文档在 [`/docs.html`](https://simple-host.app/docs.html) 中。身份验证路由采用 `X-API-Key: <key>`;JSON 输入,JSON 输出。头条端点:
| 端点 | 方法 | 描述 |
|---|---|---|
| `/v1/auth`, `/v1/auth/verify` | POST | 魔术链接登录 → API 密钥 |
| `/v1/sites` | GET | 列出您的网站 |
| `/v1/sites/{name}/files` | POST / PUT | 从 JSON `{path: content}` 映射部署网站 |
| `/v1/sites/{name}` | POST / PUT / DELETE | 从 tarball 部署 / 滚动新版本 / 删除 |
| `/v1/sites/{name}/state` | GET / PUT / PATCH | 每个站点的 JSON 状态,具有原子操作(源检查) |
| `/v1/sites/{name}/collections/{coll}` | GET / POST | 仅追加集合 |
| `/v1/templates` | GET | 启动模板 |
| `/v1/generate` | POST | 使用 AI 构建(启用时) |
## 网站部署插件
[`simple-host-website/`](simple-host-website/) 是代理集成,上述安装命令会拉取它。它包含:
- **两个技能** — `website-deploy`(部署工作流)和 `website-deploy-builder`(帮助决定构建适合静态加轻状态模型的站点)。
- **一个 MCP 服务器** (Node)暴露 `register`、`deploy`、`status` 和 `list` 作为代理可调用的工具。
该插件嵌入到 Go 二进制文件中,因此运行实例还会在 `/skills.zip`、`/plugin.zip` 和每个技能的 ZIP 文件中提供它(例如 Claude.ai)。它在每个 API 调用时报告其版本;如果服务器的捆绑包更新,响应会带有 `_notice` 代理会显示给用户,以便他们知道要更新。
## 许可证
MIT — 见 [`LICENSE`](LICENSE)。