2026-07-30 12:13:28 +08:00
2026-07-30 12:13:28 +08:00
2026-07-29 12:11:42 +08:00
2026-07-29 12:11:42 +08:00
2026-07-29 12:11:42 +08:00

nPanel

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 或本地输入地址即可。

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
    npanel.url = "path:/absolute/path/to/nPanel";
  };
}

在任意已有的 NixOS 模块中引入模块并启用 Docker:

{ inputs, ... }:

{
  imports = [ inputs.npanel.nixosModules.default ];

  virtualisation.docker.enable = true;

  services.nPanel = {
    enable = true;
    securityEntrance = "npanelAccess";
  };
}

securityEntrance 必须是 5 至 116 位的字母或数字。它是由你声明的访问路径后缀, 不是随机生成值,也不能在面板中修改。

2. 构建并切换世代

在你的 NixOS 配置目录执行常规切换:

sudo nixos-rebuild switch --flake .#<主机名>

模块会启动以下服务:

  • npanel-agent.service:执行 Docker、文件、监控、终端等本机运行时操作;
  • npanel-core.service:提供 Web 界面和 API。

3. 获取初始账户密码

首次启动默认创建管理员 admin。若未指定密码文件,模块会生成一次性密码:

sudo cat /var/lib/npanel/initial-password

建议通过秘密管理工具显式提供首次密码,避免密码落入状态目录:

{
  services.nPanel = {
    enable = true;
    securityEntrance = "npanelAccess";
    initialUser = "admin";
    initialPasswordFile = "/run/secrets/npanel-initial-password";
  };
}

initialUser 与 initialPasswordFile 只在状态目录首次初始化时生效。之后请在侧栏的 “用户信息”中修改 nPanel 自身的用户名、密码、MFA 或通行密钥。

4. 访问面板

默认端口为 9999:

http://<服务器地址>:9999/npanelAccess

端口和安全入口均来自 NixOS 配置,并会在每次 nPanel 启动时同步到内部状态。若需要 从网络访问,请自行在 Flake 中配置防火墙、反向代理、TLS 和网络策略。

NixOS 模块选项

{
  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;迁移或备份服务器时应将其作为独立数据处理。

日常运维

# 服务状态
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 标签:

{
  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。

# 仅求值模块和包定义
nix flake check --no-build

# 构建完整 nPanel(前端、core 与 agent)
nix build .#npanel

# 分别构建组件
nix build .#npanel-agent
nix build .#npanel-frontend

架构取舍、功能边界与实施记录见 设计文档。

许可证与归属

nPanel 以 GNU General Public License v3.0 发布。项目源自 1Panel 社区版; 上游源文件中必要的版权与许可证声明予以保留。

S
Description
No description provided
Readme GPL-3.0
6.6 MiB
Languages
Go 70.9%
Vue 28.9%
Shell 0.1%