Sign inSign up

muziyuyang/nms-web

By muziyuyang

•Updated about 7 hours ago

Image
0

340

muziyuyang/nms-web repository overview

⁠nms-web + spring-boot-admin Docker 部署指南

本文面向首次部署的运维人员,说明如何用 Docker Compose 部署 nms-web 前端和 spring-boot-admin 后端。

⁠1. 部署架构

浏览器
  └─ nms-web:9312(Nginx,静态前端)
       └─ spring-boot-admin:9311(Spring Boot)
            ├─ MySQL:3306
            └─ Redis:6379

后端使用 MySQL 保存业务数据和 Quartz 调度数据,使用 Redis 保存缓存、验证码等临时数据。生产环境必须为 MySQL 和 Redis 配置持久化存储。

⁠2. 前置条件

  • Docker Engine 24+,Docker Compose v2+。
  • 可用的 nms-web 与 spring-boot-admin 镜像及版本标签。
  • 已初始化的 MySQL 数据库。首次部署执行后端仓库 src/main/resources/db/mtab.sql,并按需执行 Quartz 相关脚本。
  • Redis 服务。Redis 必须配置可写的数据目录;若启用 RDB 快照,建议保留 stop-writes-on-bgsave-error yes,避免持久化失败时继续写入并丢失数据。
  • 前端构建时已配置正确的后端 API 地址,或由反向代理将前端 API 请求转发到后端。

⁠3. 必需参数

创建部署目录并准备 .env:

mkdir -p /opt/nms
cd /opt/nms

.env 示例:

# 镜像。使用不可变版本标签,避免生产环境使用 latest。
NMS_WEB_IMAGE=your-registry/nms-web:20260812-1029
NMS_ADMIN_IMAGE=your-registry/spring-boot-admin:20260812-1029

# 对外端口
WEB_PORT=9312
ADMIN_PORT=9311

# 后端运行参数
SPRING_PROFILES_ACTIVE=prod
JAVA_OPTS=-Xms300m -Xmx300m

# MySQL:容器与宿主机均可访问的地址
DB_URL=jdbc:mysql://mysql:3306/nms_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
DB_USERNAME=nms_db
DB_PASSWORD=replace-with-a-strong-password

# Redis:容器与宿主机均可访问的地址
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=replace-with-a-strong-password
REDIS_DATABASE=0

参数说明:

参数必填说明
NMS_WEB_IMAGE是前端镜像,固定为明确版本标签。
NMS_ADMIN_IMAGE是后端镜像,固定为明确版本标签。
WEB_PORT是前端宿主机端口,容器内固定为 80。
ADMIN_PORT是后端宿主机端口,容器内固定为 9311。
SPRING_PROFILES_ACTIVE是Spring Profile,生产环境通常为 prod。
JAVA_OPTS是JVM 内存参数,需按宿主机内存调整。
DB_URL是完整 JDBC URL。时区建议设置为 Asia/Shanghai。
DB_USERNAME / DB_PASSWORD是MySQL 业务账号及密码。
REDIS_HOST / REDIS_PORT是Redis 主机名和端口。Compose 内同网络时主机名可填写 redis。
REDIS_PASSWORD视配置而定Redis 设置密码时必填;无密码 Redis 需从后端启动参数中移除该项。
REDIS_DATABASE否Redis DB 序号,默认 0。

不要将 .env 提交到 Git,也不要在镜像 Dockerfile 中固化真实密码。

⁠4. Docker Compose 部署

在 /opt/nms/compose.yaml 创建如下文件。示例假设 MySQL 和 Redis 已在同一 Compose 网络中运行;如果它们在其他主机,请将 DB_URL 和 REDIS_HOST 改为实际可达地址,并移除 depends_on。

services:
  nms-web:
    image: ${NMS_WEB_IMAGE}
    container_name: nms-web
    restart: unless-stopped
    ports:
      - "${WEB_PORT}:80"
    environment:
      TZ: Asia/Shanghai
    depends_on:
      spring-boot-admin:
        condition: service_started
    networks:
      - nms

  spring-boot-admin:
    image: ${NMS_ADMIN_IMAGE}
    container_name: spring-boot-admin
    restart: unless-stopped
    ports:
      - "${ADMIN_PORT}:9311"
    environment:
      TZ: Asia/Shanghai
      SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
      SERVER_PORT: 9311
      JAVA_OPTS: ${JAVA_OPTS}
      DB_URL: ${DB_URL}
      DB_USERNAME: ${DB_USERNAME}
      DB_PASSWORD: ${DB_PASSWORD}
      REDIS_HOST: ${REDIS_HOST}
      REDIS_PORT: ${REDIS_PORT}
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      REDIS_DATABASE: ${REDIS_DATABASE:-0}
    networks:
      - nms

networks:
  nms:
    name: nms

启动:

docker compose --env-file .env pull
docker compose --env-file .env up -d
docker compose ps

⁠5. Redis 最小持久化配置

以下示例适用于独立 Redis 容器。/srv/nms/redis/data 必须真实存在且 Redis 容器用户可写。

redis.conf:

bind 0.0.0.0
protected-mode yes
port 6379
dir /data
dbfilename dump.rdb
save 3600 1
save 300 100
save 60 10000
stop-writes-on-bgsave-error yes
appendonly no
requirepass replace-with-a-strong-password

Compose 服务:

  redis:
    image: redis:7.2-alpine
    container_name: redis
    restart: unless-stopped
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    ports:
      - "6379:6379"
    volumes:
      - /srv/nms/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:ro
      - /srv/nms/redis/data:/data
    networks:
      - nms

⁠6. 验证

docker compose ps
docker logs --tail 100 spring-boot-admin
curl -I http://127.0.0.1:${WEB_PORT}/

预期结果:

  • nms-web 和 spring-boot-admin 均为 running。
  • 前端请求返回 HTTP/1.1 200 OK。
  • 后端日志没有 MySQL、Redis 连接失败或 MISCONF 错误。

若部署 Redis,额外验证持久化:

docker exec redis redis-cli -a '<REDIS_PASSWORD>' BGSAVE
docker exec redis redis-cli -a '<REDIS_PASSWORD>' INFO persistence | grep rdb_last_bgsave_status

输出应包含 rdb_last_bgsave_status:ok。

⁠7. 升级

每次构建发布唯一标签,例如 20260812-1136。不要覆盖已发布版本标签;固定标签会使缓存和回滚判断变得困难。

更新 .env 中相应镜像后执行:

docker compose --env-file .env pull nms-web spring-boot-admin
docker compose --env-file .env up -d --no-deps nms-web spring-boot-admin
docker compose ps

仅升级前端:

docker compose --env-file .env pull nms-web
docker compose --env-file .env up -d --no-deps nms-web

升级后用 docker inspect nms-web 或 docker inspect spring-boot-admin 检查 .Config.Image 和 .Image,确认容器实际引用了预期镜像。

⁠8. 回滚

保留上一版本标签即可快速回滚。将 .env 中的镜像改回上一版本,然后执行:

docker compose --env-file .env pull
docker compose --env-file .env up -d --no-deps nms-web spring-boot-admin

不要在未验证新版本前删除旧镜像。MySQL 数据库变更必须先评估是否可向后兼容;不可逆迁移需要单独备份和回滚方案。

email:[email protected]⁠

Tag summary

Content type

Image

Digest

sha256:07f7f1f97…

Size

21.2 MB

Last updated

about 7 hours ago

docker pull muziyuyang/nms-web:20261006-1517