架构
Web.Casa 采用分层架构,API、业务逻辑、数据和 UI 层之间有清晰的分离。
┌─────────────────────────────────────────────┐│ 浏览器(React 19 SPA) ││ Vite 7 · Radix UI Themes 3 · Zustand 5 ││ Tailwind CSS v4 │└──────────────┬──────────────────────────────┘ │ REST API(HTTP) │ WebSocket(终端、指标、日志)┌──────────────▼──────────────────────────────┐│ Go 后端(Gin + GORM) ││ ┌──────────┐ ┌──────────┐ ┌─────────────┐ ││ │ Handler │ │ Service │ │ Model │ ││ │ 层 │→│ 层 │→│ 层 │ ││ └──────────┘ └──────────┘ └─────────────┘ ││ ┌──────────────────────────────────────┐ ││ │ 插件系统(12 个插件) │ ││ └──────────────────────────────────────┘ │└──────┬──────────────────────┬───────────────┘ │ │┌──────▼──────┐ ┌──────────▼──────────┐│ SQLite │ │ Caddy 子进程 ││(WAL 模式) │ │ (通过 Admin API ││ │ │ 管理) │└─────────────┘ └─────────────────────┘- 使用 Go 编写,基于 Gin HTTP 框架
- 通过 GORM ORM 实现数据持久化,使用 SQLite 的 WAL 模式
- SQLite 存储所有面板配置、用户账户、主机定义、审计日志和插件状态
- 数据库位置:
/var/lib/webcasa/webcasa.db
关键设计: Caddy 作为托管子进程运行。Web.Casa 通过 Caddy 的 Admin API 动态应用配置变更,无需重启进程。
| 技术 | 版本 | 用途 |
|---|---|---|
| React | 19 | UI 框架 |
| Vite | 7 | 构建工具和开发服务器 |
| Radix UI Themes | 3 | 组件库 |
| Tailwind CSS | v4 | 原子化样式 |
| Zustand | 5 | 状态管理 |
- 编译为静态资源,由 Go 二进制文件直接提供服务
- 前端无需独立的 Web 服务器
- 单页应用,使用客户端路由
WebSocket 连接处理需要持久双向数据流的功能:
- 终端 — 通过 xterm.js 的 PTY 会话
- 监控 — CPU、内存、磁盘和网络指标流
- 部署 — Git 部署过程中的构建日志流
- Docker — 容器日志跟踪
Web.Casa 使用插件架构组织功能模块。每个插件实现标准的 Plugin 接口,通过事件总线与核心系统通信。
12 个内置插件:
| 插件 | 功能 |
|---|---|
| Docker | 容器和 Compose 管理 |
| 数据库 | MySQL/PostgreSQL/MariaDB/Redis 管理 |
| 备份 | 定时和手动备份 |
| 监控 | 系统资源指标 |
| 文件管理器 | 文件浏览、编辑和 Web 终端 |
| AI | AI 助手集成 |
| 应用商店 | 一键 Docker 应用目录 |
| MCP 服务器 | Model Context Protocol 端点 |
| 防火墙 | 防火墙规则管理 |
| PHP | PHP 版本和站点管理 |
| 部署 | 基于 Git 的部署流水线 |
| 定时任务 | 定时任务管理 |
- 生产环境以 systemd 服务运行
- 通过
/etc/webcasa/webcasa.env中的环境变量进行配置 - Caddy 二进制文件作为子进程管理,提供生命周期控制(启动、停止、重载)