linux-dash 配置参数详解

linux-dash 2.0 全部可配置项逐项实测:监听地址与端口取值链、pm2/systemd 托管参数、ping_hosts 清单、redis/memcached/cron 内嵌常量、服务端模块改名禁用、前端页签与 HTTP Basic 认证双方案,含 5 条排障实录。

linux-dash系统监控Linux可观测性2026/10/23

linux-dash 配置参数详解

目标:系统梳理 linux-dash 2.0 的全部可配置项——监听地址与端口、进程托管参数、模块数据源内嵌常量、ping 主机清单、模块级开关与页面页签、HTTP Basic 认证——逐项给出默认值、修改方法与实测验证。全部命令与回显已在 Ubuntu 22.04 环境实测通过。

一、环境信息

项目值(实测)
操作系统Ubuntu 22.04.5 LTS(内核 6.8.0-138-generic)
linux-dash 版本2.0.0(master 分支,提交 186a802,2020-03-22),安装目录 /opt/linux-dash
Node.js 后端v20.20.2(方案 A 演示机,主机名 linuxdash-node)
PHP + Apache 后端PHP 8.1.2-1ubuntu2.28 + Apache 2.4.52(方案 B 演示机,主机名 linuxdash-php)
Nginx1.18.0 (Ubuntu)(认证节)
涉及文件app/server/index.js、app/server/linux_json_api.sh、app/server/config/ping_hosts、ecosystem.config.js

💡 说明:linux-dash 与常见软件不同,没有一个统一的中央配置文件。它的配置分散在四类位置:① Node 后端的启动参数/环境变量;② 仓库根的 pm2 配置 ecosystem.config.js;③ 数据源脚本 linux_json_api.sh 内嵌常量与 config/ 目录;④ 对外访问控制(Nginx/Apache 层)。下文按此分类逐项展开。

二、前置条件

  1. 已按《Ubuntu 22.04 安装 linux-dash 指南》完成方案 A(Node.js 路径)或方案 B(PHP + Apache 路径)的安装,面板可通过 curl -s 'http://127.0.0.1/server/?module=general_info' 取到 JSON 数据。
  2. 演示账号统一为 root(密码 q1w2e3r4);HTTP Basic 认证演示账号为 admin(密码 q1w2e3r4)。
  3. 修改配置前建议备份涉及文件:
cp /opt/linux-dash/app/server/linux_json_api.sh /opt/linux-dash/app/server/linux_json_api.sh.bak
cp /opt/linux-dash/app/server/config/ping_hosts /opt/linux-dash/app/server/config/ping_hosts.bak

执行后无输出即成功(echo $? 确认退出码为 0)。

三、参数查看与修改方式

linux-dash 的「参数」本质是三份源码文件里的变量与环境变量,查看方式即读源码,修改后必须重启对应进程才生效:

配置对象位置生效方式
Node 监听地址/端口app/server/index.js 头部取值逻辑;--port/--host 参数或 LINUX_DASH_SERVER_PORT/LINUX_DASH_SERVER_HOST 环境变量重启 Node 进程(或 pm2 restart/systemctl restart linux-dash)
pm2 托管参数仓库根 ecosystem.config.jspm2 restart 或 pm2 start ecosystem.config.js 重读
模块内嵌常量app/server/linux_json_api.sh 各函数内 local 变量无需重启!脚本每次请求都重新执行,改完即生效
ping 主机清单app/server/config/ping_hosts同上,逐请求读取,改完即生效
页面页签与插件前端源码 src/js/core/routes.js(需 Gulp 重构建)重建 app/linuxDash.min.js 后刷新浏览器
访问控制Nginx auth_basic 或 Apache AuthType Basicnginx -s reload / apache2ctl -k restart

先实测「改配置要重启什么」这一核心差异——ping_hosts 是逐请求读取的,改完立即生效:

printf 'baidu.com\n223.5.5.5\n' > /opt/linux-dash/app/server/config/ping_hosts
cd /opt/linux-dash/app/server && bash linux_json_api.sh ping

实测回显(无需任何重启):

[{"host": "baidu.com", "ping": 26.350 },{"host": "223.5.5.5", "ping": 20.531 }]

而 Node 端口参数则必须重启进程,实测改环境变量重启后监听变化见 5.1 节。

四、参数总览

