uwaserver/uwas

GitHub: uwaserver/uwas

一款基于 Go 语言构建的统一 Web 应用服务器,将 Web 服务、缓存、安全防护和可视化管理面板整合进单一二进制文件,旨在替代传统的 Nginx/Apache 加 cPanel 架构。

Stars: 115 | Forks: 11

# UWAS **统一 Web 应用服务器** 一个二进制文件搞定一切。 Apache + Nginx + Varnish + Caddy + cPanel → UWAS

UWAS Logo

[![Go](https://img.shields.io/badge/Go-1.26+-00ADD8?logo=go&logoColor=white)](https://go.dev) [![License](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE) ## 什么是 UWAS? UWAS 用一个 Go 二进制文件取代了您整个的 Web 服务器栈和主机控制面板。它包含自动 HTTPS、内置缓存、PHP 支持、.htaccess 兼容性、反向代理、WebSocket 转发、WAF、多用户访问控制,以及一个包含 205+ API 端点和 38 页 React 仪表盘。 一个二进制文件。零烦恼。 ## 当前快照 (v0.0.38) - **仪表盘页面:** 38 (`web/dashboard/src/pages`) - **Admin API 路由:** 205+(在 `internal/admin/api.go` 中的 `/api/v1` 下注册的路由) - **Go 包:** 52 (来自 `go list ./...`) - **CLI 命令:** 19 - **测试状态:** `go test -p 1 ./...` 通过 ## 功能特性 ### Web 服务器 - **自动 HTTPS** — 零配置的 Let's Encrypt 证书 - **HTTP/3 (QUIC)** — 通过 quic-go 实现,并附带 Alt-Svc 响应头通告 - **内置缓存** — Varnish 级别的缓存,支持宽限模式、基于标签的清除和 ESI (Edge Side Includes) - **PHP 就绪** — 带连接池和 .htaccess 支持的 FastCGI - **每个域名独立 PHP** — 每个域名支持多 PHP 版本,自动分配端口,崩溃自动重启 - **负载均衡器** — 5 种算法,健康检查,熔断器,金丝雀路由 - **WebSocket 代理** — 通过劫持 + 双向管道实现透明的 TCP 隧道 - **URL 重写** — 兼容 Apache mod_rewrite 的引擎 - **Brotli + Gzip** — 基于 Accept-Encoding 协商的双重压缩 - **图片优化** — 实时 WebP/AVIF 转换 ### 主机控制面板 - **38 页仪表盘** — 带有暗色/亮色主题的 React 19 管理面板 - **应用管理器** — 部署和管理 Node.js、Python、Ruby、Go 应用程序 - **Web 终端** — 通过 WebSocket 到 PTY 桥接实现的基于浏览器的 shell - **多用户认证** — 包含管理员、经销商、用户角色,支持 TOTP 2FA - **WordPress 管理** — 一键安装、插件更新、调试模式、错误日志查看器 - **DNS 区域编辑器** — 对 Cloudflare、Hetzner、DigitalOcean、Route53 的完整 CRUD 操作 - **文件管理器** — 通过仪表盘浏览、编辑、上传、删除文件 - **SFTP 服务器** — 内置纯 Go 实现的 SFTP,支持每个域名 chroot 隔离 + SSH 密钥管理 - **数据库管理** — MySQL/MariaDB + Docker 容器 - **站点迁移** — SSH 向导:通过 rsync 同步文件 + 数据库转储/导入 - **克隆/暂存** — 一键域名克隆并复制数据库 (DB duplication) - **备份/恢复** — 支持本地、S3、SFTP 存储供应商,可设置计划任务 + webhook 通知 - **Cron 任务** — 每个域名的 cron 管理,带有执行监控和失败告警 ### 安全与监控 - **WAF** — SQL 注入、XSS、Shell、RCE 检测 - **按域名速率限制** — 每个域名分片的令牌桶 - **带宽限制** — 每月/每日流量上限,支持限速或阻止操作 - **Webhook 事件** — 11 种事件类型,带有 HMAC-SHA256 签名和重试机制 - **正常运行时间监控** — 每个域名的健康检查与告警 - **分析统计** — 每个域名的流量、来源追踪、User Agent 细分数据 - **Prometheus 指标** — p50/p95/p99 延迟百分位数 - **审计日志** — 记录所有管理操作的时间戳和 IP - **IP 访问控制** — 按域名的白名单/黑名单 - **资源限制** — 通过 Linux cgroups v2 限制每个域名的 CPU/内存/PID ### DevOps - **Git 部署** — Git clone/pull + 基于 Docker 的应用程序部署 - **AI 原生** — 用于 LLM 驱动管理的 MCP 服务器 - **Nginx/Apache 迁移** — CLI 配置转换器 - **热重载** — 所有按域名的配置链在接收到 SIGHUP 信号时重建(零停机时间) - **自我更新** — 从 GitHub Releases 自动更新二进制文件 - **CI/CD** — 用于构建、测试、发布自动化的 GitHub Actions - **单一二进制文件** — 约 15MB,无依赖,下载即运行 ## 安装 ``` # 一键安装 (Linux / macOS) curl -fsSL https://raw.githubusercontent.com/uwaserver/uwas/main/install.sh | sh ``` ### 更新 ``` # 一键更新 (检测当前版本,下载最新版本,重启服务) curl -fsSL https://raw.githubusercontent.com/uwaserver/uwas/main/update.sh | sh ``` 或者从 [GitHub Releases](https://github.com/uwaserver/uwas/releases) 下载。 ### 从源码构建 ``` git clone https://github.com/uwaserver/uwas.git && cd uwas make build # Production binary → bin/uwas make linux # Cross-compile for Linux amd64 ``` ## 快速入门 ``` # 启动服务器 (首次运行自动创建 config) uwas # 或使用特定的 config uwas serve -c uwas.yaml # 安装为 systemd 服务 (开机自动启动) sudo uwas install sudo systemctl start uwas # Dashboard # http://your-ip:9443/_uwas/dashboard/ # CLI 命令 (API 密钥从 ~/.uwas/.env 自动加载) uwas status uwas php list uwas domain list uwas doctor ``` ## 配置 UWAS 使用单个 YAML 文件。有关完整参考,请参见 [`uwas.example.yaml`](uwas.example.yaml)。 ### 静态站点 ``` global: http_listen: ":80" https_listen: ":443" acme: email: you@example.com domains: - host: example.com root: /var/www/html type: static ssl: mode: auto ``` ### WordPress / PHP ``` domains: - host: blog.example.com root: /var/www/wordpress type: php ssl: mode: auto php: fpm_address: "unix:/var/run/php/php8.3-fpm.sock" htaccess: mode: import cache: enabled: true ttl: 1800 ``` ### 带 WebSocket 的反向代理 ``` domains: - host: api.example.com type: proxy ssl: mode: auto proxy: upstreams: - address: "http://127.0.0.1:3000" weight: 3 - address: "http://127.0.0.1:3001" weight: 1 algorithm: least_conn websocket: true health_check: path: /health interval: 10s ``` ### 带宽限制 + 速率限制 ``` domains: - host: example.com root: /var/www/html type: static bandwidth: enabled: true monthly_limit: 100GB daily_limit: 5GB action: throttle # or "block" security: rate_limit: requests: 100 window: 1m ``` ## 系统要求 | 组件 | 最低要求 | 推荐 | 备注 | |-----------|---------|-------------|-------| | Go | 1.26+ | 1.26+ | 用于从源码构建 | | PHP | 7.4+ | 8.3+ / 8.4+ | 仅 PHP 站点需要 | | Docker | 20.10+ | 24+ | 仅用于 Docker 数据库容器 | 静态站点、反向代理或重定向域名**不需要 PHP**。 ## CLI ``` uwas Start server (auto-setup if no config) uwas serve -c uwas.yaml Start with specific config uwas serve -d Start as background daemon uwas version Print version info uwas config validate Validate config file uwas domain list List domains uwas cache stats Cache statistics uwas cache purge Purge cache uwas status Server status via admin API uwas reload Hot-reload configuration uwas stop Stop running server uwas restart Restart running server uwas migrate nginx Convert Nginx config to UWAS uwas migrate apache Convert Apache config to UWAS uwas backup Create config backup uwas restore Restore from backup uwas php list List detected PHP versions uwas php start Start PHP-FPM for version uwas install Install as systemd service uwas uninstall Remove systemd service uwas user list List admin users uwas doctor System diagnostics + auto-fix uwas help Show help ``` ## 架构 ``` Request Flow: TCP → TLS (SNI routing) → HTTP Parse → Middleware Chain: Recovery → Request ID → Security Headers → Rate Limit → Access Log → Virtual Host Lookup → Per-domain: IP ACL → Rate Limit → BasicAuth → CORS → Header Transform → Security Guard (blocked paths, WAF) → Bandwidth Check (throttle/block) → Rewrite Engine (mod_rewrite compatible) → Cache Lookup (L1 memory + L2 disk) → Handler: ├── Static File (ETag, Range, pre-compressed, SPA) ├── FastCGI/PHP (connection pool, CGI env) ├── Reverse Proxy (5 LB algorithms, circuit breaker) ├── WebSocket (TCP tunnel, bidirectional pipe) └── Redirect (301/302/307/308) → Cache Store → Bandwidth Record → Response ``` ## 项目布局 ``` cmd/uwas/ → CLI entry point (19 commands) internal/ admin/ → REST API (205+ routes) + dashboard embed + TOTP auth alerting/ → Alert thresholds + webhook/Slack/Telegram/email notifications analytics/ → Per-domain traffic analytics appmanager/ → Node.js/Python/Ruby/Go process management auth/ → Multi-user RBAC (admin/reseller/user) + session + TOTP 2FA backup/ → Local/S3/SFTP backup + restore + scheduling bandwidth/ → Per-domain bandwidth limits (throttle/block) build/ → Build metadata (version, commit, date) via ldflags cache/ → L1 memory (256-shard LRU) + L2 disk cache + ESI cli/ → CLI framework and commands config/ → YAML parser, validation, defaults, ByteSize/Duration types cronjob/ → Cron job management + execution monitoring database/ → MySQL/MariaDB management + Docker container support deploy/ → Git clone/pull + Docker-based application deployment dnsmanager/ → Cloudflare, Route53, Hetzner, DigitalOcean DNS CRUD dnschecker/ → DNS record verification (A/MX/NS/TXT) doctor/ → System diagnostics + auto-fix filemanager/ → Web file manager (browse/edit/upload/delete) firewall/ → UFW management via API handler/ fastcgi/ → PHP handler, CGI environment builder proxy/ → Reverse proxy, load balancing, WebSocket, circuit breaker static/ → Static files, MIME, ETag, pre-compressed, SPA install/ → System package installer task queue logger/ → Structured logger (slog wrapper) mcp/ → MCP server for AI management metrics/ → Prometheus-compatible metrics middleware/ → Chain, recovery, rate limit, gzip, CORS, WAF, bot guard migrate/ → Nginx/Apache converter + SSH site migration + clone monitor/ → Uptime monitoring per domain notify/ → Webhook, Slack, Telegram, Email (SMTP) channels pathsafe/ → Path traversal guard (symlink-resolving containment check) phpmanager/ → PHP detect, install, start/stop, per-domain assign rewrite/ → URL rewrite engine (Apache mod_rewrite compatible) rlimit/ → Per-domain resource limits via Linux cgroups v2 router/ → Virtual host routing, request context selfupdate/ → Binary self-update from GitHub releases server/ → HTTP/HTTPS/HTTP3 server + request dispatch + log rotation serverip/ → Server IP detection (interfaces + public IP) services/ → systemd service management (start/stop/restart) sftpserver/ → Built-in SFTP server (pure Go, chroot per domain) siteuser/ → SFTP user management (chroot jail + SSH keys) terminal/ → WebSocket-to-PTY bridge for browser-based shell tls/ → TLS manager, ACME client, auto-renewal, cert expiry alerts acme/ → RFC 8555 ACME protocol, JWS signing webhook/ → Event-driven webhook delivery (11 events, HMAC, retry) wordpress/ → WordPress install, manage, debug, permissions pkg/ fastcgi/ → FastCGI binary protocol, connection pool htaccess/ → .htaccess parser and converter web/dashboard/ → React 19 SPA (38 pages, Vite + TypeScript + Tailwind) ``` ## 仪表盘 UWAS 包含一个位于 `/_uwas/dashboard/` 的 38 页 React 19 仪表盘,支持暗色/亮色主题: **站点:** Dashboard、Domains、Domain Detail、Topology、Certificates、DNS Zone Editor、WordPress、Clone/Staging、Migration、File Manager **服务器:** PHP、PHP Config、Applications、Database、SFTP Users、Cron Jobs、Services、Packages、IP Management、Email Guide **性能:** Cache、Metrics、Analytics、Logs **安全:** Security、Firewall、Unknown Domains、Audit Log、Admin Users **系统:** Config Editor、Webhooks、Backups、Terminal、Updates、Doctor、Settings **认证:** Login(支持 2FA/TOTP) ## 比较 | 特性 | UWAS | Nginx | Caddy | Apache | cPanel | |---------|------|-------|-------|--------|--------| | 单一二进制文件 | 是 | 否 | 是 | 否 | 否 | | 自动 HTTPS | 是 | 否 | 是 | 否 | 是 | | 内置缓存 | 是 | 否 | 否 | 否 | 否 | | PHP FastCGI | 是 | 是 | 是 | 是 | 是 | | .htaccess 支持 | 是 | 否 | 否 | 是 | 是 | | 负载均衡器 | 是 | 是 | 否 | 否 | 否 | | WebSocket 代理 | 是 | 是 | 否 | 否 | 否 | | WAF | 是 | 否 | 否 | Mod | 是 | | 控制面板 | 是 (内置) | 否 | 否 | 否 | 是 | | 多用户认证 | 是 | 否 | 否 | 否 | 是 | | Webhook 事件 | 是 | 否 | 否 | 否 | 否 | | DNS 管理 | 4 家供应商 | 否 | 否 | 否 | 是 | | MCP / AI 原生 | 是 | 否 | 否 | 否 | 否 | | 开源协议 | AGPL-3.0 | BSD | Apache 2.0 | Apache 2.0 | 专有 | ## 性能 在 AMD Ryzen 9 9950X3D 上使用 [hey](https://github.com/rakyll/hey) 测试: | 场景 | 请求数/秒 | 平均延迟 | |----------|-------------|-------------| | 小静态文件 (14B) | **7,000** | 7.1ms | | 4KB 静态文件 | **7,100** | 7.0ms | | 100K 请求 @ 200 并发 | **7,254** | 27ms | | 404 错误页 | **22,000** | 2.2ms | | 缓存 L1 查找 (基准测试) | **75,000,000** | 31ns | | VHost 路由 (基准测试) | **70,000,000** | 35ns | ## 部署 ### Systemd ``` sudo cp init/uwas.service /etc/systemd/system/ sudo systemctl enable uwas sudo systemctl start uwas # 实时 config 重载 (零停机) sudo systemctl reload uwas ``` ### Docker ``` docker build -t uwas . docker run -p 80:80 -p 443:443 -v ./uwas.yaml:/etc/uwas/uwas.yaml uwas ``` ## 从 Nginx/Apache 迁移 ``` # 转换现有 Nginx config uwas migrate nginx /etc/nginx/sites-enabled/example.conf > uwas.yaml # 转换 Apache config uwas migrate apache /etc/apache2/sites-enabled/example.conf > uwas.yaml # 或使用 Dashboard Migration wizard 进行完整的站点迁移 (文件 + 数据库) ``` ## 开发 ``` make dev # Build development binary make test # Run all tests make lint # Run go vet + staticcheck make clean # Clean build artifacts # Dashboard cd web/dashboard && npm run build ``` ## 许可证 UWAS 采用双许可模式: - **AGPL-3.0** — 面向开源和社区使用 — [完整文本](LICENSE) - **商业许可证** — 面向企业和专有使用 — [uwaserver.com/enterprise](https://uwaserver.com/enterprise) ## 贡献 1. 首先提出 Issue 进行讨论 2. 每个 PR 仅包含一个功能/修复 3. 需要提供测试 4. `go vet` 必须通过
标签:Apache, AppImage, AVIF, Brotli压缩, Caddy, EVTX分析, FastCGI, GNU通用公共许可证, Go语言, Gzip压缩, HTTP/3, HTTPS证书, Nginx, Node.js, OpenVAS, PHP, Python, QUIC, Ruby, URL重写, Varnish, WAF, WebP, WebSocket, Web应用防火墙, Web托管, Web服务器, 主机管理, 仪表盘, 依赖分析, 单二进制文件, 反向代理, 图片优化, 开源, 控制面板, 无后门, 日志审计, 知识库, 程序破解, 统一Web服务器, 缓存, 自动HTTPS, 请求拦截, 负载均衡, 边缘计算, 运维工具