Skip to content

Linux 容器化部署微服务 SpringBoot 项目

本文档介绍如何在 Linux 环境下使用 1Panel 可视化面板部署基于 Nacos 的微服务 SpringBoot 项目。

目录导航


项目技术栈

  • Spring Boot: 3.2.4
  • Spring Cloud: 2023.0.2
  • Spring Cloud Alibaba: 2023.0.1.0
  • Java: 17+ (推荐 OpenJDK 17)
  • Nacos: 2.2.3+ (服务注册与发现、配置中心)
  • Maven: 3.6.3+
  • 项目版本: 2.2.0-RELEASE
  • Docker: 20.10+
  • 1Panel: 最新版本 (可视化Docker管理面板)

容器化部署架构说明

项目采用 Spring Cloud 微服务架构,所有服务通过 Docker 容器运行,包含以下核心服务:

  1. Redis 容器: 缓存服务 (端口 6379)
  2. Nacos 容器: 服务注册与发现、配置中心 (端口 8848, 9848, 9849)
  3. Minio 容器: 对象存储服务 (端口 9000, 9090)
  4. OpenResty: 前端Web服务器和反向代理 (端口 80, 443)
  5. jpwise-boot-gateway 容器: 网关服务 (端口 30002)
  6. jpwise-boot-platform 容器: 平台服务 (端口 30003)
  7. jpwise-boot-business 容器: 业务服务 (端口 30004)

所有容器通过 Docker 网络互联,配置统一在 Nacos 配置中心管理。

说明:

  • 数据库: MySQL 或达梦数据,需在部署前准备好(可在宿主机或独立服务器部署)
  • 前端: 使用 1Panel 的 OpenResty 反向代理部署,详见第2.5节

0 环境准备

0.1 服务器要求

最低配置

  • CPU: 4核
  • 内存: 8GB
  • 硬盘: 100GB
  • 操作系统: CentOS 7+、Ubuntu 18.04+、Debian 9+

推荐配置

  • CPU: 8核
  • 内存: 16GB
  • 硬盘: 200GB SSD

0.2 数据库准备

在部署微服务前,需要准备好数据库服务。详细的数据库安装步骤请参考 Linux数据库安装

注意事项:

  • 确保数据库服务正常运行且可从 Docker 容器访问
  • 记录数据库连接信息(主机、端口、用户名、密码),后续在 Nacos 配置中使用
  • 如果数据库在宿主机,容器内访问地址为 host.docker.internal 或宿主机内网IP
  • 如果使用防火墙,需开放数据库端口(MySQL: 3306,达梦: 5236)

0.3 防火墙端口

需要开放以下端口:

bash
# 1Panel 面板
firewall-cmd --zone=public --add-port=10086/tcp --permanent

# 数据库端口(如果数据库在宿主机)
firewall-cmd --zone=public --add-port=3306/tcp --permanent  # MySQL
# firewall-cmd --zone=public --add-port=5236/tcp --permanent  # 达梦(如果使用)

# Docker 服务端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent  # Redis
firewall-cmd --zone=public --add-port=8848/tcp --permanent  # Nacos
firewall-cmd --zone=public --add-port=9000/tcp --permanent  # Minio API
firewall-cmd --zone=public --add-port=9090/tcp --permanent  # Minio控制台
firewall-cmd --zone=public --add-port=30002/tcp --permanent # Gateway
firewall-cmd --zone=public --add-port=30003/tcp --permanent # Platform
firewall-cmd --zone=public --add-port=30004/tcp --permanent # Business
firewall-cmd --zone=public --add-port=80/tcp --permanent    # HTTP (OpenResty)
firewall-cmd --zone=public --add-port=443/tcp --permanent   # HTTPS (OpenResty)

# 重载防火墙
firewall-cmd --reload

0.4 创建项目目录结构

bash
# 创建项目根目录
mkdir -p /opt/jpwise-docker

# 创建数据持久化目���
mkdir -p /opt/jpwise-docker/data/{redis,nacos,minio}

# 创建配置文件目录
mkdir -p /opt/jpwise-docker/config/{redis,nacos}

# 创建日志目录
mkdir -p /opt/jpwise-docker/logs/{gateway,platform,business,nacos}

# 创建镜像存储目录
mkdir -p /opt/jpwise-docker/images

# 创建备份目录
mkdir -p /opt/jpwise-docker/backup

# 创建前端文件目录
mkdir -p /opt/jpwise/frontend

1. 安装并配置 1Panel

1.1 安装 1Panel

1.1.1 一键安装

bash
# 使用官方安装脚本(会自动安装Docker和Docker Compose)
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh

安装过程中会提示设置:

  • 1Panel监听端口 (默认10086)
  • 面板入口路径 (默认随机生成)
  • 管理员用户名
  • 管理员密码

重要: 请妥善保存安装完成后显示的访问信息!

1.1.2 访问1Panel面板

安装完成后,访问面板:

http://YOUR_SERVER_IP:端口/入口路径
# 示例: http://192.168.1.100:10086/entrance_abc123
# 请将 YOUR_SERVER_IP 替换为实际的服务器IP地址
# 端口和入口路径使用安装时设置的值

使用安装时设置的管理员账号登录。

1.2 配置Docker镜像源

登录1Panel后:

  1. 左侧菜单选择 容器设置
  2. 找到 镜像加速 配置项
  3. 添加国内镜像源:
    https://docker.m.daocloud.io
    https://docker.nju.edu.cn
    https://docker.mirrors.sjtug.sjtu.edu.cn
  4. 点击保存并重启Docker

