内容
<div align="center">
<img src="./brand/assets/logo-lockup-light.png#gh-light-mode-only" alt="Sitewright" height="60" />
<img src="./brand/assets/logo-lockup-dark.png#gh-dark-mode-only" alt="Sitewright" height="60" />
**一款适用于机构的开源、可自行托管的网站平台。**
在单一位置构建和运行所有客户网站 — 通过代码编写实现实时编辑,内置 CMS,丰富的交互组件和 AI 助手 — 然后快速发布无需框架的静态网站。编码代理可以通过 MCP 构建和编辑您的网站。
[](https://github.com/sitewright-cms/sitewright/actions/workflows/ci.yml)
[](https://github.com/sitewright-cms/sitewright/releases)
[](./LICENSE)
[](https://github.com/sitewright-cms/sitewright/pkgs/container/sitewright)
</div>
> **状态:** 正在积极开发,自行托管版本(`v0.1.0`)。预 1.0 — API 和磁盘格式可能在小版本之间发生变化;参见 [CHANGELOG.md](./CHANGELOG.md)。
---
## 为什么选择 Sitewright
机构管理着数十个客户网站 — 每个网站都有自己的品牌、内容、表单、语言和发布节奏。Sitewright 是一款**适用于整个生命周期的单一平台**,可以在单个容器中自行托管:
- **代码优先,但客户可以编辑。** 开发者在 HTML + Tailwind + [DaisyUI](https://daisyui.com) 中编写页面;标记任意元素为可编辑,客户在实时预览中更改文本、图像和链接 **无需访问代码**。
- **功能齐全。** 内置 CMS、表单、多语言支持、丰富的组件和动画库、图像处理、SEO、同意/ GDPR 以及真正的部署管道 — 而不是一大堆插件。
- **代理原生。** 编辑器中的 AI 助手为您构建和编辑网站,**MCP** 端点允许外部编码代理(Claude Code、ChatGPT、Cursor…)通过作用域密钥执行相同操作。您的网站是可编程的。
- **快速且便宜托管。** 输出是**无需框架的静态 HTML** — 只有页面实际使用的 CSS/JS 被发送,因此简单的页面几乎不携带 JavaScript。
- **您可以运行。** 一个容器,一个卷。默认强化,版本发布,自动预升级数据库快照。无 SaaS 锁定。
## 一条命令部署
```bash
docker run -d -p 127.0.0.1:8080:80 -v sw-data:/app/data \
-e SW_PUBLIC_URL=https://sites.example.com -e TRUST_PROXY=true \
-e SW_ENCRYPTION_KEY="$(openssl rand -base64 32)" \
ghcr.io/sitewright-cms/sitewright:latest
```
在前面添加 TLS 反向代理,即可上线。完整指南 → **[docs/deployment.md](./docs/deployment.md)**
· 每个设置 → **[docs/environment.md](./docs/environment.md)**。
## 功能
### ✍️ 编写
- **代码优先页面** — 每个页面都是 HTML + Tailwind + DaisyUI;代码 *即* 页面(无损块树)。
- **实时编辑** — 标记元素为 `data-sw-*`,客户直接在 **实时所见即所得预览** 中编辑文本、富 HTML、链接、图像和背景(无需代码访问)。
- **可重用构建块** — 组件、片段(一个包含约 25 个食谱的烹饪书,可复制和拥有)、整页模板、数据支持的小部件和全站通用槽(导航/页脚/边栏)。
- **双模式编辑器** — 完整代码编辑器(CodeMirror)*或* 客户安全的内容编辑器,带有可搜索的库轨道(组件、图标、动画、按钮/视差/SVG 构建器、Google 字体库)和桌面/移动预览。
### 🧩 交互组件和动画
- **第一方组件** — 轮播/滑块(Embla)、选项卡、灯箱画廊、原生 `<dialog>` 模态窗口、可关闭的横幅、表单、日期/时间/范围选择器和 **WebGL 着色器背景**(30 个预设)。所有组件都可访问,并降级为可用的 HTML 而无需 JavaScript。
- **动画和效果** — 滚动/进入动画、多层视差、**SVG 绘制和变形动画**(带有可视化工作室)、精选导航和按钮效果库、粘性标题模式、滚动监听、页面预加载器、点击波纹、返回顶部和可选的浅色/深色主题。
### 🗂️ 内置 CMS
- **类型化数据集** — 具有 15 种字段类型(包括嵌套列表/对象、引用、媒体)的集合,在数据面板中编辑并 **在预览中点击编辑**。
- **动态页面** — 数据集上的 `[param]` 路由扩展为每个条目的一个静态详情页面。
- **设计安全** — 重命名数据集,slug 会在一次事务中级联到每个循环和引用的每个循环和引用中。
### 🌍 多语言
- **通过继承翻译** — 添加语言,Sitewright 搭建翻译页面,继承主页的代码;编辑布局一次,每个语言都更新。
- **关键目录** — 通过 `{{sw-translate}}` 共享 UI 字符串,每个本地化的内容、`hreflang` 替代和本地化数据集。
### 🖼️ 媒体、字体和性能
- **响应式图像** — AVIF/WebP 搭配 `srcset`,模糊加载 LQIP,无 CLS 内在尺寸,按需缩略图,发布时物化最小化。
- **矢量和图标** — SVG 保留为无害化的第一类矢量;~1,865 个 Lucide 图标,~270 个品牌标志,~250 个国家/地区旗帜 — 全部内联。
- **字体** — 自托管上传 *和* Google Fonts 下载 + 自托管(从未使用 CDN);从一个主图标生成完整的 favicon/PWA 图标集。
- **精简 CSS** — 发布时 Tailwind v4 仅发出使用的类,品牌代币作为第一类实用工具,一个可缓存的样式表。
### 🚀 发布、部署和托管
- **无需框架的静态输出** — 仅发送使用的 CSS/JS,原子发布,可移植的自包含工件(在域名根目录、子文件夹或本地运行)。
- **任意部署** — 本地托管、FTP/FTPS、SFTP(带有 rsync/tar 快速路径)和 git(HTTPS 令牌或 SSH 密钥)— 通过向导,带有 **加密** 机密、SSRF 防护和 **实时流式传输进度**。
- **增量 delta 部署** — 内容哈希清单仅上传更改的内容,带有 tar-over-SSH 快速路径、传输压缩和不可变的 `?v=` 缓存消除。
- **始终在线预览** — 整个站点草稿预览在更改时重建,加上可撤销的共享链接,供利益相关者使用。
- **自托管客户网站** — 在容器中在 `<slug>.<your-domain>`(源隔离,以便作者 JavaScript 安全运行)或通过 `/sites/<slug>/` 路径提供服务。
### 🔎 SEO 和 🔒 隐私
- **内置 SEO** — 每页 Open Graph、Twitter 卡片、规范 + `hreflang`、 `sitemap.xml`、 `robots.txt` 和 schema.org 组织 JSON-LD。
- **洞察** — 编辑器中的 **Lighthouse** 速度 + SEO 审计(也是 API 路由和代理工具)。
- **同意管理器** — 自动控制第三方 iframe *和* 分析脚本的同意类别,并派生 **严格的站点内容安全策略**(从不 `unsafe-inline`/`*`)— 按照 GDPR 构建。
### 🤖 AI 和代理
- **页面 AI 助手** — 服务器端代理循环驱动约 45 个作者工具来构建和编辑站点(携带平台密钥或项目密钥)。
- **MCP,无处不在** — 远程 OAuth MCP 端点(ChatGPT,Claude.ai)和本地 `sitewright-mcp` stdio 桥(Claude Code,Cursor,Cline,Windsurf,Gemini CLI)允许编码代理通过作用域密钥编辑项目。
- **导入和克隆** — 爬取或上传现有站点到可编辑项目(自托管其图像 + 字体,提取品牌身份);AI 辅助本地化,带有目标保真度审计。
### 👥 机构、帐户和运维
- **多租户** — 每个项目都有企业身份/品牌;**白标** 整个管理面板。
- **客户访问** — 仅限邀请注册和一次性、项目范围的客户邀请(仅编辑,无电子邮件基础设施要求)。
- **强化身份验证** — MFA/TOTP、通行密钥/WebAuthn、OIDC SSO 和项目范围的 API 密钥。
- **安全网** — 项目范围的版本历史 + 跨页面、数据集和设置的还原;90 天媒体回收箱;自动 WAL 安全数据库快照,升级前执行。
- **自托管运维** — 一个系统设置面板(SMTP、AI、OIDC、品牌、HSTS、日志级别、备份), `/health` + `/ready` 探针,结构化日志和带有应用内更新横幅的版本化 GHCR 发布。
## 单体仓库
pnpm + Turborepo。整个产品作为 `apps/api` 的容器发布;包是内部的(未发布到 npm)。
| 包 | 目的 |
|---|---|
| [`apps/api`](./apps/api) | Fastify 后端 — REST API,提供编辑器 SPA,渲染/构建/发布管道和 MCP 端点。 |
| [`apps/editor`](./apps/editor) | React 可视化 + 代码编辑器(单页应用)。 |
| [`@sitewright/schema`](./packages/schema) | Zod 模式 + 作者约定(页面、数据集、品牌代币、实例设置、组件目录 + 代理指南)。 |
| [`@sitewright/core`](./packages/core) | 纯领域逻辑 — 不变内容树操作,部分 + 绑定解析,集合页面扩展,项目验证。 |
| [`@sitewright/blocks`](./packages/blocks) | 无框架渲染器 + 组件/效果运行时 — 实时预览和发布站点共享的 XSS 安全 HTML。 |
| [`@sitewright/image-pipeline`](./packages/image-pipeline) | 图像优化 — AVIF/WebP 变体,LQIP,SVG 净化,favicon/PWA 集(sharp)。 |
| [`@sitewright/tailwind`](./packages/tailwind) | 发布时 Tailwind v4 编译器 — 扫描渲染的 HTML,发出最小的品牌映射样式表。 |
| [`@sitewright/site-import`](./packages/site-import) | 将捕获的外部站点(爬取或上传)转换为可编辑的 Sitewright 导入包。 |
| [`@sitewright/mcp`](./packages/mcp) | MCP stdio 桥 — 通过作用域密钥将项目的作者工具暴露给本地编码代理。 |
| [`@sitewright/cli`](./packages/cli) | `sitewright` CLI — OAuth 登录 + `sitewright mcp` 从存储的凭据运行桥梁。 |
更深入的设计文档:**[architecture](./docs/architecture.md)** · **[authoring model](./docs/authoring-model.md)**
· **[project format](./docs/project-format.md)**。
## 开发
```bash
corepack enable # 提供 pnpm(Node >= 22,参见 .nvmrc)
pnpm install
pnpm verify # 类型检查 + lint + 测试 + 构建
```
贡献遵循严格的质量标准(TDD,完整的代码 + 安全审查,E2E)— 参见
**[CONTRIBUTING.md](./CONTRIBUTING.md)**。要裁剪版本,请参见 **[RELEASING.md](./RELEASING.md)**;要报告漏洞,请参见 **[SECURITY.md](./SECURITY.md)**。
## 许可证
[Apache-2.0](./LICENSE)