对于很多开源项目,有一半想要尝试的人会卡在部署环节,所以我今天想写一篇文章介绍一下如何使用 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 替代 MySQLcompose-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 已经自动写出了对应的同功能的代码