2. 部署基础服务

在部署微服务之前,需要先部署基础服务:Redis、Nacos、Minio、OpenResty。

注意: 数据库(MySQL 或达梦)应该已经在环境准备阶段部署完成。

2.1 部署 Redis

  1. 在 1Panel 中选择 容器容器
  2. 点击右上角 创建容器 按钮
  3. 填写容器配置:

基本信息

  • 容器名称:jpwise-redis
  • 镜像:redis:7.2-alpine

端口映射

  • 主机端口:6379
  • 容器端口:6379

环境变量

TZ=Asia/Shanghai

存储卷

  • 主机路径:/opt/jpwise-docker/data/redis
  • 容器路径:/data

其他设置

  • 重启策略:always

启动命令(可选):

redis-server --requirepass 123456.zxc --appendonly yes
  1. 点击 确定 创建并启动容器
  2. 确认容器运行成功

2.2 部署 Nacos

  1. 点击 创建容器 按钮
  2. 填写容器配置:

基本信息

  • 容器名称:jpwise-nacos
  • 镜像:nacos/nacos-server:v2.5.1

端口映射

  • 8848:8848
  • 9848:9848
  • 9849:9849

环境变量

JVM_XMN=1g
MODE=standalone
JVM_XMS=2g
JVM_XMX=2g
NACOS_AUTH_IDENTITY_KEY=serverIdentity
NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
JVM_MS=128m
NACOS_SERVER_IP=
NACOS_AUTH_IDENTITY_VALUE=security
PREFER_HOST_MODE=hostname
JVM_MMS=320m
NACOS_AUTH_ENABLE=true
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
BASE_DIR=/home/nacos
CLASSPATH=.:/home/nacos/conf:
CLUSTER_CONF=/home/nacos/conf/cluster.conf
FUNCTION_MODE=all
JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
NACOS_USER=nacos
JAVA=/usr/lib/jvm/java-1.8-openjdk/bin/java
NACOS_DEBUG=n
TOMCAT_ACCESSLOG_ENABLED=false
TIME_ZONE=Asia/Shanghai

说明:

  • MYSQL_SERVICE_HOST: 根据实际情况填写
    • 如果数据库在同一服务器: 使用 host.docker.internal 或服务器内网IP
    • 如果数据库在独立服务器: 使用数据库服务器IP地址
    • 如果使用云数据库: 使用云数据库提供的连接地址
  • MYSQL_SERVICE_PORT: MySQL使用3306,达梦使用5236
  • MYSQL_SERVICE_USERMYSQL_SERVICE_PASSWORD: 使用在0.2节配置的数据库用户

存储卷

  • 主机路径:/opt/jpwise-docker/data/nacos
  • 容器路径:/home/nacos/data
  • 主机路径:/opt/jpwise-docker/logs/nacos
  • 容器路径:/home/nacos/logs

其他设置

  • 重启策略:always
  1. 点击 确定 创建并启动容器
  2. 等待 Nacos 启动(约 30-60 秒)
  3. 访问 Nacos 控制台验证:http://YOUR_SERVER_IP:8848/nacos
    • 默认用户名:nacos
    • 默认密码:nacos
    • 请将 YOUR_SERVER_IP 替换为实际的服务器IP地址

2.3 配置 Nacos

重要: 首次启动后,需要在 Nacos 控制台配置命名空间和配置文件。

2.3.1 创建命名空间

  1. 访问 Nacos 控制台:http://YOUR_SERVER_IP:8848/nacos (将 YOUR_SERVER_IP 替换为实际IP)
  2. 登录后,进入 命名空间 菜单
  3. 点击 新建命名空间 按钮
  4. 创建以下命名空间:
    • 命名空间 ID:dev,命名空间名:开发环境
    • 命名空间 ID:test,命名空间名:测试环境
    • 命名空间 ID:prod,命名空间名:生产环境

2.3.2 配置配置文件