参数/配置项位置默认值作用生效方式
--port / LINUX_DASH_SERVER_PORTindex.js80Node 后端监听端口重启进程
--host / LINUX_DASH_SERVER_HOSTindex.js0.0.0.0Node 后端监听地址重启进程
nameecosystem.config.jsLinux Dashpm2 应用名pm2 restart
scriptecosystem.config.js./app/server/index.jspm2 启动脚本pm2 restart
env.LINUX_DASH_SERVER_PORTecosystem.config.js2800pm2 托管时端口pm2 restart
watchecosystem.config.jsfalsepm2 文件变动重启pm2 restart
redisPasswordlinux_json_api.sh redis()空字符串Redis 认证口令即时(下轮请求)
memcached 目标linux_json_api.sh memcached()127.0.0.1:11211Memcached 连接地址即时
cronLog / 行数linux_json_api.sh cron_history()/var/log/syslog / 50cron 历史日志来源与条数即时
ping 主机清单config/ping_hostsgoogle.com、yahoo.com、twitter.comping 模块探测目标即时
模块开关(服务端)linux_json_api.sh 函数定义全部启用禁用单个数据模块即时
页签与插件布局src/js/core/routes.js5 页签 26 插件前端显示内容需 Gulp 重建
auth_basicNginx server 块无HTTP Basic 认证nginx -s reload
AuthType BasicApache Directory 块无HTTP Basic 认证apache2ctl -k restart

💡 说明:表格中「即时」表示数据源脚本按 HTTP 请求逐次执行(index.js 以子进程方式 spawn linux_json_api.sh <模块名>),改完保存即对下一次请求生效;「重启进程」类的属于 Web 层启动期读取的参数。

五、核心参数分类详解

5.1 监听地址与端口(Node 后端)

app/server/index.js 头部的取值链是理解这项配置的关键(源码摘录,实测环境读取):

var host    = args.host || process.env.LINUX_DASH_SERVER_HOST || '0.0.0.0'
var port    = args.port || process.env.LINUX_DASH_SERVER_PORT || 80

即命令行参数 > 环境变量 > 默认值。逐项实测:

默认启动(0.0.0.0:80):

cd /opt/linux-dash/app/server && node index.js
netstat -ltnp | grep node

实测回显:

Linux Dash Server Started on 0.0.0.0:80!
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3833/node

命令行参数方式(端口 8081、仅本机):

node index.js --port 8081 --host 127.0.0.1
netstat -ltnp | grep node
netstat -ltn | grep -c '0.0.0.0:8081'

实测回显:

Linux Dash Server Started on 127.0.0.1:8081!
tcp        0      0 127.0.0.1:8081          0.0.0.0:*               LISTEN      4163/node
0

第三行计数为 0,证明未绑定所有网卡——--host 127.0.0.1 后外部无法直连,只能经同机反代访问,这是推荐的对外暴露方式。环境变量方式:

kill $(netstat -ltnp | grep ':8081' | grep -oE '[0-9]+/node' | cut -d/ -f1)
cd /opt/linux-dash/app/server
LINUX_DASH_SERVER_PORT=80 nohup node index.js > /var/log/linux-dash.log 2>&1 &
cat /var/log/linux-dash.log

实测回显:

Linux Dash Server Started on 0.0.0.0:80!

⚠️ 注意:1024 以下端口需 root 权限监听;普通用户部署时用 --port 8080 这类非特权端口,再由 Nginx 监听对外端口。

5.2 pm2 配置文件 ecosystem.config.js

仓库根自带 pm2 配置文件,内容(实测读取,一字未改):

module.exports = {
  apps : [{
    name: 'Linux Dash',
    script: './app/server/index.js',
    watch: false,
    env: {
      "LINUX_DASH_SERVER_PORT": 2800
    },
  }],
};

逐项说明:name 为 pm2 里的应用名(带空格,操作时注意引号);script 相对路径以执行 pm2 命令时的目录为基准(仓库根);watch: false 关闭文件监听自动重启;env.LINUX_DASH_SERVER_PORT: 2800 表示经 pm2 启动时面板跑在 2800 端口。实测启动与验证:

cd /opt/linux-dash
pm2 start ecosystem.config.js
curl -s 'http://127.0.0.1:2800/server/?module=current_ram'

实测回显(启动表节选):

[PM2][WARN] Applications Linux Dash not running, starting...
[PM2] App [Linux Dash] launched (1 instances)
┌────┬───────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name          │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼───────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ Linux Dash    │ default     │ 2.0.0   │ fork    │ 5100     │ 0s     │ 0    │ online    │ 0%       │ 31.0mb   │ root     │ disabled │
└────┴───────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
{ "total": 32050.4, "used": 20488.2, "available": 11562.3 }

