Files
nPanel/README.md
T

235 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# nPanel
![nPanel](frontend/src/assets/images/1panel-logo.svg)
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 社区版;
上游源文件中必要的版权与许可证声明予以保留。