sparanoid/sts
GitHub: sparanoid/sts
一个完全开源的状态页系统,结合 Gatus 监控后端和 Payload CMS 实现服务状态展示与事件管理。
Stars: 24 | Forks: 5
# sts
sts,一个完全开源的状态页,后端采用 Gatus 和 Payload CMS
## ✨ 功能
- **Gatus 集成**:与 [Gatus](https://github.com/TwiN/gatus) 后端配合进行监控。
- **事件管理**:内置 CMS,用于管理和显示带有状态更新的服务事件。由 [Payload CMS](https://payloadcms.com/) 提供支持。
- **实时状态更新**:使用 SWR 自动更新状态信息。
- **可自定义**:轻松更新网站标题、描述、logo 等。
- **无品牌页脚**:无需署名
## 🛠️ 技术栈
- **Framework**:[Next.js](https://nextjs.org/)
- **CMS**:[Payload CMS](https://payloadcms.com/),用于事件管理
- **Database**:SQLite(支持 [Turso](https://turso.tech/)),用于事件存储
- **UI**:[Radix UI Primitives](https://www.radix-ui.com/),确保所有组件均具有无障碍访问性
- **Styling**:[Tailwind CSS](https://tailwindcss.com/),采用自定义的 OKLCH 调色板
- **Data Fetching**:[SWR](https://swr.vercel.app/),用于高效的实时更新
## 📢 事件管理
sts 包含一个内置的 CMS,用于管理服务事件和状态更新。
### 工作原理
- **活动事件**:显著展示在状态页顶部
- **状态更新**:通过更新类型追踪事件进展(调查中、已识别、监控中、更新、已解决)
- **时间轴视图**:每个事件按时间顺序显示所有更新
- **公开访问**:事件对外公开可见;管理需要进行身份验证
- **历史记录**:查看过去最多 30 天的历史事件,支持分页
### 管理事件
1. 访问位于 `/admin` 的管理面板
2. 创建您的第一个管理员用户
3. 在侧边栏导航至“Incidents”
4. 创建新事件,包含:
- 标题和描述
- 带有时间戳的多个状态更新
- 用于详细说明的富文本内容
### 状态更新类型
- **调查中**:已发现问题,正在调查中
- **已识别**:已找到根本原因
- **监控中**:已应用修复,正在监控情况
- **更新**:常规进展更新
- **已解决**:问题已完全解决
活动事件将显示在您的状态页顶部,直到被标记为“已解决”。
## 🚀 快速开始
### 前置条件
- [Bun](https://bun.sh/)(默认)或 Node.js。
- [Gatus](https://github.com/TwiN/gatus) 后端。
- 一个 SQLite 数据库(或 Turso)
### 安装
```
# Clone repository
git clone https://github.com/sparanoid/sts.git
cd sts
# 安装 dependencies。
bun install
# 设置 environment variables(创建 .env.local)
echo "GATUS_API_BASE=https://your-gatus-instance.com/api/v1" > .env.local
echo "PAYLOAD_SECRET=your-secret-key" >> .env.local
# 运行 development server
bun dev
```
打开 [http://localhost:3000](http://localhost:3000) 查看状态页。
打开 [http://localhost:3000/admin](http://localhost:3000/admin) 访问事件管理面板。
### 带子路径安装
```
# Clone repository
git clone https://github.com/sparanoid/sts.git
cd sts
# 安装 dependencies。
bun install
# 设置 environment variables(创建 .env.local)
echo "NEXT_PUBLIC_API_BASE_PATH=/frontend" >> .env.local
echo "GATUS_API_BASE=https://your-gatus-instance.com/frontend/api/v1" > .env.local
echo "PAYLOAD_SECRET=your-secret-key-min-32-characters" >> .env.local
# 构建 app server
bun run build
# 执行 server development
bun dev
# 执行 server production
bun start
```
使用浏览器打开 [http://localhost:3000/frontend](http://localhost:3000/frontend) 查看输出
## ⚙️ 配置
您可以通过环境变量配置 sts:
| 变量 | 描述 | 必填 |
| ----------------------------- | ------------------------------------------------------------- | -------- |
| `GATUS_API_BASE` | Gatus API base URL(例如 `https://status.example.com/api/v1`) | ✅ |
| `PAYLOAD_SECRET` | Payload CMS 的密钥(最少 32 个字符) | ✅ |
| `TURSO_DATABASE_URL` | 或 `DATABASE_URI`,Turso 数据库 URL(适用于云端 SQLite) | ❌ |
| `TURSO_AUTH_TOKEN` | 或 `AUTH_TOKEN`,Turso 身份验证 token | ❌ |
| `NEXT_PUBLIC_SITE_TITLE` | 网站标题 | ❌ |
| `NEXT_PUBLIC_SITE_DESC` | 网站描述 | ❌ |
| `NEXT_PUBLIC_SITE_LOGO` | 网站 logo URL | ❌ |
| `NEXT_PUBLIC_SITE_BACK_TITLE` | 返回链接的标题 | ❌ |
| `NEXT_PUBLIC_SITE_BACK_URL` | 返回链接的 URL | ❌ |
| `NEXT_PUBLIC_FOOTER_TEXT` | 自定义页脚文本 | ❌ |
| `NEXT_PUBLIC_API_BASE_PATH` | 应用的自定义 Base path(例如 `/frontend` ) | ❌ |
| `NEXT_PUBLIC_GROUP_SIZE` | 加载骨架屏组大小(默认:`3` ) | ❌ |
## 🌐 部署
### 在 Vercel 上部署
部署 sts 最简单的方法是使用 Vercel:
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fsparanoid%2Fsts&env=GATUS_API_BASE,PAYLOAD_SECRET,TURSO_DATABASE_URL,TURSO_AUTH_TOKEN,NEXT_PUBLIC_SITE_TITLE,NEXT_PUBLIC_SITE_DESC&envDescription=Gatus%20API%20base%20is%20required&envLink=https%3A%2F%2Fgithub.com%2Fsparanoid%2Fsts)
### 自托管
sts 可以部署在任何支持 Next.js 应用的托管服务提供商上。
## 📝 许可证
Apache-2.0
标签:Gatus, Payload CMS, Syscall, Web开发, 状态页, 自动化攻击, 运维监控