配置文件可从 \ftp\JAVA\linux\nacos_config_export.zip 直接导入后进行修改

  1. 进入 配置管理配置列表
  2. 选择命名空间(如 dev
  3. 点击 创建配置 按钮
  4. 创建以下配置文件:

配置文件 1:jpwise-common.yml

  • Data ID:jpwise-common.yml
  • Group:JPWISE_GROUP
  • 配置格式:YAML
  • 配置内容:(从项目配置文件中复制)

配置文件 2:jpwise-datasource.yml

  • Data ID:jpwise-datasource.yml
  • Group:JPWISE_GROUP
  • 配置格式:YAML
  • 配置内容:
yaml
spring:
  datasource:
    # MySQL 配置示例
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://your_database_host:3306/jpwise_platform?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: your_username
    password: your_password

    # 达梦数据库配置示例(如果使用达梦)
    # driver-class-name: dm.jdbc.driver.DmDriver
    # url: jdbc:dm://your_database_host:5236/jpwise_platform?useUnicode=true&characterEncoding=utf-8
    # username: your_username
    # password: your_password

说明: 替换 your_database_hostyour_usernameyour_password 为实际的数据库连接信息。

配置文件 3:jpwise-gateway.yml

  • Data ID:jpwise-gateway.yml
  • Group:JPWISE_GROUP
  • 配置格式:YAML
  • 配置内容:(网关服务特定配置)

配置文件 4:jpwise-platform.yml

  • Data ID:jpwise-platform.yml
  • Group:JPWISE_GROUP
  • 配置格式:YAML
  • 配置内容:(平台服务特定配置)

配置文件 5:jpwise-business.yml

  • Data ID:jpwise-business.yml
  • Group:JPWISE_GROUP
  • 配置格式:YAML
  • 配置内容:(业务服务特定配置)
  1. 点击 发布 保存配置

💡 提示:配置文件的具体内容请从项目配置文件中复制,或联系项目管理员获取。

2.4 部署 Minio

Minio 是对象存储服务,用于存储文件、图片等资源。

  1. 点击 创建容器 按钮
  2. 填写容器配置:

基本信息

  • 容器名称:jpwise-minio
  • 镜像:minio/minio:latest

端口映射

  • 主机端口:9000,容器端口:9000 (API端口)
  • 主机端口:9090,容器端口:9090 (控制台端口)

环境变量

MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
TZ=Asia/Shanghai

说明: 生产环境请修改默认的用户名和密码

存储卷

  • 主机路径:/opt/jpwise-docker/data/minio
  • 容器路径:/data

启动命令

server /data --console-address ":9090"

其他设置

  • 重启策略:always
  1. 点击 确定 创建并启动容器
  2. 等待 Minio 启动(约 10 秒)
  3. 访问 Minio 控制台验证:http://YOUR_SERVER_IP:9090
    • 默认用户名:minioadmin
    • 默认密码:minioadmin
    • 请将 YOUR_SERVER_IP 替换为实际的服务器IP地址

首次登录后的配置

  1. 登录 Minio 控制台
  2. 创建 Bucket(存储桶):
    • 点击 BucketsCreate Bucket
    • Bucket Name: jpwise-resources
    • 点击 Create Bucket
  3. 配置访问策略(根据需求设置为 public 或 private)

2.5 部署 OpenResty(前端Web服务器)

OpenResty 用于部署前端静态资源和反向代理。

使用 1Panel 的 OpenResty 应用

  1. 在 1Panel 中选择 应用商店
  2. 搜索 OpenResty
  3. 点击 安装
  4. 填写安装配置:
    • 应用名称:openresty
    • 版本:选择最新稳定版
    • 端口映射:
      • HTTP端口:80
      • HTTPS端口:443
    • 数据目录:/opt/1panel/apps/openresty/openresty
  5. 点击 确认 安装

创建前端网站

  1. 安装完成后,选择 网站网站
  2. 点击 创建 按钮
  3. 填写网站配置:
    • 分组:默认即可
    • 选择类型:选择 新装应用
    • 应用:默认 Cordys CRM 即可
    • 版本号:默认即可
    • 名称:可自行填写(如 jpwise_web
    • HTTP端口:填写用户访问的前端项目端口号(如 8081
    • MCP端口:与HTTP端口一致(如 8082
    • 主域名:填写域名或服务器IP
    • 代号:网站目录的文件夹名称(该目录将作为网站根目录)

创建网站配置

  1. 点击 确认 创建

修改网站配置文件

  1. 网站创建完成后,点击配置,再点击配置文件,将配置文件修改为下述配置
bash
  server {
      listen 网站端口号;
      server_name 网站名称;

      root /www/sites/网站代号/index;
      index index.html index.htm;

      access_log /www/sites/网站代号/log/access.log;
      error_log /www/sites/网站代号/log/error.log;

      gzip on;
      gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
      gzip_min_length 1000;

      location / {
          try_files $uri $uri/ /index.html;
      }

      location = /favicon.ico {
          log_not_found off;
          access_log off;
      }
  }

修改完成后点击保存并重载

上传前端文件

  1. 构建前端项目(在开发机器上):

    bash
    # 进入前端项目目录
    cd /path/to/frontend/project
    
    # 构建生产环境代码
    npm run build
    
    # 打包 dist 目录
    tar -czf frontend-dist.tar.gz dist/
  2. 使用 1Panel 文件管理上传:

    • 系统文件
    • 导航到 网站的root目录
    • 上传 frontend-dist.tar.gz
    • 解压文件:tar -xzf frontend-dist.tar.gz
    • 将 dist 目录中的文件移动到 /opt/jpwise/frontend/ 根目录

验证OpenResty部署

访问前端网站:http://YOUR_SERVER_IPhttp://your-domain.com


3. 构建微服务 Docker 镜像

3.1 准备工作

微服务镜像需要在**本地开发机器(Windows/Mac/Linux)**上构建,然后传输到 Linux 服务器。

项目已提供的文件

  • docker/Dockerfile-gateway - 网关服务 Dockerfile
  • docker/Dockerfile-platform - 平台服务 Dockerfile
  • docker/Dockerfile-business - 业务服务 Dockerfile
  • docker/build-microservices.sh - 镜像构建脚本

3.2 在本地构建镜像

3.2.1 Windows 环境构建

在项目根目录打开 PowerShell 或 CMD:

powershell
# 确保 Docker Desktop 正在运行
docker version

# 先编译打包项目
mvn clean package -DskipTests

# 构建所有微服务镜像
docker build -f docker/Dockerfile-gateway -t jpwise/gateway:2.2.0-RELEASE .
docker build -f docker/Dockerfile-platform -t jpwise/platform:2.2.0-RELEASE .
docker build -f docker/Dockerfile-business -t jpwise/business:2.2.0-RELEASE .

# 查看构建的镜像
docker images | findstr jpwise

3.2.2 Linux/Mac 环境构建

在项目根目录打开终端:

bash
# 确保 Docker 正在运行
docker version

# 先编译打包项目
mvn clean package -DskipTests

# 使用构建脚本(推荐)
chmod +x docker/build-microservices.sh
./docker/build-microservices.sh

# 或手动构建
docker build -f docker/Dockerfile-gateway -t jpwise/gateway:2.2.0-RELEASE .
docker build -f docker/Dockerfile-platform -t jpwise/platform:2.2.0-RELEASE .
docker build -f docker/Dockerfile-business -t jpwise/business:2.2.0-RELEASE .

# 查看构建的镜像
docker images | grep jpwise

3.3 导出镜像文件

构建完成后,将镜像导出为 tar 文件:

bash
# 导出三个微服务镜像
docker save jpwise/gateway:2.2.0-RELEASE -o docker/docker-images/jpwise-gateway.tar
docker save jpwise/platform:2.2.0-RELEASE -o docker/docker-images/jpwise-platform.tar
docker save jpwise/business:2.2.0-RELEASE -o docker/docker-images/jpwise-business.tar

# Windows 用户可以这样查看文件
dir docker/docker-images

# Linux/Mac 用户
ls -lh docker/docker-images/

预期输出

jpwise-gateway.tar   (~450MB)
jpwise-platform.tar  (~500MB)
jpwise-business.tar  (~500MB)

3.4 上传镜像到 Linux 服务器

方式 A:使用 SCP/SFTP 上传

bash
# 在本地机器执行(Linux/Mac)
# 请将 YOUR_SERVER_IP 替换为实际的服务器IP地址
scp docker/docker-images/*.tar root@YOUR_SERVER_IP:/opt/jpwise-docker/images/

# Windows 用户可以使用 WinSCP、FileZilla 等图形化工具上传
# 上传到服务器的 /opt/jpwise-docker/images/ 目录
# 服务器地址填写实际的IP,如: 192.168.1.100

方式 B:使用 1Panel 文件管理上传(推荐)

如果已安装 1Panel:

  1. 登录 1Panel 管理面板
  2. 左侧菜单选择 文件文件管理
  3. 导航到 /opt/jpwise-docker/images/
  4. 点击 上传 按钮
  5. 选择三个 tar 文件上传

3.5 导入微服务镜像

3.5.1 使用 1Panel 图形界面导入

步骤1: 查看已有镜像

  1. 登录 1Panel 面板
  2. 左侧菜单选择 容器镜像
  3. 查看镜像列表,确认微服务镜像是否已存在

步骤2: 导入镜像

  1. 在镜像页面点击 导入 按钮
  2. 选择导入方式:从文件导入
  3. 依次导入镜像文件:
    • /opt/jpwise-docker/images/jpwise-gateway.tar
    • /opt/jpwise-docker/images/jpwise-platform.tar
    • /opt/jpwise-docker/images/jpwise-business.tar
  4. 等待导入完成(每个镜像约需 1-3 分钟)

步骤3: 验证镜像导入成功

  1. 在镜像列表中查看:
    • jpwise/gateway:2.2.0-RELEASE
    • jpwise/platform:2.2.0-RELEASE
    • jpwise/business:2.2.0-RELEASE
  2. 显示镜像大小和创建时间

镜像导入成功!


4. 部署微服务

基础服务部署完成后,开始部署三个微服务:Gateway、Platform、Business。

4.1 部署网关服务(Gateway)

  1. 在 1Panel 中选择 容器容器
  2. 点击 创建容器 按钮
  3. 填写容器配置:

基本信息

  • 容器名称:jpwise-gateway
  • 镜像:jpwise/gateway:2.2.0-RELEASE

端口映射

  • 主机端口:30002
  • 容器端口:30002

存储卷

  • 主机路径:/opt/jpwise-docker/logs/gateway
  • 容器路径:/app/logs

网络设置(高级设置)**:

  • 网络模式:bridge(默认)
  • 添加容器链接:
    • 容器:jpwise-nacos
    • 别名:nacos

其他设置

  • 重启策略:always
  1. 点击 确定 创建并启动容器
  2. 查看容器日志,确认启动成功

验证网关启动

  1. 点击容器名称 jpwise-gateway
  2. 点击 日志 标签页
  3. 查找日志中的关键字:Started JpwiseGatewayApplication

4.2 部署平台服务(Platform)

  1. 点击 创建容器 按钮
  2. 填写容器配置:

基本信息

  • 容器名称:jpwise-platform
  • 镜像:jpwise/platform:2.2.0-RELEASE

端口映射

  • 主机端口:30003
  • 容器端口:30003

存储卷

  • 主机路径:/opt/jpwise-docker/logs/platform
  • 容器路径:/app/logs

网络设置

  • 添加容器链接:
    • 容器:jpwise-nacos,别名:nacos
    • 容器:jpwise-redis,别名:redis

说明: 数据库连接不需要添加容器链接,直接在Nacos配置中使用数据库的实际地址即可

其他设置

  • 重启策略:always
  1. 点击 确定 创建并启动容器
  2. 查看日志确认启动成功

4.3 部署业务服务(Business)

  1. 点击 创建容器 按钮
  2. 填写容器配置:

基本信息

  • 容器名称:jpwise-business
  • 镜像:jpwise/business:2.2.0-RELEASE

端口映射

  • 主机端口:30004
  • 容器端口:30004

存储卷

  • 主机路径:/opt/jpwise-docker/logs/business
  • 容器路径:/app/logs

网络设置

  • 添加容器链接:
    • 容器:jpwise-nacos,别名:nacos
    • 容器:jpwise-redis,别名:redis

说明: 数据库连接不需要添加容器链接,直接在Nacos配置中使用数据库的实际地址即可

其他设置

  • 重启策略:always
  1. 点击 确定 创建并启动容器
  2. 查看日志确认启动成功

4.4 验证部署

4.4.1 检查容器状态

  1. 容器容器 列表中
  2. 确认以下容器状态为 运行中
    • jpwise-redis
    • jpwise-nacos
    • jpwise-gateway
    • jpwise-platform
    • jpwise-business
  3. 确认数据库服务正常运行(根据部署方式检查)

4.4.2 检查服务注册

  1. 访问 Nacos 控制台:http://YOUR_SERVER_IP:8848/nacos (将 YOUR_SERVER_IP 替换为实际IP)
  2. 进入 服务管理服务列表
  3. 选择命名空间:dev
  4. 确认以下服务已注册:
    • jpwise-gateway
    • jpwise-platform
    • jpwise-business

4.4.3 访问服务

  • API网关: http://YOUR_SERVER_IP:30002
  • API文档: http://YOUR_SERVER_IP:30002/doc.html
  • Nacos控制台: http://YOUR_SERVER_IP:8848/nacos

说明: 请将 YOUR_SERVER_IP 替换为实际的服务器IP地址,例如 192.168.1.100

微服务部署成功!


5. 容器管理操作

5.1 查看容器日志

  1. 容器容器 列表中
  2. 点击目标容器名称
  3. 点击 日志 标签页
  4. 可以:
    • 实时查看日志输出
    • 搜索日志内容
    • 下载日志文件
    • 清空日志

5.2 进入容器终端

  1. 在容器列表中找到目标容器
  2. 点击右侧 操作终端 图标
  3. 在 Web 终端中执行命令
bash
# 示例:查看容器内进程
ps aux

# 查看Java进程
jps -lvm

# 查看内存使用
free -h

5.3 重启容器

重启单个容器

  1. 在容器列表中找到目标容器
  2. 点击右侧 操作重启 按钮
  3. 确认重启

批量重启

  1. 勾选多个容器
  2. 点击顶部的 批量操作重启

5.4 停止/启动容器

停止容器

  1. 在容器列表中找到目标容器
  2. 点击 操作停止 按钮

启动容器

  1. 找到已停止的容器
  2. 点击 操作启动 按钮

5.5 查看容器资源使用

  1. 选择 容器监控
  2. 查看:
    • 各容器的 CPU 使用率趋势
    • 各容器的内存使用率趋势
    • 网络流量统计
    • 磁盘 IO 统计

5.6 查看容器详情

  1. 点击容器名称
  2. 查看:
    • 基本信息(ID、镜像、状态等)
    • 端口映射
    • 卷挂载
    • 网络配置
    • 环境变量
    • 资源限制

6. 更新微服务

当代码更新后,需要重新构建镜像并更新容器。

6.1 完整更新流程

步骤1:本地重新构建镜像

在开发机器上执行:

powershell
# Windows
mvn clean package -DskipTests
docker build -f docker/Dockerfile-gateway -t jpwise/gateway:2.2.0-RELEASE .
docker save jpwise/gateway:2.2.0-RELEASE -o jpwise-gateway.tar
bash
# Linux/Mac
mvn clean package -DskipTests
docker build -f docker/Dockerfile-gateway -t jpwise/gateway:2.2.0-RELEASE .
docker save jpwise/gateway:2.2.0-RELEASE -o jpwise-gateway.tar

步骤2:上传新镜像到服务器

方式 A:使用 1Panel 文件管理

  1. 登录 1Panel
  2. 文件文件管理
  3. 导航到 /opt/jpwise-docker/images/
  4. 点击 上传 按钮
  5. 选择新的 jpwise-gateway.tar 文件上传

方式 B:使用 SCP 命令

bash
# 请将 YOUR_SERVER_IP 替换为实际的服务器IP地址
scp jpwise-gateway.tar root@YOUR_SERVER_IP:/opt/jpwise-docker/images/

步骤3:在 1Panel 中导入新镜像

  1. 容器镜像导入
  2. 选择导入方式:从文件导入
  3. 文件路径:/opt/jpwise-docker/images/jpwise-gateway.tar
  4. 点击 确定
  5. 等待导入完成

重要:导入相同名称和标签的镜像会自动覆盖旧镜像。

步骤4:重新创建容器

方式 A:停止并删除旧容器,然后创建新容器

  1. 容器容器 → 找到 jpwise-gateway
  2. 点击 操作停止
  3. 点击 操作删除(注意:不删除数据卷)
  4. 点击 创建容器 按钮
  5. 按照 4.1 部署网关服务 的配置重新创建容器
  6. 启动容器

方式 B:使用终端命令(更快)

  1. 在 1Panel 中选择 主机终端
  2. 执行以下命令:
bash
# 停止并删除旧容器
docker stop jpwise-gateway
docker rm jpwise-gateway

# 重新创建容器
docker run -d \
  --name jpwise-gateway \
  --restart=always \
  -p 30002:30002 \
  -e SPRING_PROFILES_ACTIVE=dev \
  -e NACOS_SERVER_ADDR=jpwise-nacos:8848 \
  -e NACOS_USERNAME=nacos \
  -e NACOS_PASSWORD=nacos \
  -e NACOS_NAMESPACE=dev \
  -e TZ=Asia/Shanghai \
  --link jpwise-nacos:nacos \
  -v /opt/jpwise-docker/logs/gateway:/app/logs \
  jpwise/gateway:2.2.0-RELEASE

步骤5:验证更新

  1. 查看容器日志确认启动成功
  2. 在 Nacos 控制台确认服务注册成功
  3. 访问服务验证功能

6.2 快速更新流程(推荐)

为了简化更新流程,可以在服务器上创建更新脚本。

6.2.1 创建更新脚本

在服务器上创建 /opt/jpwise-docker/update-service.sh

bash
#!/bin/bash

# 微服务更新脚本
# 用法: ./update-service.sh gateway|platform|business

SERVICE_NAME=$1

if [ -z "$SERVICE_NAME" ]; then
    echo "用法: $0 {gateway|platform|business}"
    exit 1
fi

IMAGE_NAME="jpwise/${SERVICE_NAME}:2.2.0-RELEASE"
CONTAINER_NAME="jpwise-${SERVICE_NAME}"
IMAGE_FILE="/opt/jpwise-docker/images/jpwise-${SERVICE_NAME}.tar"

echo "=== 开始更新 ${SERVICE_NAME} 服务 ==="

# 1. 检查镜像文件是否存在
if [ ! -f "$IMAGE_FILE" ]; then
    echo "错误: 镜像文件不存在 - $IMAGE_FILE"
    exit 1
fi

# 2. 导入新镜像
echo "1. 导入镜像..."
docker load -i $IMAGE_FILE

# 3. 停止并删除旧容器
echo "2. 停止旧容器..."
docker stop $CONTAINER_NAME 2>/dev/null || true
docker rm $CONTAINER_NAME 2>/dev/null || true

# 4. 清理悬空镜像
echo "3. 清理悬空镜像..."
docker image prune -f

# 5. 根据服务类型启动新容器
echo "4. 启动新容器..."

if [ "$SERVICE_NAME" == "gateway" ]; then
    docker run -d \
      --name $CONTAINER_NAME \
      --restart=always \
      -p 30002:30002 \
      -e SPRING_PROFILES_ACTIVE=dev \
      -e NACOS_SERVER_ADDR=jpwise-nacos:8848 \
      -e NACOS_USERNAME=nacos \
      -e NACOS_PASSWORD=nacos \
      -e NACOS_NAMESPACE=dev \
      -e TZ=Asia/Shanghai \
      --link jpwise-nacos:nacos \
      -v /opt/jpwise-docker/logs/gateway:/app/logs \
      $IMAGE_NAME

elif [ "$SERVICE_NAME" == "platform" ]; then
    docker run -d \
      --name $CONTAINER_NAME \
      --restart=always \
      -p 30003:30003 \
      -e SPRING_PROFILES_ACTIVE=dev \
      -e NACOS_SERVER_ADDR=jpwise-nacos:8848 \
      -e NACOS_USERNAME=nacos \
      -e NACOS_PASSWORD=nacos \
      -e NACOS_NAMESPACE=dev \
      -e TZ=Asia/Shanghai \
      --link jpwise-nacos:nacos \
      --link jpwise-redis:redis \
      -v /opt/jpwise-docker/logs/platform:/app/logs \
      $IMAGE_NAME

elif [ "$SERVICE_NAME" == "business" ]; then
    docker run -d \
      --name $CONTAINER_NAME \
      --restart=always \
      -p 30004:30004 \
      -e SPRING_PROFILES_ACTIVE=dev \
      -e NACOS_SERVER_ADDR=jpwise-nacos:8848 \
      -e NACOS_USERNAME=nacos \
      -e NACOS_PASSWORD=nacos \
      -e NACOS_NAMESPACE=dev \
      -e TZ=Asia/Shanghai \
      --link jpwise-nacos:nacos \
      --link jpwise-redis:redis \
      -v /opt/jpwise-docker/logs/business:/app/logs \
      $IMAGE_NAME
fi

# 6. 等待启动并查看日志
echo "5. 等待服务启动..."
sleep 10

echo "6. 查看启动日志..."
docker logs --tail 100 $CONTAINER_NAME

echo "=== ${SERVICE_NAME} 服务更新完成 ==="
echo ""
echo "查看实时日志: docker logs -f $CONTAINER_NAME"
echo "检查服务注册: 访问 Nacos 控制台"

赋予执行权限:

bash
chmod +x /opt/jpwise-docker/update-service.sh

6.2.2 使用更新脚本

上传新镜像文件后,执行:

bash
# 更新网关服务
/opt/jpwise-docker/update-service.sh gateway

# 更新平台服务
/opt/jpwise-docker/update-service.sh platform

# 更新业务服务
/opt/jpwise-docker/update-service.sh business

7. 监控和维护

7.1 健康检查

定期检查容器健康状态:

  1. 在 1Panel 中查看容器列表
  2. 确认所有容器状态为 运行中
  3. 查看容器资源使用情况

7.2 日志管理

配置日志轮转(已在 Docker 配置中设置):

json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

定期清理日志

bash
# 清理指定容器日志
truncate -s 0 $(docker inspect --format='{{.LogPath}}' jpwise-gateway)

# 批量清理所有容器日志
for container in $(docker ps -q); do
    truncate -s 0 $(docker inspect --format='{{.LogPath}}' $container)
done

7.3 数据备份

7.3.1 数据库备份

MySQL 数据库备份:

bash
# 如果数据库在宿主机或独立服务器
# 备份所有数据库
mysqldump -h数据库主机 -u用户名 -p --all-databases > /opt/jpwise-docker/backup/mysql-backup-$(date +%Y%m%d).sql

# 备份指定数据库
mysqldump -h数据库主机 -u用户名 -p jpwise_platform > /opt/jpwise-docker/backup/platform-$(date +%Y%m%d).sql
mysqldump -h数据库主机 -u用户名 -p jpwise_business > /opt/jpwise-docker/backup/business-$(date +%Y%m%d).sql

# 恢复数据
mysql -h数据库主机 -u用户名 -p < /opt/jpwise-docker/backup/mysql-backup-20250101.sql

达梦数据库备份:

bash
# 使用达梦提供的备份工具
# 备份数据库
DmBackup BACKUP=/opt/jpwise-docker/backup/dm-backup-$(date +%Y%m%d).bak DATABASE=jpwise_platform

# 恢复数据库
DmRestore RESTORE=/opt/jpwise-docker/backup/dm-backup-20250101.bak DATABASE=jpwise_platform

说明: 具体备份命令根据数据库部署方式和版本可能有所不同,请参考对应数据库的官方文档。

7.3.2 Redis 数据备份

bash
# 触发 RDB 快照
docker exec jpwise-redis redis-cli -a 123456.zxc SAVE

# 复制备份文件
docker cp jpwise-redis:/data/dump.rdb /opt/jpwise-docker/backup/redis-backup-$(date +%Y%m%d).rdb

7.3.3 Nacos 配置备份

  1. 登录 Nacos 控制台
  2. 进入 配置管理配置列表
  3. 点击配置右侧的 导出
  4. 保存配置文件到本地

或使用脚本备份:

bash
# 使用 Nacos Open API 导出配置
# 请将 YOUR_SERVER_IP 替换为实际的服务器IP地址,如果在服务器本机可使用 localhost
NACOS_ADDR="http://YOUR_SERVER_IP:8848"
NAMESPACE="dev"
NACOS_USERNAME="nacos"  # Nacos用户名
NACOS_PASSWORD="nacos"  # Nacos密码,如已修改请使用实际密码

curl -X GET "${NACOS_ADDR}/nacos/v1/cs/configs?export=true&group=JPWISE_GROUP&tenant=${NAMESPACE}&ids=" \
  -u ${NACOS_USERNAME}:${NACOS_PASSWORD} \
  -o /opt/jpwise-docker/backup/nacos-config-$(date +%Y%m%d).zip

8. 常见问题排查

8.1 容器启动失败

排查步骤

  1. 查看容器日志

    • 在 1Panel 中点击容器名称 → 日志 标签页
    • 查找错误信息
  2. 检查端口冲突

    bash
    # 检查端口是否被占用
    netstat -tunlp | grep 端口号
  3. 检查依赖服务是否启动

    • 确认 MySQL、Redis、Nacos 容器正常运行
    • 检查容器之间的网络连接

8.2 服务无法注册到 Nacos

可能原因

  1. Nacos 未启动或未就绪

    • 检查 Nacos 容器状态
    • 访问 Nacos 控制台确认服务可用
  2. 网络连接问题

    • 检查容器是否正确链接到 Nacos
    • 进入容器测试连接:
      bash
      docker exec jpwise-gateway ping jpwise-nacos
      docker exec jpwise-gateway curl http://jpwise-nacos:8848/nacos/
  3. 配置错误

    • 检查环境变量配置
    • 确认 Nacos 命名空间和 Group 配置正确

8.3 数据库连接失败

排查步骤

  1. 检查数据库服务是否正常运行

    bash
    # 如果数据库在宿主机
    systemctl status mysqld  # MySQL
    # systemctl status DmServiceDMSERVER  # 达梦
    
    # 如果在独立服务器,登录服务器检查
    # 或使用数据库客户端工具测试连接
  2. 检查数据库是否已创建

    bash
    # MySQL
    mysql -h数据库主机 -u用户名 -p -e "SHOW DATABASES;"
    
    # 达梦
    # 使用达梦管理工具或DM客户端检查
  3. 检查网络连通性

    bash
    # 从容器内测试数据库连接
    docker exec jpwise-platform ping 数据库主机地址
    docker exec jpwise-platform telnet 数据库主机地址 3306  # MySQL
    # docker exec jpwise-platform telnet 数据库主机地址 5236  # 达梦
  4. 检查防火墙配置

    bash
    # 确认数据库端口已开放
    firewall-cmd --list-ports
  5. 检查 Nacos 配置中的数据库连接信息

    • 确认主机地址、端口、用户名、密码正确
    • 如果数据库在宿主机,确认使用了正确的访问地址

8.4 Redis 连接失败

排查步骤

  1. 检查 Redis 容器状态

    bash
    docker ps | grep redis
    docker logs jpwise-redis
  2. 测试 Redis 连接

    bash
    docker exec jpwise-redis redis-cli -a 123456.zxc ping
  3. 检查容器链接

    bash
    docker exec jpwise-platform ping jpwise-redis

8.5 内存不足

解决方案

  1. 查看容器资源使用

    • 在 1Panel 容器监控 中查看
  2. 调整 JVM 内存参数

    • 修改容器启动命令中的 JVM 参数
    • 或在 Dockerfile 中调整
  3. 限制容器资源

    bash
    # 重新创建容器时添加资源限制
    docker run -d \
      --name jpwise-gateway \
      --memory="2g" \
      --cpus="2" \
      ...其他参数

8.6 查看完整错误堆栈

bash
# 查看容器完整日志
docker logs jpwise-gateway 2>&1 | less

# 搜索错误
docker logs jpwise-gateway 2>&1 | grep -i error

# 导出日志到文件
docker logs jpwise-gateway > /tmp/gateway-error.log 2>&1

附录

A. 端口清单

服务端口说明
MySQL3306MySQL数据库(如使用)
达梦5236达梦数据库(如使用)
Redis6379缓存服务
Nacos8848Nacos控制台和HTTP API
Nacos9848客户端gRPC
Nacos9849服务端gRPC
Minio9000Minio API
Minio9090Minio控制台
Gateway30002网关服务
Platform30003平台服务
Business30004业务服务
OpenResty80HTTP(1Panel)
OpenResty443HTTPS(1Panel)

注意

  • 生产环境建议只开放 80、443 端口,其他服务端口不对外暴露
  • 数据库端口根据实际部署方式决定是否开放
  • 前端通过 1Panel 的 OpenResty 反向代理部署

B. Docker 常用命令速查

bash
# 容器管理
docker ps                                # 查看运行中的容器
docker ps -a                             # 查看所有容器
docker start 容器名                       # 启动容器
docker stop 容器名                        # 停止容器
docker restart 容器名                     # 重启容器
docker rm 容器名                          # 删除容器
docker rm -f 容器名                       # 强制删除容器

# 日志查看
docker logs 容器名                        # 查看容器日志
docker logs -f 容器名                     # 实时查看日志
docker logs --tail 100 容器名             # 查看最近100行
docker logs --since 30m 容器名            # 查看最近30分钟

# 容器操作
docker exec -it 容器名 /bin/sh            # 进入容器
docker exec 容器名 命令                   # 在容器中执行命令
docker cp 本地文件 容器名:/容器路径        # 复制文件到容器
docker cp 容器名:/容器路径 本地路径        # 从容器复制文件

# 镜像管理
docker images                            # 查看镜像列表
docker load -i 镜像文件.tar               # 导入镜像
docker save 镜像名 -o 镜像文件.tar        # 导出镜像
docker rmi 镜像名                         # 删除镜像
docker image prune -f                    # 清理悬空镜像

# 资源监控
docker stats                             # 查看容器资源使用
docker stats 容器名                       # 查看指定容器
docker inspect 容器名                     # 查看容器详情

C. 快速启动脚本

创建 /opt/jpwise-docker/start-all.sh

bash
#!/bin/bash

echo "========================================="
echo "JPwise 微服务容器化部署启动脚本"
echo "========================================="

# 检查Docker服务
if ! systemctl is-active --quiet docker; then
    echo "启动 Docker 服务..."
    systemctl start docker
fi

# 启动基础服务
echo ""
echo "1. 启动基础服务..."
docker start jpwise-redis
sleep 5
docker start jpwise-nacos

# 等待 Nacos 就绪
echo ""
echo "2. 等待 Nacos 启动(约30秒)..."
sleep 30

# 启动微服务
echo ""
echo "3. 启动微服务..."
docker start jpwise-gateway
docker start jpwise-platform
docker start jpwise-business

# 等待微服务启动
echo ""
echo "4. 等待微服务启动(约30秒)..."
sleep 30

# 检查服务状态
echo ""
echo "========================================="
echo "服务状态:"
echo "========================================="
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep jpwise

echo ""
echo "========================================="
echo "访问地址:"
echo "========================================="
IP=$(hostname -I | awk '{print $1}')
echo "Nacos控制台: http://${IP}:8848/nacos"
echo "API网关: http://${IP}:30002"
echo "API文档: http://${IP}:30002/doc.html"
echo "========================================="
echo "查看日志: docker logs -f 容器名"
echo "========================================="

赋予执行权限:

bash
chmod +x /opt/jpwise-docker/start-all.sh

使用方法:

bash
/opt/jpwise-docker/start-all.sh

D. 生产环境优化建议

D.1 安全加固

  1. 修改默认密码:修改 MySQL、Redis、Nacos、Minio 的默认密码
  2. 关闭不必要的端口:生产环境只暴露必要的端口
  3. 使用 HTTPS:为 Nginx 配置 SSL 安全证书
  4. 网络隔离:使用 Docker 自定义网络隔离服务
  5. 启用防火墙:配置 iptables 或 firewalld

D.2 性能优化

  1. JVM 参数调优

    • 根据服务器配置调整堆内存大小
    • 使用 G1GC 垃圾回收器
    • 配置合理的 GC 参数
  2. 数据库连接池

    • 调整 HikariCP 最大连接数
    • 配置连接超时时间
  3. Redis 持久化

    • 根据需求选择 RDB 或 AOF
    • 配置合理的持久化策略
  4. 容器资源限制

    • 为每个容器设置 CPU 和内存限制
    • 避免资源争抢

D.3 高可用部署

  1. Nacos 集群:部署 3 节点 Nacos 集群
  2. MySQL 主从复制:配置 MySQL 主从或使用 MySQL 集群
  3. Redis 哨兵/集群:使用 Redis Sentinel 或 Redis Cluster
  4. 微服务多实例:每个微服务至少部署 2 个实例
  5. 负载均衡:使用 Nginx 或其他负载均衡器

💡 部署提示

  • 使用 1Panel 可视化面板:图形化操作,简单直观
  • 镜像构建:在本地开发机构建,然后导出上传到服务器
  • 配置管理:统一使用 Nacos 配置中心管理配置

📖 参考文档

🔧 技术支持