{"id":39656433,"url":"https://github.com/rehiy/isrvd","last_synced_at":"2026-05-17T05:06:45.312Z","repository":{"id":312647390,"uuid":"1048185144","full_name":"rehiy/isrvd","owner":"rehiy","description":"轻量级 Web 服务器管理工具，基于 Go + Vue 3 构建，提供文件管理、在线编辑、Docker/Swarm/Compose 管理、APISIX 管理和实时终端功能。","archived":false,"fork":false,"pushed_at":"2026-04-24T13:21:29.000Z","size":9953,"stargazers_count":11,"open_issues_count":1,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-24T13:36:56.529Z","etag":null,"topics":["apisix","docker","etcd"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rehiy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-01T04:15:40.000Z","updated_at":"2026-04-24T13:21:33.000Z","dependencies_parsed_at":"2025-09-01T06:52:34.514Z","dependency_job_id":"a89227a0-34e8-4466-a1fe-c1ebf822cf9c","html_url":"https://github.com/rehiy/isrvd","commit_stats":null,"previous_names":["rehiy/isrvd"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/rehiy/isrvd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehiy%2Fisrvd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehiy%2Fisrvd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehiy%2Fisrvd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehiy%2Fisrvd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rehiy","download_url":"https://codeload.github.com/rehiy/isrvd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rehiy%2Fisrvd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32326127,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apisix","docker","etcd"],"created_at":"2026-01-18T09:18:18.880Z","updated_at":"2026-05-17T05:06:45.289Z","avatar_url":"https://github.com/rehiy.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# isrvd\n\n\u003e 名称源自 *\"it is a server daemon\"*，`srv` 对应 Linux 惯例目录 `/srv`，`d` 代表 daemon。\n\n轻量级运维管理面板，基于 Go + Vue 3 构建。集文件管理、容器编排、网关配置、Web 终端、AI 助手于一体，适配桌面与移动端。\n\n## 功能特性\n\n| 模块 | 功能 |\n|------|------|\n| 系统概览 | CPU、内存、磁盘、网络、GPU 实时监控 |\n| 文件管理 | 浏览、上传、下载、编辑、压缩解压、权限修改 |\n| Web 终端 | 基于 xterm.js 的 Shell 与容器终端 |\n| AI 助手 | 内置 Agent，支持自然语言操作 |\n| 计划任务 | 定时任务调度，支持 Shell/BAT/PowerShell/Docker 执行模式 |\n| APISIX | 路由、Consumer、上游、SSL、插件配置、白名单 |\n| Caddy | 路由、TLS 证书、全局选项管理 |\n| Docker | 容器、镜像、网络、卷、镜像仓库管理 |\n| Swarm | 集群、节点、服务、任务管理 |\n| Compose | 文件编辑、Docker/Swarm 部署与重部署 |\n| 成员管理 | 多用户、家目录隔离、模块权限控制 |\n| 系统管理 | 配置管理、操作审计日志 |\n| 移动端 | 响应式布局，适配移动设备 |\n\n## 技术栈\n\n| 层级 | 技术 |\n|------|------|\n| 后端 | Go 1.24+ / Gin / golang-jwt |\n| 前端 | Vue 3 / TypeScript / Tailwind CSS / Pinia |\n| 终端 | xterm.js |\n| 容器 | Docker / APISIX / Caddy |\n| AI | 兼容 OpenAI API 的 LLM 接入 |\n\n## Docker 部署\n\n提供三个镜像版本：\n\n| 镜像 | 说明 |\n|------|------|\n| `rehiy/isrvd:slim` | **默认版本**，仅含 isrvd，适合大多数场景 |\n| `rehiy/isrvd:apisix` | isrvd + APISIX，集成 API 网关 |\n| `rehiy/isrvd:caddy` | isrvd + Caddy，集成反向代理与 TLS 管理 |\n\nCNB 流水线会同步推送到 CNB Docker 制品库，镜像路径为 `docker.cnb.cool/\u003crepo-slug\u003e:\u003ctag\u003e`，支持 `slim`、`caddy`、`apisix` 三个标签，其中 `slim` 同时作为 `latest`。\n\n首次启动自动生成随机密码，通过 `docker logs isrvd` 查看。\n\n### slim（默认）\n\n仅含 isrvd 本体，体积最小，适合只需要文件管理、Docker/Swarm/Compose、计划任务等功能的场景。\n\n```bash\ndocker run -d \\\n  --name isrvd \\\n  -p 8080:8080 \\\n  -v /srv/data:/data \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  rehiy/isrvd:slim\n```\n\n| 端口 | 服务 | 说明 |\n|------|------|------|\n| 8080 | isrvd | Web 管理界面 |\n\n### apisix（集成 API 网关）\n\nisrvd + APISIX，适合已使用 APISIX 作为 API 网关的场景。\n\n```bash\ndocker network create srvdnet\ndocker run -d \\\n  --name isrvd \\\n  --network srvdnet \\\n  -p 8080:8080 \\\n  -p 80:9080 \\\n  -p 443:9443 \\\n  -v /srv/data:/data \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  rehiy/isrvd:apisix\n```\n\n| 端口 | 服务 | 说明 |\n|------|------|------|\n| 8080 | isrvd | Web 管理界面 |\n| 9080 | APISIX | HTTP 代理端口 |\n| 9443 | APISIX | HTTPS 代理端口 |\n\n### caddy（集成反向代理）\n\nisrvd + Caddy，适合需要反向代理、自动 HTTPS（ACME）或统一网关管理的场景。\n\n```bash\ndocker run -d \\\n  --name isrvd \\\n  -p 8080:8080 \\\n  -p 80:80 \\\n  -p 443:443 \\\n  -v /srv/data:/data \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  rehiy/isrvd:caddy\n```\n\n| 端口 | 服务 | 说明 |\n|------|------|------|\n| 8080 | isrvd | Web 管理界面 |\n| 80 | Caddy | HTTP 代理端口 |\n| 443 | Caddy | HTTPS 代理端口 |\n\nCaddy 默认配置仅监听 `:80`，关闭了自动 HTTPS 跳转，首次启动即可正常访问。如需 HTTPS，在「Caddy → 全局选项」中开启，或直接编辑「原始配置」。\n\n### Docker Compose\n\n```yaml\nservices:\n  isrvd:\n    image: rehiy/isrvd:slim\n    container_name: isrvd\n    restart: unless-stopped\n    ports:\n      - \"8080:8080\"\n    volumes:\n      - /srv/data:/data\n      - /var/run/docker.sock:/var/run/docker.sock\n```\n\n\u003e **注意**：请始终挂载整个 `/data` 目录，避免容器重建时数据丢失。\n\n## 二进制部署\n\n安装目录：`/usr/local/isrvd/`（包含二进制和配置文件）\n\n```bash\n# 一键安装\nbash \u003c(curl -sL https://jscdn.rehi.org/gh/rehiy/isrvd/build/script/isrvd.sh) install\n\n# 更新/卸载/仅下载\nbash \u003c(curl -sL https://jscdn.rehi.org/gh/rehiy/isrvd/build/script/isrvd.sh) update\nbash \u003c(curl -sL https://jscdn.rehi.org/gh/rehiy/isrvd/build/script/isrvd.sh) uninstall\nbash \u003c(curl -sL https://jscdn.rehi.org/gh/rehiy/isrvd/build/script/isrvd.sh) download\n```\n\n也可直接运行 `./isrvd`，通过 `CONFIG_PATH` 指定配置位置：\n\n```bash\n# 默认读取 ./config.yml\n./isrvd\n\n# 本地 YAML\nCONFIG_PATH=/data/conf/isrvd.yml ./isrvd\n\n# etcd（value 仍为 config.yml 同款 YAML）\netcdctl put /isrvd/config \"$(cat /data/conf/isrvd.yml)\"\nCONFIG_PATH=\"etcd://user:pass@127.0.0.1:2379/isrvd/config?scheme=http\u0026timeout=5s\" ./isrvd\n\n# etcd key 不存在时，用 fallback YAML 初始化并写入 etcd\nCONFIG_PATH=\"etcd://127.0.0.1:2379/isrvd/config?fallback=/data/conf/isrvd.yml\" ./isrvd\n\n# etcd 完整配置示例\n# etcd://user:pass@host1:2379,host2:2379/key?scheme=http\u0026timeout=5s\u0026fallback=/path/config.yml\n```\n\n**etcd** 认证可省略或用 `ETCD_USERNAME` / `ETCD_PASSWORD` 补充，配置变更仅记录重启提示，不自动热更新。\n\n## 本地开发\n\n### 环境要求\n\n- **Go**：用于后端服务与命令行构建\n- **Node.js / npm**：用于 `webview` 前端开发与构建\n- **Docker**：可选，用于 Docker、Swarm、Compose 相关功能调试\n\n### 启动开发环境\n\n```bash\n./develop.sh\n```\n\n开发脚本会自动：\n\n- **后端**：复制 `config.yml` 为 `.local.yml`（如不存在），并通过 `CONFIG_PATH=.local.yml go run cmd/server/main.go` 启动\n- **前端**：进入 `webview`，安装依赖并执行 `npm run dev`\n- **端口清理**：启动前尝试释放 `8080` 和 `3000` 端口\n\nWindows 环境可使用：\n\n```bat\ndevelop.bat\n```\n\n### 构建与校验\n\n```bash\n# 完整分发构建\n./build.sh\n\n# 后端测试\ngo test ./...\n\n# 前端类型检查\ncd webview \u0026\u0026 npm run lint\n\n# 前端 import 排序检查\ncd webview \u0026\u0026 python3 sort-imports.py --dry-run src\n```\n\n\u003e 贡献代码前请优先阅读 [AGENTS.md](AGENTS.md)。该文件是当前仓库的代码规范与协作约定入口，旧版 `CODE_STYLE` 不再作为规范来源。\n\n### 配置说明\n\n| 配置段 | 说明 |\n|--------|------|\n| `server` | 端口、JWT 密钥、代理认证头、数据目录 |\n| `oidc` | OIDC 认证（issuerUrl / clientId / clientSecret / redirectUrl） |\n| `agent` | AI 助手模型接入（model / baseUrl / apiKey） |\n| `apisix` | APISIX Admin API 地址和密钥 |\n| `caddy` | Caddy Admin API 地址 |\n| `docker` | Docker 守护进程地址、容器数据目录、镜像仓库账号 |\n| `marketplace` | 应用市场地址 |\n| `links` | 自定义快捷链接 |\n| `members` | 用户账号、家目录、模块权限 |\n\n### 权限模块\n\n权限基于路由进行细粒度控制，每个用户可以独立授予各模块下具体 API 路由的访问权限。\n\n**权限格式**：`\u003cMETHOD\u003e /api/\u003c模块\u003e/\u003c路由\u003e`（如 `GET /api/overview/status`、`POST /api/account/member`）\n\n**前端权限判断**：使用 `actions.hasPerm('\u003cMETHOD\u003e /api/\u003c路由\u003e')` 控制按钮/操作的显示\n\n**常用模块与路由示例**：\n\n| 模块 | 路由权限点示例 | 说明 |\n|------|---------------|------|\n| `overview` | `GET /api/overview/status` | 系统概览 |\n| `system` | `GET /api/system/config` | 系统设置 |\n| `account` | `GET /api/account/members` | 成员管理（列出） |\n| `account` | `POST /api/account/member` | 成员管理（创建） |\n| `account` | `PUT /api/account/member/:username` | 成员管理（更新） |\n| `account` | `DELETE /api/account/member/:username` | 成员管理（删除） |\n| `filer` | `GET /api/filer/list` | 文件管理（列出） |\n| `filer` | `POST /api/filer/upload` | 文件管理（上传） |\n| `filer` | `POST /api/filer/modify` | 文件管理（修改） |\n| `shell` | `GET /api/shell` | Web 终端 |\n| `agent` | `ANY /api/agent/*path` | AI 助手（LLM 代理） |\n| `cron` | `GET /api/cron/jobs` | 计划任务（列出） |\n| `cron` | `POST /api/cron/jobs` | 计划任务（创建） |\n| `cron` | `POST /api/cron/jobs/:id/run` | 计划任务（立即执行） |\n| `cron` | `GET /api/cron/jobs/:id/logs` | 计划任务（查看日志） |\n| `apisix` | `GET /api/apisix/routes` | APISIX 管理（列出） |\n| `docker` | `GET /api/docker/containers` | Docker 管理（列出） |\n| `swarm` | `GET /api/swarm/services` | Swarm 管理（列出） |\n| `compose` | `POST /api/compose/deploy` | Compose 管理（部署） |\n\n\u003e 留空 = 无权限；具体可用路由见各模块 API 文档\n\n## GPU 监控\n\n支持自动检测 NVIDIA / AMD / Intel 独立显卡，显示使用率、显存、温度、功耗、风扇转速。\n\n| 厂商 | 首选方式 | 回退方式 |\n|------|---------|---------|\n| NVIDIA | go-nvml | nvidia-smi |\n| AMD | sysfs | rocm-smi |\n| Intel | sysfs | — |\n\n自动过滤虚拟显卡与核显（Intel Arc 独显保留）。\n\n### Docker 部署注意事项\n\n**NVIDIA**：\n\n```bash\ndocker run -d --gpus all rehiy/isrvd:slim\n```\n\n**AMD / Intel**：\n\n```bash\ndocker run -d --device /dev/dri:/dev/dri rehiy/isrvd:slim\n```\n\n## 架构设计\n\n### 分层架构\n\n```text\nconfig → registry → pkgs → service → server\n```\n\n- **config**：配置加载\n- **registry**：外部服务初始化\n- **pkgs**：各模块客户端（Docker / Swarm / APISIX / Caddy / GPU / Compose / Archive）\n- **service**：业务逻辑与类型转换\n- **server**：HTTP handlers\n\n### 设计原则\n\n- **高内聚**：同一领域功能聚合在同一包\n- **低耦合**：层间通过接口解耦\n- **单一职责**：Handler 只管 HTTP，Service 只管业务\n\n### 开发规范\n\n- **后端分层**：`pkgs` 保持原生客户端能力，`service` 负责业务组合与类型转换，`server` 只处理 HTTP 入出口\n- **前端结构**：`webview/src/service/types` 按域拆分类型，页面复用统一卡片、表格、移动端双视图和操作按钮语义色\n- **状态与权限**：全局状态通过 Provide/Inject 注入，权限统一使用 `hasPerm(module, write?)` 判断\n- **安全基线**：敏感字段不返回明文，文件路径与解压路径必须校验，WebSocket 必须经过认证链路\n- **完整规范**：详见 [AGENTS.md](AGENTS.md)\n\n## 安全特性\n\n- JWT 认证，敏感字段（密钥、密码）不返回前端\n- 文件路径校验，防止目录遍历攻击\n- 解压校验路径，防止 Zip Slip 攻击\n- WebSocket 连接需经过认证中间件\n- 基于路由的细粒度权限控制，路由访问级别支持 `0` 需权限、`1` 需登录、`-1` 匿名\n- 操作审计日志，路由审计级别支持 `0` 按 Method、`-1` 忽略、`1` 强制记录，默认记录非 GET 请求与 WebSocket 连接\n- 支持代理认证头（`proxyHeaderName`）\n\n## 许可证\n\n本项目基于 **Apache License 2.0** 发布，详见 [LICENSE](LICENSE)。\n\n第三方组件协议详见 [NOTICE](NOTICE)。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frehiy%2Fisrvd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frehiy%2Fisrvd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frehiy%2Fisrvd/lists"}