图班部署手册
Deployment Guide

容器部署手册

面向在客户 Ubuntu 服务器上实施图班的工程师。交付形态是容器镜像:只含运行镜像与配置模板,不含任何源码。按本手册操作,一台服务器、一条命令、约十分钟即可完成部署。

最新发布版本 v1.1.5 系统 Ubuntu 20.04 / 22.04 / 24.04 资源 2 核 2G · 20G 磁盘 控制台默认端口 18080

快速开始

服务器能访问发布站时,一条命令完成全部部署:

在客户服务器上执行

bash
curl -fsSL http://112.126.72.86:18001/releases/1.1.5/install.sh | sudo bash

脚本是幂等的:中途失败可直接重跑,会复用已生成的配置继续,不会重新生成密钥。

脚本依次完成七个步骤,全程无需应答:

  1. 环境检查 — root 权限、x86_64 架构、Docker 与 Compose、磁盘余量
  2. 状态判定 — 自动识别全新安装 / 升级 / 上次装到一半继续
  3. 获取交付包 — 从发布站下载,或读同目录文件(离线)
  4. 完整性校验 — SHA256SUMS 不通过立即中止
  5. 载入镜像 — docker load 并确认镜像存在
  6. 初始化 — 生成随机 JWT_SECRET / CREDENTIAL_ENC_KEY,迁移建库,创建管理员
  7. 启动 — up -d,轮询 /health 最多 120 秒,最后打印访问地址与口令

结束时终端会给出控制台地址、管理员账号和随机生成的口令(同时保存在 /opt/argus/.admin-password,权限 600)。首次登录后请修改口令并删除该文件。

交付物清单

文件说明
argus-<版本>-image.tar.gz运行镜像(编译产物 + 生产依赖,无源码 / sourcemap / 私钥)
install.sh一键安装 / 升级脚本(版本号已内置)
docker-compose.yml服务编排(api + collector 共用一个镜像)
env.example环境变量模板(复制为 .env 后填写)
deploy-docker.md本手册的 Markdown 版
SHA256SUMS全部交付文件的校验和

收到交付包后先校验完整性:

bash
sha256sum -c SHA256SUMS

前置条件

  • Ubuntu 20.04 / 22.04 / 24.04(x86_64)
  • 内存 ≥ 2G,磁盘剩余 ≥ 5G
  • 服务器可访问被纳管设备所在局域网(采集器需探测 SNMP / ICMP / SSH)

安装 Docker(已有可跳过;也可在安装时加 --install-docker 让脚本代装):

bash
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
i
用 Ubuntu 官方源装 docker.io 时不带 compose 插件,需另装 docker-compose-v2;安装脚本检测到缺失会自动补装。客户环境无法访问公网时,请提前准备 docker 离线安装包。

一键安装

完整命令见「快速开始」。需要定制时,参数跟在 bash -s -- 后面:

bash
# 自己指定管理员口令(不给则随机生成)
curl -fsSL http://112.126.72.86:18001/releases/1.1.5/install.sh | sudo bash -s -- \
     --admin-password 'YourStrongPass'

# 换端口
curl -fsSL http://112.126.72.86:18001/releases/1.1.5/install.sh | sudo bash -s -- --port 18080

# 服务器没装 Docker,让脚本一并安装
curl -fsSL http://112.126.72.86:18001/releases/1.1.5/install.sh | sudo bash -s -- --install-docker

参数说明

参数说明默认
--version <x.y.z>指定版本(脚本已内置,一般不用给)脚本内置
--port <端口>控制台端口18080
--install-dir <目录>程序目录/opt/argus
--data-dir <目录>数据目录(SQLite 所在)/var/lib/argus
--admin-password <口令>初始管理员口令随机生成
--mirror <url>发布站基地址http://112.126.72.86:18001/releases
--install-docker未装 Docker 时自动安装关闭
--local用脚本同目录的文件(离线包)关闭
--no-start只初始化,不启动服务关闭
--force覆盖已有安装 / 重新载入镜像关闭

离线安装(客户内网不能出网)

把交付包 6 个文件放到同一目录,然后本地执行:

bash
cd /opt/argus-pkg
sudo bash install.sh --local

升级

bash
curl -fsSL http://112.126.72.86:18001/releases/<新版本>/install.sh | sudo bash

脚本识别到已有安装后:备份 .env → 切换镜像版本 → 执行数据库迁移 → 重启服务,保留原配置、密钥、账号与数据,不会重置管理员口令。

重装 / 覆盖

bash
curl -fsSL http://112.126.72.86:18001/releases/1.1.5/install.sh | sudo bash -s -- --force

手动部署

一键脚本不适用时(例如需要逐项审计每一步),按下面五步执行。

1. 目录与镜像

