mirror of
https://github.com/Melorise/nPanel.git
synced 2026-11-07 14:49:35 +00:00
235 lines
8.4 KiB
Markdown
235 lines
8.4 KiB
Markdown
# nPanel
|
||
|
||

|
||
|
||
nPanel 是面向 **NixOS 单机 Docker 服务器** 的 Web 运维面板。它由 1Panel
|
||
社区版分叉而来,并作为独立的 GPL-3.0 项目维护。
|
||
|
||
项目保留了1panel的基础docker管理功能,但移除了服务器宿主机配置管理等服务器基础运维功能。我们认为在nixos上,配置管理应当由nix配置负责,不应该由运维面板擅自管理。你仍然可以使用绝大多数1panel的基础docker功能和docker应用生态,搭建网站和部署应用,享受完整的1panel docker服务器体验,仅主机配置需要自行管理。
|
||
|
||
|
||
## 适用范围
|
||
|
||
nPanel 适合需要在 NixOS 上保留 Docker 应用生态,同时希望通过图形界面完成日常运行时运维的单机服务器,或者1panel的忠实用户,习惯于使用1panel搭建服务器,但又希望尝试使用nixos作为服务器的用户。
|
||
|
||
| nPanel 管理 | 用户的 NixOS 配置管理 |
|
||
| --- | --- |
|
||
| Docker 容器、镜像、网络、卷、Compose 和应用商店 | Docker daemon 的启用与持久化配置 |
|
||
| 网站、反向代理、运行时、数据库、备份与任务 | 防火墙、网络、DNS、主机名、时区与内核参数 |
|
||
| 文件、终端、系统资源、GPU、进程、日志和 systemd 运行时状态 | SSH、用户、密钥、磁盘、挂载、交换与引导配置 |
|
||
| nPanel 自己的账户、密码、MFA、通行密钥和 API 设置 | Flake、模块层次、`hardware-configuration.nix` 及其他配置源文件 |
|
||
|
||
nPanel 不会扫描、生成、编辑或重组你的nix配置,也不会写入 `daemon.json`、
|
||
`sshd_config`、`fstab`、防火墙规则、`/etc` 生成配置或 systemd 单元文件。
|
||
|
||
## 快速开始
|
||
|
||
### 1. 在 Flake 中引入 nPanel
|
||
|
||
我们推荐你使用nix flake管理你的配置文件。本项目后续所有文档说明都假设你已经在使用nix flake。如果你尚未使用flake,可自行查阅资料将你的配置调整为nix flake配置。
|
||
|
||
以下示例使用本地源码树;将 `path:` 地址替换为你实际使用的 Git 或本地输入地址即可。
|
||
|
||
```nix
|
||
{
|
||
inputs = {
|
||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
|
||
npanel.url = "path:/absolute/path/to/nPanel";
|
||
};
|
||
}
|
||
```
|
||
|
||
在任意已有的 NixOS 模块中引入模块并启用 Docker:
|
||
|
||
```nix
|
||
{ inputs, ... }:
|
||
|
||
{
|
||
imports = [ inputs.npanel.nixosModules.default ];
|
||
|
||
virtualisation.docker.enable = true;
|
||
|
||
services.nPanel = {
|
||
enable = true;
|
||
securityEntrance = "npanelAccess";
|
||
};
|
||
}
|
||
```
|
||
|
||
`securityEntrance` 必须是 5 至 116 位的字母或数字。它是由你声明的访问路径后缀,
|
||
不是随机生成值,也不能在面板中修改。
|
||
|
||
### 2. 构建并切换世代
|
||
|
||
在你的 NixOS 配置目录执行常规切换:
|
||
|
||
```bash
|
||
sudo nixos-rebuild switch --flake .#<主机名>
|
||
```
|
||
|
||
模块会启动以下服务:
|
||
|
||
- `npanel-agent.service`:执行 Docker、文件、监控、终端等本机运行时操作;
|
||
- `npanel-core.service`:提供 Web 界面和 API。
|
||
|
||
### 3. 获取初始账户密码
|
||
|
||
首次启动默认创建管理员 `admin`。若未指定密码文件,模块会生成一次性密码:
|
||
|
||
```bash
|
||
sudo cat /var/lib/npanel/initial-password
|
||
```
|
||
|
||
建议通过秘密管理工具显式提供首次密码,避免密码落入状态目录:
|
||
|
||
```nix
|
||
{
|
||
services.nPanel = {
|
||
enable = true;
|
||
securityEntrance = "npanelAccess";
|
||
initialUser = "admin";
|
||
initialPasswordFile = "/run/secrets/npanel-initial-password";
|
||
};
|
||
}
|
||
```
|
||
|
||
`initialUser` 与 `initialPasswordFile` 只在状态目录首次初始化时生效。之后请在侧栏的
|
||
“用户信息”中修改 nPanel 自身的用户名、密码、MFA 或通行密钥。
|
||
|
||
### 4. 访问面板
|
||
|
||
默认端口为 `9999`:
|
||
|
||
```text
|
||
http://<服务器地址>:9999/npanelAccess
|
||
```
|
||
|
||
端口和安全入口均来自 NixOS 配置,并会在每次 nPanel 启动时同步到内部状态。若需要
|
||
从网络访问,请自行在 Flake 中配置防火墙、反向代理、TLS 和网络策略。
|
||
|
||
## NixOS 模块选项
|
||
|
||
```nix
|
||
{
|
||
services.nPanel = {
|
||
enable = true;
|
||
|
||
# 面板运行时状态;默认:/var/lib/npanel
|
||
stateDir = "/var/lib/npanel";
|
||
|
||
# Unix socket 等易失运行时文件;默认:/run/npanel
|
||
runtimeDir = "/run/npanel";
|
||
|
||
# Web 监听端口;默认:9999
|
||
port = 9999;
|
||
|
||
# 必填,5-116 位字母或数字
|
||
securityEntrance = "npanelAccess";
|
||
|
||
# 仅首次初始化使用;默认:admin
|
||
initialUser = "admin";
|
||
|
||
# 仅首次初始化使用;默认:null(生成一次性密码)
|
||
initialPasswordFile = "/run/secrets/npanel-initial-password";
|
||
|
||
# 仅首次初始化使用;可选值:zh、en
|
||
language = "zh";
|
||
};
|
||
}
|
||
```
|
||
|
||
`stateDir` 保存 nPanel 的数据库、Compose 项目、应用数据、上传、备份、任务记录和日志。
|
||
它是可变应用数据,不属于 Nix store;迁移或备份服务器时应将其作为独立数据处理。
|
||
|
||
## 日常运维
|
||
|
||
```bash
|
||
# 服务状态
|
||
systemctl status npanel-agent npanel-core
|
||
|
||
# 查看本次启动日志
|
||
journalctl -u npanel-agent -u npanel-core -b
|
||
|
||
# 跟踪日志
|
||
journalctl -fu npanel-agent
|
||
|
||
# 重启服务
|
||
sudo systemctl restart npanel-agent npanel-core
|
||
```
|
||
|
||
同一兼容发布线内,升级 nPanel 输入并执行常规 `nixos-rebuild switch` 即可。nPanel 不提供
|
||
面板内自更新,软件版本始终由你的 Flake lock 和 NixOS 世代决定。破坏性版本必须遵循对应
|
||
发布说明,不得直接原地升级。
|
||
|
||
若主机安装并启用了 NVIDIA 驱动,`nvidia-smi` 位于当前 NixOS 世代的系统命令路径时,
|
||
nPanel agent 会自动用于 GPU 监控;无需将独立 NVIDIA 包打进 nPanel 配置。
|
||
|
||
## 版本与发布
|
||
|
||
nPanel 使用 `x.y.z` 产品版本号。`x` 仅与上游 1Panel 的主版本线同步;`y` 和 `z` 由
|
||
nPanel 独立演进,不随上游的小版本号变动。首个发布版本为 `2.0.0`,应用商店协议兼容
|
||
基线为上游 `v2.2.3`,两者是独立概念。
|
||
|
||
> **2.0.3 破坏性变更:**2.0.3 不提供从 2.0.1 或 2.0.2 原地升级的兼容迁移。这两个版本
|
||
> 创建的应用配置可能具有不一致的文件权限和数据库启动参数;继续复用原状态目录可能导致
|
||
> 数据库无法启动。升级者必须自行迁移所需业务数据,并以 2.0.3 重新部署面板及数据库。
|
||
|
||
发布分支同时是建议的 Flake 输入来源;不要以 Git tag 作为输入。tag 仅用于标记对应的
|
||
unstable 发布提交,不能表达你正在使用的 NixOS 输入渠道。
|
||
|
||
| 用途 | 输入来源 | 分支格式 | `2.0.0` 示例 |
|
||
| --- | --- | --- | --- |
|
||
| 持续开发 | `nixos-unstable` | `dev-v2` | `dev-v2` |
|
||
| unstable 发布 | `nixos-unstable` | `nixos-unstable/vX.Y.Z` | `nixos-unstable/v2.0.0` |
|
||
| 稳定版发布 | 相应 NixOS 稳定分支 | `nixos-XX.XX/vX.Y.Z` | `nixos-26.05/v2.0.0` |
|
||
|
||
稳定版分支遵循对应 NixOS 官方支持周期:下一代 NixOS 稳定版发布后,上一个稳定版分支不再
|
||
继续获得支持。不同发布分支的 nPanel 功能与产品版本相同,唯一差异是锁定的 `nixpkgs`
|
||
输入来源。
|
||
|
||
例如,`nixos-26.05/v2.0.0` 应作为 Flake 输入,而不是 `v2.0.0` 标签:
|
||
|
||
```nix
|
||
{
|
||
inputs.npanel.url = "github:Melorise/nPanel/nixos-26.05/v2.0.0";
|
||
}
|
||
```
|
||
|
||
## 安全模型
|
||
|
||
nPanel 的 agent 以 root 运行,并访问 Docker socket。Docker socket 在实际效果上等同
|
||
root 权限,因此 nPanel 应被视为特权控制平面:
|
||
|
||
- 为面板设置唯一、不可猜测的 `securityEntrance`;
|
||
- 使用强密码,并启用 MFA 或通行密钥;
|
||
- 将面板置于受信网络、反向代理或 VPN 后;
|
||
- 仅向必要的网络开放 `services.nPanel.port`;
|
||
- 定期备份 `stateDir`,并妥善保护首次密码文件和备份凭据。
|
||
|
||
文件管理、终端和进程控制遵循服务实际权限。Nix store 与由 NixOS 生成的系统路径不应被
|
||
面板当作可持久化配置目标。
|
||
|
||
## 开发与构建
|
||
|
||
本仓库是独立 Flake:应用源码为当前目录 `self`,Flake 输入仅包含 `nixpkgs`。
|
||
|
||
```bash
|
||
# 仅求值模块和包定义
|
||
nix flake check --no-build
|
||
|
||
# 构建完整 nPanel(前端、core 与 agent)
|
||
nix build .#npanel
|
||
|
||
# 分别构建组件
|
||
nix build .#npanel-agent
|
||
nix build .#npanel-frontend
|
||
```
|
||
|
||
架构取舍、功能边界与实施记录见
|
||
[设计文档](docs/nPanel-nixos-design.md)。
|
||
|
||
## 许可证与归属
|
||
|
||
nPanel 以 [GNU General Public License v3.0](LICENSE) 发布。项目源自 1Panel 社区版;
|
||
上游源文件中必要的版权与许可证声明予以保留。
|