要改 pm2 形态下的端口,改 env.LINUX_DASH_SERVER_PORT 后 pm2 restart 'Linux Dash' 即可(详细命令见《linux-dash 2.0 API 接口详解》)。

5.3 systemd 托管时的端口参数

以 systemd 托管时,端口通过 unit 文件的 Environment= 注入(每行只写一个变量):

[Service]
Type=simple
WorkingDirectory=/opt/linux-dash
Environment=LINUX_DASH_SERVER_PORT=80
Environment=LINUX_DASH_SERVER_HOST=0.0.0.0
ExecStart=/usr/bin/node /opt/linux-dash/app/server/index.js
Restart=always
RestartSec=5

改完后必须 systemctl daemon-reload && systemctl restart linux-dash。完整 unit 文件、enable 与自动拉起实测见《Ubuntu 22.04 安装 linux-dash 指南》7.3 节,此处结论:Environment= 与命令行参数、shell 环境变量走同一条取值链,三者同时存在时命令行参数优先(本组件 ExecStart 未带参数,故 Environment 实际生效)。

5.4 ping 模块主机清单 config/ping_hosts

ping 模块逐行读取 app/server/config/ping_hosts 并对每个主机执行 ping -qc 2,输出平均往返延迟。默认内容(实测读取):

google.com
yahoo.com
twitter.com

修改为可达主机后实测(见第三节,baidu.com 26.350ms、223.5.5.5 20.531ms)。注意两个前置:

  1. 必须安装 iputils-ping。缺 ping 命令时模块报错且输出空数组(实测):
linux_json_api.sh: line 386: -qc: command not found
linux_json_api.sh: line 386: -qc: command not found
[]

修复:

apt-get install -y iputils-ping
which ping

实测回显:

/usr/bin/ping
  1. 清单里的主机应当选本网络可达的目标;海外主机在境内网络会超时拉长响应时间。

5.5 redis 模块口令常量

linux_json_api.sh 的 redis() 函数头部有一个硬编码口令位(源码摘录):

redis() {

  ########### Enter Your Redis Password  HERE #########
  local redisPassword=''
  ########### Enter Your Redis Password  HERE #########

  local redisCommand=$(type -P redis-cli);
  ...
}

有密码的 Redis 实例把口令填进 redisPassword,脚本会自动拼接 -a <口令> 调用 redis-cli INFO,取回 redis_version、connected_clients、used_memory_human 等六个关键指标。本机无 Redis 时模块输出空对象(实测):

{ }

⚠️ 注意:把生产 Redis 口令写进这个全局可读的脚本文件有泄露风险,建议面板部署在内网、且 Redis 使用仅内网可达的实例;脚本内嵌口令属于该项目的原始设计(2017 年形态),无更安全的替代配置位。

5.6 memcached 模块目标地址常量

memcached() 函数固定连接 127.0.0.1 11211 并发送 stats,取回 bytes 相关计数。要监控远端 Memcached 需直接修改该函数中的 nc -w 1 127.0.0.1 11211 为目标地址端口。本机无 Memcached 时输出空对象(实测同 redis,{ })。

5.7 cron_history 日志路径与条数常量

cron_history() 函数头部两个常量(源码摘录):

local cronLog='/var/log/syslog'
local numberOfLines='50'

它从 /var/log/syslog 里 grep 最近 50 条 CRON 记录。两个实测前置:日志文件由 rsyslog 产生,最小化系统需 apt-get install -y rsyslog;awk 解析依赖 gawk 的 gensub 函数,Ubuntu 22.04 默认 mawk 会报 function gensub never defined,需 apt-get install -y gawk(两项修复的完整实录见《Ubuntu 22.04 安装 linux-dash 指南》Q3)。scheduled_crons 模块则固定读 /etc/crontab 与 /etc/cron.d/ 并遍历各用户 crontab,无参数可调。

5.8 ip_addresses 模块的外网 IP 探测

ip_addresses() 模块枚举本机网卡(依赖 net-tools 的 ifconfig)后,用 dig +short myip.opendns.com @resolver1.opendns.com 探测出口公网 IP。实测未安装 dig 的系统(Ubuntu 22.04 默认不带 dnsutils):

which dig || echo 'dig 不存在'
bash linux_json_api.sh ip_addresses

实测回显:

dig 不存在
[{"interface" : "eth0", "ip" : "10.89.57.2"}, {"interface" : "lo", "ip" : ""}, { "interface": "external", "ip": "" } ]

