linux-dash 配置参数详解
linux-dash 2.0 全部可配置项逐项实测:监听地址与端口取值链、pm2/systemd 托管参数、ping_hosts 清单、redis/memcached/cron 内嵌常量、服务端模块改名禁用、前端页签与 HTTP Basic 认证双方案,含 5 条排障实录。
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) |
| Nginx | 1.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 层)。下文按此分类逐项展开。
二、前置条件
- 已按《Ubuntu 22.04 安装 linux-dash 指南》完成方案 A(Node.js 路径)或方案 B(PHP + Apache 路径)的安装,面板可通过
curl -s 'http://127.0.0.1/server/?module=general_info'取到 JSON 数据。 - 演示账号统一为 root(密码 q1w2e3r4);HTTP Basic 认证演示账号为 admin(密码 q1w2e3r4)。
- 修改配置前建议备份涉及文件:
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.js | pm2 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 Basic | nginx -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_PORT | index.js | 80 | Node 后端监听端口 | 重启进程 |
--host / LINUX_DASH_SERVER_HOST | index.js | 0.0.0.0 | Node 后端监听地址 | 重启进程 |
name | ecosystem.config.js | Linux Dash | pm2 应用名 | pm2 restart |
script | ecosystem.config.js | ./app/server/index.js | pm2 启动脚本 | pm2 restart |
env.LINUX_DASH_SERVER_PORT | ecosystem.config.js | 2800 | pm2 托管时端口 | pm2 restart |
watch | ecosystem.config.js | false | pm2 文件变动重启 | pm2 restart |
redisPassword | linux_json_api.sh redis() | 空字符串 | Redis 认证口令 | 即时(下轮请求) |
| memcached 目标 | linux_json_api.sh memcached() | 127.0.0.1:11211 | Memcached 连接地址 | 即时 |
cronLog / 行数 | linux_json_api.sh cron_history() | /var/log/syslog / 50 | cron 历史日志来源与条数 | 即时 |
| ping 主机清单 | config/ping_hosts | google.com、yahoo.com、twitter.com | ping 模块探测目标 | 即时 |
| 模块开关(服务端) | linux_json_api.sh 函数定义 | 全部启用 | 禁用单个数据模块 | 即时 |
| 页签与插件布局 | src/js/core/routes.js | 5 页签 26 插件 | 前端显示内容 | 需 Gulp 重建 |
auth_basic | Nginx server 块 | 无 | HTTP Basic 认证 | nginx -s reload |
AuthType Basic | Apache Directory 块 | 无 | HTTP Basic 认证 | apache2ctl -k restart |
💡 说明:表格中「即时」表示数据源脚本按 HTTP 请求逐次执行(
index.js以子进程方式 spawnlinux_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)。注意两个前置:
- 必须安装 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
- 清单里的主机应当选本网络可达的目标;海外主机在境内网络会超时拉长响应时间。
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 不落盘存储),对外仅暴露一个带认证的入口。
组成(全部为前文实测过的配置组合):
- 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 节)。 - Nginx 监听 8080 对外 +
auth_basic(admin / q1w2e3r4)反代到本机 Node,保留 WebSocket 升级头(5.11 节配置原文)。 - 数据源依赖补齐:
apt-get install -y lsb-release gawk rsyslog iputils-ping(依次影响常规信息 OS 字段、cron 两模块、ping 模块,排障实录见安装指南 FAQ)。 - 敏感模块按需禁用:不需要对外暴露账户表时改名
user_accounts()(5.9 节手法)。 - 面板所在机器本机跑有 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 节排障实录)。
八、参考链接
- 官方仓库(index.js / linux_json_api.sh 源码):https://github.com/tariqbuilds/linux-dash (查询日期 2026-10-23)
- 官方 Wiki:https://github.com/tariqbuilds/linux-dash/wiki (查询日期 2026-10-23)
- 本专栏姊妹篇:《linux-dash 介绍与选型指南》、《Ubuntu 22.04 安装 linux-dash 指南》