前言

Komari 是一款轻量服务器状态监控工具,也就是常说的「探针」。主要优点有:

  • 极低的系统资源占用
  • 极简的部署与维护体验
  • 直观美观的 Web 界面

本文主要记录我在 Debian 和 Alpine 系统下使用二进制安装与配置 Komari 的流程,作为日常的速查手册。

部署服务端

Komari 服务端即负责接收与存储所有被控节点上报的数据,为保证主控服务的稳定性与网络兼容性,建议部署在运行稳定且原生支持双栈网络 (IPv4 + IPv6) 的服务器上 1

本文以 Netcup RS Piccolo ARMore 实例作为服务端部署的机器,它小巧强大、物美价廉、罕见珍奇,是我的心头之好~

环境准备

出于安全考量,Komari 服务端无需特权用户运行,为其创建一个无登录权限的用户:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 更新系统软件包

sudo apt update && sudo apt upgrade -y

# 创建专属的无登录权限用户

sudo useradd -r -s /usr/sbin/nologin komari

# 创建工作与数据存储目录

sudo mkdir -p /opt/komari/server

# 配置文件与目录权限

sudo chown -R komari:komari /opt/komari/server

sudo chmod 750 /opt/komari/server

下载安装服务端

根据服务器硬件架构,下载对应的最新可执行二进制文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 当前版本:1.1.8

# 架构参数:komari-linux-amd64 | komari-linux-arm64

curl -L -o /tmp/komari-server https://github.com/komari-monitor/komari/releases/download/1.1.8/komari-linux-amd64

# 针对纯 IPv6 服务器的代理 GitHub 下载方式

curl -L -o /tmp/komari-server https://gh-proxy.com/https://github.com/komari-monitor/komari/releases/download/1.1.8/komari-linux-amd64

# 部署到指定目录

sudo mv /tmp/komari-server /opt/komari/komari-server

# 设置权限

sudo chown root:root /opt/komari/komari-server

sudo chmod 755 /opt/komari/komari-server

配置 Systemd 守护进程

创建并编辑服务文件 /etc/systemd/system/komari.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[Unit]

Description=Komari Monitor Server

After=network-online.target

Wants=network-online.target

[Service]

Type=simple

User=komari

Group=komari

WorkingDirectory=/opt/komari/server

ExecStart=/opt/komari/komari-server server -l 127.0.0.1:25774

Restart=always

RestartSec=5s

NoNewPrivileges=yes

ProtectSystem=strict

ProtectHome=yes

PrivateTmp=yes

ProtectKernelTunables=yes

ProtectControlGroups=yes

ReadWritePaths=/opt/komari/server

LimitNOFILE=65536

[Install]

WantedBy=multi-user.target

启动与验证服务

重载 systemd 守护进程并启动 Komari 服务:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo systemctl daemon-reload

sudo systemctl enable --now komari

# 检查服务运行状态

sudo systemctl status komari

# 首次启动日志包含初始管理员用户名和密码

sudo journalctl -u komari -f

反向代理

以 Nginx 为例,反向代理配置示例文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
server {

    listen 80;

    listen [::]:80;

    server_name komari.your.domain;

    return 301 https://$host$request_uri;

}

server {

    listen 443 ssl;

    listen [::]:443 ssl;

    http2 on;

    server_name komari.your.domain;

    ssl_certificate     /etc/nginx/cert/komari.your.domain.pem;

    ssl_certificate_key /etc/nginx/cert/komari.your.domain.key;

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_ecdh_curve X25519:P-256:P-384;

    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE+AES128:RSA+AES128:ECDHE+AES256:RSA+AES256';

    ssl_prefer_server_ciphers off;

    ssl_session_timeout 1d;

    ssl_session_cache shared:MozSSL:10m;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    access_log /var/log/nginx/komari.your.domain.access.log;

    error_log /var/log/nginx/komari.your.domain.error.log;

    add_header X-Frame-Options "SAMEORIGIN" always;

    add_header X-XSS-Protection "1; mode=block" always;

    add_header X-Content-Type-Options "nosniff" always;

    add_header Referrer-Policy "no-referrer-when-downgrade" always;

    add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'" always;

    location / {

        proxy_pass http://127.0.0.1:25774;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;

        proxy_set_header X-Real-IP         $remote_addr;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection "upgrade";

        proxy_buffering off;

        client_max_body_size 50M;

        proxy_read_timeout 86400;

        proxy_send_timeout 86400;

    }

}