bash
mkdir -p /opt/argus && cd /opt/argus
# 将交付文件放到此目录
docker load -i argus-<版本>-image.tar.gz
# 输出 Loaded image: argus:<版本>

2. 配置环境变量

bash
cp env.example .env
chmod 600 .env
vi .env

必填项(其余用默认值即可):

.env
# 数据目录(SQLite 数据库所在位置,须与 compose 卷一致)
DB_FILE=/var/lib/argus/argus.db

# 安全凭据,两个都必须替换
#   JWT_SECRET          ≥32 字符随机串
#   CREDENTIAL_ENC_KEY  32 字节 base64(主机凭据加密密钥)
JWT_SECRET=<替换>
CREDENTIAL_ENC_KEY=<替换>

# 控制台访问地址(通知邮件里的跳转链接)
CONSOLE_BASE_URL=http://<服务器IP>:18080
!
CREDENTIAL_ENC_KEY 一旦设定不可更换,换了历史主机凭据全部无法解密。生成方式:node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"。

3. 初始化数据库

bash
mkdir -p /var/lib/argus
# 宿主 root 建的目录需改属主,容器内以 argus 用户运行
docker compose run --rm -u root api chown -R argus:argus /var/lib/argus
# 迁移(建表 / 升级 schema)
docker compose run --rm api node apps/api/dist/cli/migrate.js
# 创建管理员(只在首次部署执行,务必用强口令)
docker compose run --rm -e SEED_ADMIN_PASSWORD='<初始管理员密码>' api node apps/api/dist/cli/seed.js

4. 启动

bash
docker compose up -d
docker compose ps                        # api 与 collector 均应为 running / healthy
curl -s http://127.0.0.1:18080/health    # 应返回 ok

浏览器访问 http://<服务器IP>:18080,用初始化的管理员账号登录。

5. 镜像版本

docker-compose.yml 默认使用 argus:${ARGUS_IMAGE_TAG:-latest}。若镜像 tag 带版本号,在 .env 中加一行:

.env
ARGUS_IMAGE_TAG=1.1.5
!
镜像同时打过 latest 标签,同机载入新版本会覆盖它。回滚必须显式指定 ARGUS_IMAGE_TAG,靠默认值回不去。

日常运维

查看日志

bash
cd /opt/argus
docker compose logs -f --tail 200 api
docker compose logs -f --tail 200 collector

数据备份

数据库是 SQLite 单文件(/var/lib/argus/argus.db)。系统内置每日自动备份(「系统设置 → 数据备份」),优先使用内置机制;手动备份:

bash
# 建议在停写窗口内执行,或接受 WAL 场景下的一致性快照
cp /var/lib/argus/argus.db /backup/argus-$(date +%F).db

升级(手动)

bash
cd /opt/argus
# 升级前先备份
cp /var/lib/argus/argus.db /var/lib/argus/argus.pre-upgrade-$(date +%s).db
docker load -i argus-<新版本>-image.tar.gz
# 修改 .env 中 ARGUS_IMAGE_TAG=<新版本>
docker compose run --rm api node apps/api/dist/cli/migrate.js
docker compose up -d

回滚

bash
# 修改 .env 中 ARGUS_IMAGE_TAG=<旧版本>
docker compose up -d
!
数据库回滚需厂商指导。migrate down 会清数据,禁止客户自行执行。回滚只回镜像,不回数据库。

安全说明

  • 容器以非 root 用户(argus)运行;数据卷 /var/lib/argus 是容器内唯一可写位置
  • .env 含安全凭据,权限必须为 600,属客户机敏感文件,不得外传
  • 镜像中不含源码与调试符号;license 验签私钥由厂商保管,镜像内只有公钥
  • 建议 18080 端口仅对管理网段开放(防火墙 / 安全组控制),不要暴露到公网
  • 交付包提供 SHA256SUMS,安装前可逐项核对;安装脚本内部亦会自校验

常见问题

现象处理
docker compose ps 显示 unhealthydocker compose logs api 看报错;常见为 .env 缺 JWT_SECRET 或 DB_FILE 目录不可写
采集器探测不到设备collector 使用 host 网络,确认服务器能 ping 通目标设备;防火墙放行出站 SNMP(161/udp)与 ICMP
登录页打不开检查 PORT 与 compose 端口映射是否一致;检查防火墙
数据库磁盘满清理 /var/lib/argus 下旧备份;调整 .env 中各保留天数
docker compose 提示未知命令缺 compose 插件,执行 apt install -y docker-compose-v2
安装中途退出、容器未创建直接重跑同一条安装命令,脚本会复用已有 .env 继续初始化
i
需要协助时请提供:安装命令输出、docker compose ps 结果、logs api 最近 100 行。联系 c-qian@cnzid.com。