本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 13 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。

它是什么

自建的「设备在线状态」看板:客户端上报心跳/窗口标题,服务端展示在线时长、活跃曲线。

前置条件

  • 一台 Linux 服务器(1C1G 起步;Java 类应用建议 2C4G 以上);
  • 已安装 Docker 与 Compose v2,执行 docker compose version 有版本号输出;
  • 所有示例里的 IP / 域名 / 密码都是占位符,实际部署请替换成自己的。
# 安装 Docker(已安装可跳过)
curl -fsSL https://get.docker.com | sh

# 目录约定:一个服务一个目录,后文的 ./data 均指栈目录内
mkdir -p /srv/docker/active/<stack> && cd /srv/docker/active/<stack>

镜像地址

自建 Node 镜像(build: .),无公开镜像。

部署步骤

services:
  dashboard:
    build: .
    container_name: live_dashboard
    restart: unless-stopped
    ports:
      - "3500:3500"
    environment:
      - PORT=3500
      - STATIC_DIR=/app/public
      - DB_PATH=/data/live-dashboard.db
      - DEVICE_TOKEN_1=${DEVICE_TOKEN_1}
      - DEVICE_TOKEN_2=${DEVICE_TOKEN_2}
      - HASH_SECRET=${HASH_SECRET}
      - DISPLAY_NAME=${DISPLAY_NAME}
      - SITE_TITLE=${SITE_TITLE}
      - SITE_DESC=${SITE_DESC}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD}
    volumes:
      - dashboard_data:/data
    mem_limit: 128m
    cpus: 0.5
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

volumes:
  dashboard_data:

注意事项

  • 设备 Token 格式通常是 token:device_id:name:platform,泄露等于别人能伪造在线状态;
  • 窗口标题属于隐私数据,服务端只存哈希,别落下原始明文;
  • 这是个人项目,公网部署前至少加 Basic Auth。

备份与升级

# 数据在命名卷 dashboard_data
docker run --rm -v <项目名>_dashboard_data:/src -v "$PWD":/b alpine \
  tar czf /b/dashboard-$(date +%F).tar.gz -C /src .

# 升级 = 重新构建
docker compose up -d --build
  • .env 里的设备 Token 与密码也要单独备份;
  • 看板是只读展示,升级风险较低,仍建议先备份。