重载 Nginx 配置:

1
sudo nginx -t && sudo nginx -s reload

访问 komari.your.domain ,使用初始用户名和密码登录。

添加受控节点

此时可以在管理后台添加第一台需要监控的服务器,复制被控端 (Agent) 专属的通信 Token 备用。

agent-token.webp

升级服务端程序

若 Komari 发布新版本,通过以下步骤升级服务端程序:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 停止当前运行的 Komari 服务

sudo systemctl stop komari

# 更新二进制文件(自行替换版本号与对应架构)

sudo curl -L -o /opt/komari/komari-server https://github.com/komari-monitor/komari/releases/download/<新版本号>/komari-linux-<架构>

# 设置权限

sudo chown root:root /opt/komari/komari-server

sudo chmod 755 /opt/komari/komari-server

# 重启服务并检查运行状态

sudo systemctl restart komari

sudo systemctl status komari

通用 Linux 部署被控端 (Agent)

Debian GNU/Linux 通过 Systemd 管理守护进程,这是目前绝大多数主流 Linux 发行版的标准做法。

下载安装被控端

准备 Agent 工作目录:

1
sudo mkdir -p /opt/komari/agent

根据服务器架构下载对应的 Agent 二进制程序:

1
2
3
4
5
# 当前版本:1.1.80

# 架构参数:komari-agent-linux-amd64 | komari-agent-linux-arm64

sudo curl -L -o /opt/komari/komari-agent https://github.com/komari-monitor/komari-agent/releases/download/1.1.80/komari-agent-linux-amd64

设置正确的权限:

1
2
3
sudo chown root:root /opt/komari/komari-agent

sudo chmod +x /opt/komari/komari-agent

配置 Systemd 守护进程

编辑 /etc/systemd/system/komari-agent.service 服务配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[Unit]

Description=Komari Agent Service

After=network-online.target

Wants=network-online.target

[Service]

Type=simple

User=root

Group=root

# 将 URL 和 <token> 替换为你在服务端后台生成的实际信息

# 若 Agent 与服务端部署在同一台机器,URL 可直接填写  http://127.0.0.1:25774

ExecStart=/opt/komari/komari-agent -e https://komari.your.domain -t <token> --disable-web-ssh --disable-auto-update --month-rotate 1

WorkingDirectory=/opt/komari/agent

Restart=always

RestartSec=10s

LimitNOFILE=65536

[Install]

WantedBy=multi-user.target

重载 Systemd 配置并启动 Komari Agent 服务:

1
2
3
sudo systemctl daemon-reload

sudo systemctl enable --now komari-agent

检查服务运行状态及实时日志,确认是否成功连接至主控端:

1
2
3
sudo systemctl status komari-agent

sudo journalctl -u komari-agent -f

升级 Agent 服务

后续若需更新 Agent 程序,按照以下步骤:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 停止当前运行的 Agent 服务

sudo systemctl stop komari-agent

# 更新二进制文件(自行替换版本号与对应架构)

sudo curl -L -o /opt/komari/komari-agent https://github.com/komari-monitor/komari-agent/releases/download/<新版本号>/komari-agent-linux-<架构>

# 重新赋予执行权限

sudo chown root:root /opt/komari/komari-agent

sudo chmod +x /opt/komari/komari-agent

# 重启服务并检查运行状态

sudo systemctl restart komari-agent

sudo systemctl status komari-agent

PaaS 部署被控端

对于支持 Docker 容器部署的 PaaS 平台,可以直接使用官方镜像运行 Agent:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 指定公共容器镜像

ghcr.io/komari-monitor/komari-agent:1.1.41

# 覆盖默认启动命令

/bin/sh -c

# 设置部署参数(替换 URL 和 Token)

/app/komari-agent -e https://komari.your.domain -t <token> --disable-web-ssh --disable-auto-update --month-rotate 1

后续升级 Agent 版本,只需修改镜像的版本标签并重新部署即可。

Alpine 部署被控端

Alpine 是一款主打轻量化的 Linux 发行版,底层依赖 Busybox,并采用 OpenRC 作为系统初始化与守护进程管理工具(而非主流的 Systemd)。

许多服务商提供超小内存的 LXC 容器通常预装 Alpine,由于其极低的资源开销,通常 64MB 内存即可流畅运行 Komari Agent 服务。

