夜莺开源监控如何使用 Docker 部署,有哪些注意事项?

对于很多开源项目,有一半想要尝试的人会卡在部署环节,所以我今天想写一篇文章介绍一下如何使用 Docker compose 部署夜莺。但是现在是 AI 时代了,那我肯定要先问一下 AI。结果发现,对于会用 AI 的人,这篇文章是极为多余的。

众所周知,AI 有很多预训练的数据,以英文世界的语料为主,但是很多软件在持续迭代、文档在持续迭代,预训练的数据可能是过期的,所以我们在让 AI 回答问题之前,如果你有权威数据来源,那要提前告诉 AI,每个 AI Agent 通常都会提供一个 Knowledge 录入方式,如果你使用本机的 Codex、Cursor,你也可以写个 Markdown 告诉 AI,在回答问题之前请先参考这个 Markdown。我录入的 Knowledge 也很简单:

text 复制代码
夜莺项目的后端代码:~/workspace/nightingale (对应 https://github.com/ccfos/nightingale)
夜莺项目的前端代码:~/workspace/fe (对应  https://github.com/n9e/fe )
夜莺的文档:https://n9e.github.io/ (这个文档有点老)
夜莺最新的 v9 版本的文档:https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v9/

然后我就问了一个问题:

text 复制代码
我想使用 docker compose 部署夜莺,应该如何部署?有哪些注意事项?

我这个问题里刻意提到"夜莺"关键字,没有使用 Nightingale,因为我的 Knowledge 里就是用的"夜莺",另外,我刻意要求 AI 告诉我有哪些注意事项,因为我担心有坑。AI 的回答真的挺惊艳的,而且这是普通的 DeepSeek V4,并非顶级模型,截图如下,不骗大家。

详细回答如下。


用 Docker Compose 部署夜莺监控

一、快速开始

夜莺提供了开箱即用的 Docker Compose 配置文件,位于源码仓库的 docker/compose-bridge/ 目录下。

1. 克隆仓库并启动:

bash 复制代码
git clone https://gitlink.org.cn/ccfos/nightingale.git
cd nightingale/docker/compose-bridge
docker compose up -d

国内网络 Docker Hub 拉取镜像可能很慢,可使用镜像加速器,或从 m.daocloud.io 代理拉取。
备注:上面给的 gitlink 的地址,是国内 git repo 地址,建议优先使用 github.com/ccfos/nightingale 这个 github 的地址,gitlink 会稍微滞后一些,发布 releases 的时候,是在 github 发布。

2. 启动后你会得到 5 个容器:

容器 镜像 用途 端口
mysql mysql:8 关系型数据库,存用户、告警规则、仪表盘等 3306
redis redis:6.2 缓存,存 JWT token、心跳元信息 6379
victoriametrics victoriametrics/victoria-metrics:v1.79.12 时序数据库(兼容 Prometheus,性能更好) 8428
nightingale flashcatcloud/nightingale:latest 夜莺核心服务 17000, 20090
categraf flashcatcloud/categraf:latest 数据采集器(采集 CPU/内存/磁盘等) ---

3. 登录:

浏览器访问 http://<服务器IP>:17000,默认用户名 root,默认密码 root.2020


二、当前 docker-compose.yaml 完整内容

yaml 复制代码
networks:
  nightingale:
    driver: bridge

services:
  mysql:
    image: "mysql:8"
    container_name: mysql
    hostname: mysql
    restart: always
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 1234
    volumes:
      - ./mysqldata:/var/lib/mysql/
      - ../initsql:/docker-entrypoint-initdb.d/
      - ./etc-mysql/my.cnf:/etc/my.cnf
    networks:
      - nightingale
    ports:
      - "3306:3306"

  redis:
    image: "redis:6.2"
    container_name: redis
    hostname: redis
    restart: always
    environment:
      TZ: Asia/Shanghai
    networks:
      - nightingale
    ports:
      - "6379:6379"

  victoriametrics:
    image: victoriametrics/victoria-metrics:v1.79.12
    container_name: victoriametrics
    hostname: victoriametrics
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - "8428:8428"
    networks:
      - nightingale
    command:
      - "--loggerTimezone=Asia/Shanghai"

  nightingale:
    image: flashcatcloud/nightingale:latest
    container_name: nightingale
    hostname: nightingale
    restart: always
    environment:
      GIN_MODE: release
      TZ: Asia/Shanghai
      WAIT_HOSTS: mysql:3306, redis:6379
    volumes:
      - ./etc-nightingale:/app/etc
    networks:
      - nightingale
    ports:
      - "17000:17000"
      - "20090:20090"
    depends_on:
      - mysql
      - redis
      - victoriametrics
    command:
      - /app/n9e

  categraf:
    image: "flashcatcloud/categraf:latest"
    container_name: "categraf"
    hostname: "categraf01"
    restart: always
    environment:
      TZ: Asia/Shanghai
      HOST_PROC: /hostfs/proc
      HOST_SYS: /hostfs/sys
      HOST_MOUNT_PREFIX: /hostfs
      WAIT_HOSTS: nightingale:17000, nightingale:20090
    volumes:
      - ./etc-categraf:/etc/categraf/conf
      - /:/hostfs
    networks:
      - nightingale
    depends_on:
      - nightingale

三、重要注意事项 ⚠️

1. 仅适合测试,不建议直接上生产

官方文档明确指出:Docker Compose 方式仅用于快速测试,不推荐在生产环境使用 。如果要在生产环境使用,需要对 Docker Compose 有深入理解(Volume 持久化、网络、升级策略等)。生产环境推荐二进制部署 + systemd 托管,开机自启、挂了自动拉起、日志滚动、升级方便。

2. 数据持久化

  • MySQL 数据 挂载到 ./mysqldata,务必保证此目录不随容器删除而丢失。
  • VictoriaMetrics 默认没有挂载数据卷 ------容器删除后时序数据全部丢失!如果需要持久化,应添加 volume 挂载:- ./vmdata:/victoria-metrics-data,并添加 -retentionPeriod=90d 参数。
  • Redis 也无持久化配置,重启即丢失 JWT token(用户需重新登录)和心跳元信息。

3. MySQL 初始化

容器首次启动时,../initsql 目录下的 SQL 文件会自动导入,创建夜莺所需的数据库表结构。这是通过 MySQL 镜像的 /docker-entrypoint-initdb.d/ 机制完成的,只在数据库首次创建时执行

4. 密码安全

  • MySQL root 密码默认是 1234生产环境务必修改 MYSQL_ROOT_PASSWORD 并同步修改 etc-nightingale/config.toml 中的 DSN 连接串。
  • 夜莺 Web 默认密码 root.2020登录后立即修改

5. 集群模式

如果要部署多个 n9e 实例组成集群,不能用默认的 Docker Compose。需要修改 etc-nightingale/config.toml,让所有 n9e 实例指向同一套外部的 MySQL 和 Redis。

6. 边缘模式不支持 Docker

边缘机房需要的 n9e-edge 进程,社区目前没有提供 Docker 镜像,边缘模式只能用二进制方式部署。

7. 可选替代:PostgreSQL + host 网络模式

仓库还提供了另外两种 Compose 变体:

  • compose-postgres/:用 PostgreSQL 替代 MySQL
  • compose-host-network/ :使用 network_mode: host,避免 bridge 网络的端口映射开销,适合单机高性能场景

8. 版本选择

仓库中有 V5(nightingale/docker/)和 V9(nightingale/docker/compose-bridge/)两套 Compose。V5 的架构是 nserver + nwebapi 分离模式,V9 已合并为单一 nightingale 容器。建议使用 V9 ,文档路径为 docker/compose-bridge/

9. Categraf 采集器注意

  • Categraf 挂载了宿主机根目录 /: /hostfs 来读取 /proc/sys 等系统指标。
  • 如果宿主机也是 Mac(比如你当前环境是 macOS),Docker 容器内的 /hostfs/proc 实际是 Linux VM 的 proc,采集到的 CPU/内存是 Docker Desktop 虚拟机的指标,不是 macOS 宿主机的

四、总结

场景 推荐方案
快速体验/演示 docker compose up -d,5 分钟搞定
生产环境 二进制部署 + systemd 托管
K8s 环境 Helm 部署
需要边缘告警 中心端 Docker Compose + 边缘二进制 n9e-edge

官方文档入口:

服了,上面 AI 的回答基本没啥问题,比我自己写的话都要更齐全...这可能就是"中小型开源项目已死"的来由:

  • 有了 AI 之后,大家不用加群,不用提 issue,直接让 AI 搞定了,在开源项目之上形成的开源社区,名存实亡
  • 有些小项目代码直接被 AI 训练的时候内化了,工程师使用 AI coding,可能都没听过原本的开源项目,但是 AI 已经自动写出了对应的同功能的代码
相关推荐
小猿姐11 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
属鼠哥12 天前
一场正在发生的范式转变:Loop Engineering(循环工程)
人工智能·aiops
AIOps打工人13 天前
新人用 AI 30 分钟,我并不高兴
aiops
松岩16 天前
网络问题导致 Pod Pending
kubernetes·aiops
SRETalk20 天前
开源夜莺 v9 AI 尝鲜版:给每个 SRE 配一个 7x24 在线的资深副驾驶
可观测性·监控告警·nightingale·开源监控·夜莺监控·运维监控
云智慧AIOps社区1 个月前
轻帆云ITSM|制造业智能化转型,从流程重构看 IT 服务管理发展新趋势
运维·自动化·aiops·智能运维·itsm平台·it服务管理系统
欧雷殿2 个月前
AI 原生团队搭建:一人也能做人生 CEO
后端·agent·aiops
欧雷殿2 个月前
适配一人公司!家庭局域网 AI 工作台来了
后端·agent·aiops
tonydf2 个月前
快速上手AI网关——LiteLLM
后端·aiops