外部 IP 字段为空串,且 stderr 报 +short: command not found($digCmd 为空导致命令行残缺)。修复与取舍:apt-get install -y dnsutils 可让公网 IP 字段生效,但探测依赖能直连 resolver1.opendns.com(境外 DNS);无法出网的服务器保持现状即可,内网网卡 IP 仍正常显示。

5.9 模块开关(服务端禁用单个数据模块)

不想在面板上暴露某类信息(比如 user_accounts 的全量账户表)时,最快的办法是把对应函数改名让它不再被派发。linux_json_api.sh 末尾的派发逻辑(源码摘录):

fnCalled="$1"

# Check if the function call is indeed a function.
if [ -n "$(type -t $fnCalled)" ] && [ "$(type -t $fnCalled)" = function ]; then
    ${fnCalled}
else
    echo '{\"success\":false,\"status\":\"Invalid module\"}'
fi

即「模块名 = 函数名」,找不到同名函数就返回 Invalid module。实测禁用与恢复 redis 模块:

cd /opt/linux-dash/app/server
sed -i 's/^redis() {/_redis_off() {/' linux_json_api.sh
curl -s -o /dev/null -w 'HTTP状态:%{http_code} ' 'http://127.0.0.1/server/?module=redis'
curl -s 'http://127.0.0.1/server/?module=redis'
echo
sed -i 's/^_redis_off() {/redis() {/' linux_json_api.sh
curl -s -o /dev/null -w 'HTTP状态:%{http_code}\n' 'http://127.0.0.1/server/?module=redis'

实测回显:

HTTP状态:200 {"success":false,"status":"Invalid module"}
HTTP状态:200

⚠️ 排障实录:禁用模块不要注释函数头那一行(sed 's/^redis() {/#redis() {/')——函数体还在,Bash 解析直接语法破损,实测该模块返回 Internal Server Error(HTTP 500),因为 Node 侧 spawn 收到非 0 退出码。改名(如加 _off 后缀)保留函数体才是正确姿势,恢复也只需把名字改回去。

5.10 页面页签与前端插件开关

前端把 26 个插件分布在 5 个页签(源码 src/js/core/routes.js,实测读取):/system-status(内存/负载/CPU/磁盘/Swap/Docker 进程等 9 插件)、/basic-info(常规信息/内存详情/CPU 详情/定时任务/IO 等 6 插件)、/network(上传/下载速率/IP/连接/ARP/ping/流量 7 插件)、/accounts(账户/在线登录/最近登录 3 插件)、/apps(常见应用/Memcached/Redis/PM2 4 插件)。

要隐藏某个插件,注释 routes.js 对应路由模板里的元素行,例如去掉 Docker 卡片:

// '<docker-processes sortablejs-id="docker"></docker-processes> ',

改完需重新构建前端。⚠️ 前端构建链是 Gulp 3.9 + AngularJS 1.3(package.json devDependencies),与新版 Node 不兼容,重建需临时切换 Node 11 及以下版本;对多数用户更现实的做法是用 5.9 节的服务端禁用:插件拿不到数据即不再有意义,页面布局不变。app/index.html 与预构建的 app/linuxDash.min.js 是实际对外服务的产物,直接改 min 文件不可维护,不推荐。

5.11 HTTP Basic 认证(Web 层访问控制)

linux-dash 本体无认证功能(官方 README 明确声明),访问控制必须落在 Web 层。两种实测方案:

方案一:Nginx 反代 + auth_basic(Node 路径,Node 仅绑 127.0.0.1):

apt-get install -y nginx apache2-utils
htpasswd -bc /etc/nginx/.htpasswd admin q1w2e3r4

实测回显:

Adding password for user admin

/etc/nginx/sites-available/linux-dash:

server {
    listen 8080;
    server_name _;

    auth_basic "Linux Dash Admin";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://127.0.0.1:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 300s;
    }
}

启用并验证:

rm -f /etc/nginx/sites-enabled/default
ln -sf /etc/nginx/sites-available/linux-dash /etc/nginx/sites-enabled/linux-dash
nginx -t
service nginx start
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/
curl -sI http://127.0.0.1:8080/ | grep -iE 'HTTP/|WWW-Authen'
curl -s -o /dev/null -w '%{http_code}\n' -u admin:nope http://127.0.0.1:8080/
curl -s -o /dev/null -w '%{http_code}\n' -u admin:q1w2e3r4 http://127.0.0.1:8080/

实测回显:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
401
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Linux Dash Admin"
401
200

curl 的 -u 参数在实测中等价于手工携带 Authorization 头(admin:q1w2e3r4 的 Base64 为 YWRtaW46cTF3MmUzcjQ=):