设置 Swap 交换空间(可选)

此外,若使用的是 KVM 架构且内存极小(如 64MB)的 Alpine 实例,建议配置 Swap 虚拟内存。否则,在执行包管理器更新等操作时,极易触发 OOM 导致 apk 进程被杀。

对于共享宿主机内核的 LXC 容器,则通常无需执行此操作。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 创建 512MB 的虚拟内存文件 

dd if=/dev/zero of=/swapfile bs=1M count=512 

# 设置安全权限

chmod 600 /swapfile 

# 格式化并启用 Swap 

mkswap /swapfile 

swapon /swapfile

# 写入 fstab 开机自动挂载

echo "/swapfile none swap sw 0 0" >> /etc/fstab

# 将 swap 挂载服务加入开机启动项

rc-update add swap boot

# 验证 Swap 生效

free -m

# (备用)若之前因内存不足导致 apk 进程卡死

# 执行以下命令清理锁文件

killall apk 2>/dev/null 

rm -f /lib/apk/db/lock

准备环境

1
2
3
4
5
apk update && apk add curl vim

# 准备工作目录

mkdir -p /opt/komari/agent

安装被控端

下载与 VPS 系统架构匹配的 Agent 二进制程序,并赋予可执行权限:

1
2
3
4
5
6
7
curl -L -o /opt/komari/komari-agent https://github.com/komari-monitor/komari-agent/releases/download/1.1.80/komari-agent-linux-amd64

# 设置权限

chown root:root /opt/komari/komari-agent

chmod +x /opt/komari/komari-agent

配置 OpenRC 守护进程

在 Alpine 中,我们编写 OpenRC 的 init 脚本来管理服务守护进程:

1
vim /etc/init.d/komari-agent

写入以下配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/sbin/openrc-run

name="Komari Agent"

description="Komari Agent Service"

command="/opt/komari/komari-agent"

# 更改主机名和 Token

command_args="-e https://komari.your.domain -t <token> --disable-web-ssh --disable-auto-update --month-rotate 1"

command_background="yes"

pidfile="/run/${RC_SVCNAME}.pid"

directory="/opt/komari/agent"

rc_ulimit="-n 65536"

output_log="/var/log/komari-agent.log"

error_log="/var/log/komari-agent.log"

depend() {

    need net

    after firewall

}

赋予脚本可执行权限:

1
chmod +x /etc/init.d/komari-agent

启动服务:

1
2
3
4
5
6
7
# 设置开机自启

rc-update add komari-agent default

# 启动服务

rc-service komari-agent start

检查运行状态和日志:

1
2
3
4
5
6
7
# 查看服务状态

rc-service komari-agent status

# 查看运行日志 

tail -f /var/log/komari-agent.log

升级 Agent 服务

后续如果在 Alpine 环境下需要升级 Agent 版本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 停止 komari agent 服务

rc-service komari-agent stop

# 更新二进制文件

curl -L -o /opt/komari/komari-agent https://github.com/komari-monitor/komari-agent/releases/download/<新版本号>/komari-agent-linux-<架构>

# 重新赋予权限

chown root:root /opt/komari/komari-agent

chmod +x /opt/komari/komari-agent

# 重启服务并检查服务状态

rc-service komari-agent restart

rc-service komari-agent status

后续配置

第一个节点添加完成后,后续其他服务器的添加步骤与上面完全一致。接下来,我们简单完成一下常用配置项。

安装主题

Komari 默认主题已经很好看了,若想换换口味,可以前往 社区主题列表 下载主题,在管理后台直接上传 .zip 格式的压缩包并启用即可。

install-theme.webp

配置延迟测试

Komari 原生支持 ICMP、TCP 和 HTTP 三种协议的延迟监控。对于国内测试节点,可以在 该页面 获取信息添加。

tcp-ping.webp

建议: 测试间隔可以适当调大一点,以免服务端短期的数据积累过于庞大。

check-ping.webp

编辑节点信息

在此页面,可以统一管理被控服务器的基本信息、订阅费用、到期时间等信息。

edit-node-info.webp

总结

一言之,Komari 的部署相当简单,运行稳定、资源占用极低,是服务器收藏者的必备实用服务。


  1. 对于使用 Cloudflare CDN 的服务端则没有此网络栈的要求。 ↩︎