Files
nPanel/README.md
T

6.3 KiB
Raw Blame History

nPanel

nPanel

nPanel 是面向 NixOS 单机 Docker 服务器 的 Web 运维面板。它由 1Panel 社区版分叉而来,作为独立的 GPL-3.0 项目维护。

它保留 Docker、Compose、应用商店、网站、数据库、备份、文件、终端、监控、进程和 日志等运行时运维能力;NixOS 的持久化系统策略仍完全由用户自己的 Flake 管理。

项目仍处于预发布阶段。请先在可恢复的主机或测试环境中部署,并为 nPanel 的状态目录 做独立备份。

适用范围

nPanel 适合需要在 NixOS 上保留 Docker 应用生态,同时希望通过图形界面完成日常运行时 运维的单机服务器。

nPanel 管理 用户的 NixOS 配置管理
Docker 容器、镜像、网络、卷、Compose 和应用商店 Docker daemon 的启用与持久化配置
网站、反向代理、运行时、数据库、备份与任务 防火墙、网络、DNS、主机名、时区与内核参数
文件、终端、系统资源、GPU、进程、日志和 systemd 运行时状态 SSH、用户、密钥、磁盘、挂载、交换与引导配置
nPanel 自己的账户、密码、MFA、通行密钥和 API 设置 Flake、模块层次、hardware-configuration.nix 及其他配置源文件

nPanel 不会扫描、生成、编辑或重组你的 Flake,也不会写入 daemon.json、 sshd_config、fstab、防火墙规则、/etc 生成配置或 systemd 单元文件。

快速开始

1. 在 Flake 中引入 nPanel

以下示例使用本地源码树;将 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 的 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 社区版; 上游源文件中必要的版权与许可证声明予以保留。