如果你管过几台 Linux 服务器,大概率经历过这种尴尬:要么用命令行硬扛,要么装一个宝塔或 Vestacp 这类老牌面板,但它们的界面和扩展性往往停留在上一个时代。想上 Kubernetes 又太重,买托管平台又贵。ServerKit 这个刚在 Hacker News 上展示的开源项目,试图填上这个空档——一个轻量、现代、自托管的服务器控制面板,用 1.75 MB 的 gzipped 前端资源,就能管理 Web 应用、数据库、Docker 容器、DNS、备份、邮件服务器甚至远程服务器舰队。
先看几个硬指标:整个面板以单进程运行,常驻内存约 180 MB,容器镜像 501 MB,官方宣称在 1 GB 内存的 VPS 上可以和你自己的应用舒服地共存。它自带 1350 多个 REST API 端点,分布在 109 个 blueprint(蓝图,Flask 里组织路由和视图的模块)里,并且有 OpenAPI + Swagger UI 文档。仓库里内置了 118 个一键应用模板,不需要注册任何镜像仓库账号。后端测试超过 4300 个,每次变更都会跑完整套件,CI 还强制测试数量不得下降。这些数字都从仓库直接测得,不是估算。
架构上,ServerKit 走的是经典但务实的路线:Nginx 作为反向代理终止 TLS,把面板请求分流到 Flask API,其他流量代理到对应域名的 Docker 容器。面板自身状态存在 SQLite(默认)或 PostgreSQL,后台任务通过 job scheduler 和 notification bus 跑,扩展功能从 extension runtime 加载。远程服务器则由一个 Go 写的 agent 管理,agent 通过 Socket.IO 命名空间回连主面板,用 HMAC-SHA256 做认证。这个设计让面板既能管本机,也能通过 agent 管多台远程机器,甚至支持 WireGuard 隧道把 NAT 后面的服务暴露出来。
技术栈很直白:后端 Python 3.11 + Flask + SQLAlchemy + Flask-SocketIO,前端 React 18 + Vite + SCSS + Recharts,数据库 SQLite/PostgreSQL,Web 服务器 Nginx + Gunicorn(单 worker 多线程)。安全方面集成了 ClamAV、Lynis、Fail2ban、ModSecurity v3 + OWASP Core Rule Set、grype 容器漏洞扫描、syft SBOM 生成,认证支持 JWT、OAuth 2.0、OIDC、SAML 2.0、WebAuthn 通行密钥。邮件服务器也内置了 Postfix + Dovecot + SpamAssassin + Roundcube。
最让我意外的是它的设计取舍:核心功能已经 feature-complete,之后新功能都通过内置 Marketplace 以扩展形式分发,核心保持精简稳定。安装向导只装你需要的扩展,侧边栏还可以按 Web Hosting、Email Admin、DevOps 等预设切换。这种思路很像 VS Code 的扩展模型——核心不膨胀,生态去补全。另一个亮点是 Build Packs:零 Dockerfile 部署,它检查你的仓库,自动生成 Dockerfile 和 compose 文件。还有 Previews & Snapshots,给 PR 创建临时预览环境,配置快照支持 diff 和一键回滚。
部署方式很灵活:一条 curl 管道命令就能在 Ubuntu 22.04+、Debian 12+、Fedora、RHEL/Rocky/AlmaLinux 9+ 上装好,支持 x86_64 和 ARM64,跑在树莓派上也没问题。也可以 docker compose up -d 跑单容器,但容器化面板不能管理宿主机本身(没有 systemd、没有宿主 nginx),适合放在自己的反向代理后面。更新用蓝绿部署,带预检、数据库备份、迁移和自动回滚,还有 --dry-run 预览。
对开发者来说,这个项目最大的参考价值在于:它示范了如何用一套相对传统的技术栈(Flask + React + Go agent)构建一个覆盖面极广的运维工具,而不是什么都塞进 K8s。如果你正在做类似的控制台、内部运维平台,或者想找一个能二次开发的自托管面板,ServerKit 的 API 设计、扩展机制和 agent 通信方式都值得翻一翻。需要注意的坑是:容器化部署无法管理宿主机,远程 agent 需要额外配对流程,邮件服务器这类功能需要自己配 DNS 记录,别指望开箱即用。整体上,它适合已经有一台或几台 Linux 机器、不想被托管平台绑定、又嫌纯命令行效率低的团队或个人。
内容与图片版权归原作者所有 · 原文: https://github.com/jhd3197/ServerKit