curl -s -o /dev/null -w '%{http_code}\n' -H 'Authorization: Basic YWRtaW46cTF3MmUzcjQ=' 'http://127.0.0.1:8080/server/?module=load_avg'

实测回显:

200

方案二:Apache Directory + htpasswd(PHP 路径):

    <Directory /opt/linux-dash/app>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        DirectoryIndex index.html index.php
        AuthType Basic
        AuthName "Linux Dash Admin"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

⚠️ 排障实录(实测复现):<Directory> 里若同时保留 Require all granted 与 Require valid-user,Apache 2.4 按多条 Require 的「或」语义合并,all granted 恒放行,认证整体失效——实测修正前无凭据返回 200,删除 Require all granted 行后恢复「无凭据 401、错误密码 401、正确密码 200」:

401
401
200

六、生产配置模板

适用场景:1 vCPU / 1GB 内存级别的小型 VPS 或内网测试服务器(Ext4 磁盘即可,linux-dash 不落盘存储),对外仅暴露一个带认证的入口。

组成(全部为前文实测过的配置组合):

  1. Node 后端绑本机:Environment=LINUX_DASH_SERVER_HOST=127.0.0.1、Environment=LINUX_DASH_SERVER_PORT=80,systemd 托管、Restart=always(unit 全文与实测见《Ubuntu 22.04 安装 linux-dash 指南》7.3 节)。
  2. Nginx 监听 8080 对外 + auth_basic(admin / q1w2e3r4)反代到本机 Node,保留 WebSocket 升级头(5.11 节配置原文)。
  3. 数据源依赖补齐:apt-get install -y lsb-release gawk rsyslog iputils-ping(依次影响常规信息 OS 字段、cron 两模块、ping 模块,排障实录见安装指南 FAQ)。
  4. 敏感模块按需禁用:不需要对外暴露账户表时改名 user_accounts()(5.9 节手法)。
  5. 面板所在机器本机跑有 Redis/Memcached 时,才在 5.5/5.6 节的常量位填入口令与地址,否则保持空对象输出。

💡 说明:这套模板的每一项都对应前文的实测小节,可直接按小节逐条落地;linux-dash 无历史存储与告警,长期运行的监控补位建议配合外部采集(如需要请参考专栏后续组合篇)。

七、常见问题(FAQ)

Q1:改了配置怎么不生效? 分两类:改 linux_json_api.sh、config/ping_hosts 即时生效(逐请求执行);改端口/环境变量/pm2/systemd 配置必须重启对应进程——systemctl restart linux-dash、pm2 restart 'Linux Dash' 或重跑 node index.js。判断当前监听:netstat -ltnp | grep node。

Q2:访问模块接口返回 {"success":false,"status":"Invalid module"} 是什么意思? 两种可能:模块名拼错(合法名单见 5.9 节派发逻辑,函数名即模块名);或该函数被按 5.9 节手法改名禁用。HTTP 状态码仍为 200,注意与 500(Bash 语法破损)区分。

Q3:/server/?module=<名> 与浏览器面板数据不一致? 面板优先走 WebSocket 通道,而 linux-dash 2.0 的 WS 响应拼接存在未转义引号的已知缺陷,含引号输出的模块经 WS 可能解析失败;REST 接口 GET /server/?module=<模块名> 是最可靠的验证与兜底通道(缺陷详情与实测报错见《Ubuntu 22.04 安装 linux-dash 指南》Q5)。

Q4:cpu_temp 模块输出 []? CPU 温度需要 lm-sensors:apt-get install -y lm-sensors && sensors-detect 后重启面板进程;树莓派系统(raspbian)例外,直接读 thermal_zone。无 sensors 命令时模块静默返回 [](实测)。

Q5:认证配了却不起作用(Nginx/Apache 都可能)? Nginx:确认请求命中的是启用了 auth_basic 的 server 块(nginx -T | grep -A2 auth_basic 核对)且 .htpasswd 路径可读。Apache:检查 <Directory> 块里是否残留 Require all granted(5.11 节排障实录)。

八、参考链接

  1. 官方仓库(index.js / linux_json_api.sh 源码):https://github.com/tariqbuilds/linux-dash (查询日期 2026-10-23)
  2. 官方 Wiki:https://github.com/tariqbuilds/linux-dash/wiki (查询日期 2026-10-23)
  3. 本专栏姊妹篇:《linux-dash 介绍与选型指南》、《Ubuntu 22.04 安装 linux-dash 指南》

站内相关:《linux-dash 配置参数详解》、《linux-dash 2.0 API 接口详解》