Files
Prism/README.md
T
rose_cat707 6dbd066c77
CI / docker (push) Successful in 2m10s
更新 README.md
2026-06-23 07:59:43 +00:00

257 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Prism
HTTP / SOCKS5 代理网关,带 Web 管理台。控制面自研(Go + SQLite),数据面嵌入 [Mihomo](https://github.com/MetaCubeX/mihomo)。
管理台支持**简体中文、繁体中文、英文**三种界面语言,可在「系统设置 → 显示语言」中随时切换。
## 界面预览
以下为 Web 管理台主要页面(点击可查看原图)。
| 登录 | 监控大盘 |
|:---:|:---:|
| ![登录页](docs/image/登陆页.png) | ![监控大盘](docs/image/监控大盘.png) |
| 默认密码 `admin`,首次登录后请修改 | 实时速率、连接趋势与流量分布 |
| 订阅管理 | 代理节点 |
|:---:|:---:|
| ![订阅管理](docs/image/订阅管理.png) | ![代理节点](docs/image/代理节点.png) |
| Clash YAML / 节点链接,自动识别与定时拉取 | 延迟测速、国家标签、导入导出 |
| 出站管理 | 路由规则 |
|:---:|:---:|
| ![出站管理](docs/image/出站管理.png) | ![路由规则](docs/image/路由规则.png) |
| 默认出站、策略组与国家 url-test 池 | 手动规则、合成预览与命中测试 |
| 请求日志 | 运行日志 |
|:---:|:---:|
| ![请求日志](docs/image/请求日志.png) | ![运行日志](docs/image/运行日志.png) |
| 代理请求明细与分页检索 | 内核与系统运行日志 |
| 系统设置 |
|:---:|
| ![系统设置](docs/image/系统设置.png) |
| 端口、认证、Geo 数据、API Key、界面语言 |
## 功能概览
| 模块 | 说明 |
|------|------|
| 订阅管理 | Clash YAML、节点链接、自动识别;定时拉取与热重载 |
| 代理节点 | 订阅/手动节点、国家标签、延迟测速、导入导出 |
| 出站管理 | 默认出站、策略组切换、国家 url-test 池 |
| 路由规则 | 手动高优先级规则、合成预览、命中测试、导入导出 |
| 监控大盘 | 实时速率、域名/节点流量、连接趋势 |
| 日志 | 请求日志、运行日志、审计日志(分页,单页最多 500 条) |
| 系统设置 | 端口、认证、Geo 数据、API Key、界面语言 |
| OpenAPI | `/api/docs` 交互文档,`/api/v1/openapi.json` |
## 架构
```
客户端 → Mihomo 入站 (HTTP/SOCKS5) → 规则引擎 → 出站节点
Prism 控制面 (配置合成 / REST API / Vue UI)
SQLite + 内存缓存
```
## 快速开始(开发)
### 依赖
- Go 1.25+(见 `go.mod`
- Node.js 20+(仅开发/构建前端)
依赖镜像(已写入 `go.env``web/.npmrc`,国内网络友好):
- Go`GOPROXY=https://goproxy.cn,direct`
- npm`registry=https://registry.npmmirror.com`
海外用户可将 `GOPROXY` 改为 `https://proxy.golang.org,direct`npm 使用默认 registry 即可。
### 启动
```bash
# 终端 1:后端
make run
# 终端 2:前端(Vite 代理 /api → :8080
make dev-web
```
访问 http://localhost:5173 ,默认密码 `admin`**首次登录后请立即修改**)。
```bash
make test # 运行单元测试
make build # 构建 dist/prism
```
## 部署
镜像由 Gitea Actions 自动构建并发布到 Container Registry**无需自行编译**。直接拉取运行即可。
```bash
docker pull git.rc707blog.top/rose_cat707/prism:latest
```
| Tag | 说明 |
|-----|------|
| `latest` | `main` / `master` 分支最新构建 |
| `sha-xxxxxxx` | 对应 commit 短 SHA |
| `v1.2.3` | 推送 Git tag `v1.2.3` 时发布 |
### docker run
```bash
docker pull git.rc707blog.top/rose_cat707/prism:latest
docker run -d --name prism \
--restart unless-stopped \
-p 8080:8080 \
-p 7890:7890 \
-p 7891:7891 \
-v prism-data:/app/data \
git.rc707blog.top/rose_cat707/prism:latest
```
### Docker Compose
仓库根目录 `docker-compose.yml` 已指向上述镜像:
```bash
docker compose pull
docker compose up -d
```
数据持久化在 `./data`,升级时 `docker compose pull && docker compose up -d` 即可保留数据卷。
**端口(默认)**
| 服务 | 端口 | 说明 |
|------|------|------|
| 管理 API / Web UI | 8080 | 浏览器访问管理台 |
| HTTP 代理 | 7890 | 客户端 HTTP 代理 |
| SOCKS5 代理 | 7891 | 客户端 SOCKS5 代理 |
代理端口可在管理台「系统设置」修改并保存后重载内核。
若通过域名 + HTTPS 访问管理台,可在前面加 Nginx/Caddy 反代到 `8080`。**勿将代理端口 7890/7891 无防护暴露公网**;建议 VPN、IP 白名单或强密码 + 入站认证。
## 数据目录
`-data` 指定数据目录(默认 `./data`):
```
data/
├── prism.db # SQLite:订阅、节点、规则、设置、日志
└── geo/ # Country.mmdb、geoip.dat、geosite.dat
```
首次使用含 `GEOIP`/`GEOSITE` 规则时,可在「系统设置 → Geo 数据」一键下载,或手动放入 `data/geo/`
## 使用攻略(简要)
### 1. 首次登录
1. 打开 `http://<主机>:8080`
2. 默认密码 `admin`,登录后进入「系统设置」修改密码
3. 按需切换「显示语言」
### 2. 添加订阅
1. 「订阅管理」→「添加订阅」
2. 类型选 **自动识别**(兼容 Clash YAML、Base64 链接、短链)
3. 保存后自动拉取节点并重载内核
### 3. 配置出站
1. 「出站管理」设置**默认出站**(未命中规则时生效)
2. 在策略组中切换当前节点;国家池为自动测速选最快
### 4. 配置规则
1. 「路由规则」添加手动规则(优先级高于订阅规则)
2. 可将域名指向 `country:HK` 等国家池,或 `DIRECT` / `PROXY`
3. 使用「规则命中测试」验证 URL 走向
### 5. 客户端接入
| 类型 | 地址 | 默认 |
|------|------|------|
| HTTP 代理 | `<服务器IP>:7890` | 无认证(可在设置中启用) |
| SOCKS5 | `<服务器IP>:7891` | 同上 |
本机 `127.0.0.1` 访问代理可免认证(若已配置入站认证)。
### 6. API 与自动化
- 交互文档:`http://<主机>:8080/api/docs`
- 登录获取 Token`POST /api/v1/auth/login`
- 或在「系统设置」申请 **API Key**,请求头:
- `Authorization: Bearer <key>`
- `X-API-Key: <key>`
- 修改配置后:`POST /api/v1/system/reload` 热重载内核
### 7. 日常运维
| 操作 | 位置 / API |
|------|------------|
| 查看流量与连接 | 监控大盘 |
| 节点测速 | 代理节点 → 全部测速 |
| 查看请求明细 | 请求日志 |
| 更新 Geo | 系统设置 → Geo 数据 |
| 重载配置 | 系统设置 → 重载内核 |
## 订阅类型
| 类型 | 说明 |
|------|------|
| `auto` | 自动识别(推荐) |
| `clash` | Clash / Mihomo YAML |
| `links` | Base64 或纯文本节点链接 |
## API 前缀
REST API`/api/v1`
认证:`Authorization: Bearer <token>` 或 API Key。
主要端点:`/dashboard``/subscriptions``/proxies``/rules``/settings``/traffic-logs``/logs``/system/reload`
## 项目结构
```
cmd/prism/ # 进程入口
internal/
api/ # HTTP 层(按域拆分 handlers_*.go
settings/ # 设置键名、展示/提交规范化、语言
store/ # SQLite 与仓储
service/ # 编排与热重载
configbuilder/ # Mihomo YAML 合成
subscription/ # 订阅拉取解析
web/ # Vue 3 管理台
src/i18n/ # 多语言资源
src/views/ # 页面
src/styles/ # 设计系统 theme.css
docs/
image/ # README 界面截图
UI-DESIGN-SYSTEM.md
.gitea/workflows/ # Gitea Actions CI
```
## CI / 镜像发布
推送 `main` / `master` 或 tag `v*` 时,Gitea Actions 构建多架构镜像并推送到 Registry。工作流与 Dockerfile 约定见 [.gitea/README.md](.gitea/README.md);维护者配置见 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 贡献与安全
- [CONTRIBUTING.md](CONTRIBUTING.md) — 开发环境、CI 配置、提交规范
- [SECURITY.md](SECURITY.md) — 漏洞报告与部署安全建议
- [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md) — 第三方组件与许可
## 许可
Prism 控制面代码采用 [MIT License](LICENSE)。
嵌入的 [Mihomo](https://github.com/MetaCubeX/mihomo) 内核采用 **GPL-3.0 OR MIT** 双重许可。分发二进制或容器镜像时,请保留相关版权声明并遵守 Mihomo 及全部依赖的许可条款。详见 [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md)。