Java 微服务网站部署详细操作步骤

一、服务器基础环境准备

1.1 安装宝塔面板

  • 连接服务器:使用 SSH 工具(如 Xshell、Putty 或腾讯云/阿里云的 Web Shell)连接你的服务器。

  • 执行安装命令

    根据你的操作系统,复制并执行以下命令

  • CentOS/RedHat/Fedora:

    复制代码
    # CentOS/RedHat/Fedora
    yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
    
    # Ubuntu/Debian
    wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh

    安装完成后,务必保存终端输出的面板访问地址、用户名和密码。

1.2 安全初始化

  • 修改面板默认端口 :登录宝塔面板 → 面板设置 → 端口改为 18888 或其他高位端口。

  • 开启BasicAuth认证:面板设置 → 开启BasicAuth,增加一层访问保护。

  • 配置防火墙 :在宝塔左侧 「安全」 菜单中,只放行必要端口(SSH、80、443、面板端口),微服务内部端口(如8081-8090)不要添加到放行列表。

  • 服务器安全组:在云服务商控制台同步放行上述端口。

二、基础环境软件安装

在宝塔面板左侧点击 「软件商店」,搜索并安装以下软件:

软件 版本建议 安装方式 用途
Nginx 最新稳定版 软件商店一键安装 Web服务器/反向代理
MySQL 5.7 或 8.0 软件商店一键安装 业务数据库
OpenJDK 1.8 / 11 / 17 在「Java项目」中安装更佳 Java运行环境
Docker管理器 最新版 软件商店安装插件 容器化管理
Jenkins 最新LTS版 ① 软件商店直接安装 ② Docker方式安装(推荐) CI/CD持续集成/自动化部署
Nacos 最新稳定版 ① 软件商店搜索安装 ② Docker管理器拉取镜像运行 ③ 手动上传安装包部署 服务注册发

2.1 配置Java环境

  • 点击左侧 「网站」 → 切换到 「Java项目」 选项卡。

  • 点击 「Java环境管理」「JDK管理」,选择需要的版本(如OpenJDK 17)点击安装。

2.2 配置MySQL数据库

  • 点击左侧 「数据库」「添加数据库」

  • 填写数据库名、用户名、密码,务必与Spring Boot配置文件一致

  • 访问权限选择 「本地服务器」(服务同机部署)。

  • 点击 「提交」 完成创建。

  • (可选)点击 「导入」,上传项目的SQL初始化脚本。

三、部署微服务Docker容器化部署

Docker部署能让环境更标准化,便于迁移和扩展。

3.1 安装Docker环境

方案一:通过宝塔插件安装

  1. 进入 「软件商店」 ,搜索 「Docker管理器」 并安装。

  2. 安装完成后,左侧菜单会出现 「Docker」 入口。

方案二:命令行安装(推荐,版本更新)

复制代码
# 安装Docker
curl -fsSL https://get.docker.com | bash

# 启动Docker
systemctl start docker
systemctl enable docker

# 验证安装
docker --version

3.2 编写Dockerfile

在项目根目录创建Dockerfile(以user-service为例):

复制代码
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY target/user-service.jar /app/app.jar
EXPOSE 8081
ENTRYPOINT ["java", "-jar", "/app/app.jar", "--spring.profiles.active=prod"]

3.3 构建镜像

方式一:命令行构建

复制代码
# 在项目目录执行
docker build -t user-service:1.0.0 .

方式二:宝塔Docker界面构建

  • 进入 「Docker」「镜像」「构建镜像」

  • 选择Dockerfile所在目录,填写镜像名和标签,点击构建。

3.4 运行容器

方式一:命令行运行

复制代码
docker run -d --name user-service -p 8081:8081 user-service:1.0.0

方式二:宝塔Docker界面运行

  • 进入 「Docker」「容器」「创建容器」

  • 选择镜像,配置端口映射(主机端口:容器端口),挂载卷(如有需要),点击提交。

3.5 使用Docker Compose编排多服务

创建 /home/docker-compose/docker-compose.yml

复制代码
version: '3.8'
services:
  # 注册中心
  consul:
    image: consul:1.15
    ports:
      - "8500:8500"
    command: agent -dev -client=0.0.0.0

  # 用户服务
  user-service:
    image: user-service:1.0.0
    ports:
      - "8081:8081"
    depends_on:
      - consul
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_CONSUL_HOST=consul

  # 订单服务
  order-service:
    image: order-service:1.0.0
    ports:
      - "8082:8082"
    depends_on:
      - consul
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_CONSUL_HOST=consul

  # 网关
  gateway:
    image: gateway:1.0.0
    ports:
      - "8080:8080"
    depends_on:
      - consul
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_CONSUL_HOST=consul

启动所有服务:

复制代码
cd /home/docker-compose
docker-compose up -d
docker-compose ps
docker-compose logs -f user-service

3.6 配置Nginx代理Docker容器

与JAR部署类似,在宝塔 「Java项目」「网站」 中配置反向代理,目标地址指向Docker映射的端口(如 http://127.0.0.1:8080)。

四、服务注册与发现(Consul/Nacos)

4.1 通过Docker安装Consul

复制代码
docker run -d \
  --name consul \
  -p 8500:8500 \
  -p 8600:8600/udp \
  consul:1.15 agent -dev -client=0.0.0.0

访问 http://your-server-ip:8500 可查看Consul UI。

4.2 微服务配置(Spring Boot)

application-prod.yml 中配置:

复制代码
spring:
  cloud:
    consul:
      host: localhost  # 如果用Docker Compose,写服务名如 consul
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        health-check-path: /actuator/health
        health-check-interval: 10s
        prefer-ip-address: true

4.3 通过宝塔管理

onsul容器可以在宝塔的 「Docker」「容器」 中查看状态、查看日志、重启或停止。

五、CI/CD自动化部署(Jenkins)

5.1 安装Jenkins

方式一:通过宝塔软件商店安装

  1. 进入 「软件商店」 ,搜索 「Jenkins」 并安装。

  2. 安装完成后,在左侧菜单会出现Jenkins入口,点击进入配置。

方式二:通过Docker安装(推荐)

复制代码
docker run -d \
  --name jenkins \
  -p 8088:8080 \
  -p 50000:50000 \
  -v /home/jenkins:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins:lts

访问 http://your-server-ip:8088,查看初始密码:

复制代码
docker logs jenkins | grep -A 5 "Jenkins initial setup"

5.2 配置Jenkins

  1. 浏览器访问Jenkins,输入初始密码完成初始化。

  2. 安装推荐插件(Git、Maven、Docker Pipeline等)。

  3. 配置全局工具:

    • JDK :配置路径 /usr/lib/jvm/java-17-openjdk-amd64

    • Maven:让Jenkins自动安装或指定已安装路径

    • Git :系统Git路径 /usr/bin/git

5.3 创建Pipeline流水线

在项目代码仓库根目录创建 Jenkinsfile

复制代码
pipeline {
    agent any
    
    environment {
        APP_NAME = 'user-service'
        DOCKER_IMAGE = 'user-service'
        DOCKER_TAG = "${env.BUILD_NUMBER}"
        DEPLOY_SERVER = 'your-server-ip'
    }
    
    stages {
        stage('代码拉取') {
            steps {
                git 'https://gitlab.com/your-project/user-service.git'
            }
        }
        
        stage('Maven构建') {
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }
        
        stage('构建Docker镜像') {
            steps {
                sh "docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} ."
                sh "docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest"
            }
        }
        
        stage('部署到服务器') {
            steps {
                sh """
                    # 停止并删除旧容器(如存在)
                    ssh javaapp@${DEPLOY_SERVER} "docker stop ${APP_NAME} || true"
                    ssh javaapp@${DEPLOY_SERVER} "docker rm ${APP_NAME} || true"
                    
                    # 推送镜像(如使用私有仓库)
                    # docker push registry.you.com/${DOCKER_IMAGE}:${DOCKER_TAG}
                    
                    # 运行新容器
                    ssh javaapp@${DEPLOY_SERVER} "docker run -d --name ${APP_NAME} -p 8081:8081 ${DOCKER_IMAGE}:${DOCKER_TAG}"
                """
            }
        }
    }
    
    post {
        success {
            echo '🎉 部署成功!'
        }
        failure {
            echo '❌ 部署失败,请检查日志。'
        }
    }
}

5.4 配置Webhook自动触发

  1. 在Jenkins任务中,勾选 「Build Triggers」「GitHub hook trigger for GITScm polling」

  2. 在GitLab/GitHub仓库中设置Webhook,URL为 http://jenkins-server:8080/github-webhook/

  3. 代码推送后,Jenkins会自动拉取代码、构建、打包、部署。

5.5 宝塔面板中的管理

Jenkins容器可以在宝塔 「Docker」 中查看和管理,包括:

  • 查看容器状态和日志

  • 重启、停止容器

  • 进入容器终端执行命令

六、运维监控与日志管理

6.1 日志查看

  • Java项目日志 :在宝塔 「Java项目」 中点击 「日志」 查看。

  • Docker容器日志 :在 「Docker」「容器」 中点击 「日志」

  • Nginx访问日志 :在宝塔 「网站」 中点击对应站点查看。

  • 应用日志文件 :在 「文件」 管理中进入 /home/javaapp/app/logs/ 查看。

6.2 性能监控

  • 宝塔面板首页:实时查看CPU、内存、磁盘、网络状态。

  • MySQL监控 :在 「数据库」 中查看慢查询日志和性能状态。

  • Docker资源 :在 「Docker」「容器」 中查看各容器的资源占用。

6.3 定时备份

在宝塔 「计划任务」 中设置:

任务类型 执行周期 备份内容
备份数据库 每日凌晨 MySQL全部数据库
备份网站文件 每日凌晨 /www/wwwroot/ 下全部代码
备份Docker数据卷 每日凌晨 /home/docker-data/ 等
释放内存 每周 清理系统缓存

七、完整架构总览

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      用户访问                               │
│                         ↓                                  │
│           Nginx (宝塔管理) :80/443                         │
│                     ↓ 反向代理                             │
│         ┌─────────────────────────┐                        │
│         │   Gateway 网关 :8080    │                        │
│         └───────────┬─────────────┘                        │
│                     │ Feign调用                           │
│     ┌───────────────┼───────────────┐                     │
│     ↓               ↓               ↓                     │
│  User服务        Order服务      Product服务                │
│  :8081            :8082           :8083                    │
│     │               │               │                      │
│     └───────────────┼───────────────┘                     │
│                     ↓                                      │
│           Consul/Nacos (服务注册发现)                      │
│                     ↓                                      │
│              MySQL (业务数据)                              │
│                                                           │
│  ┌─────────────────────────────────────────────────┐      │
│  │             宝塔面板管理界面                      │      │
│  │  Java项目 | Docker | 数据库 | 文件 | 计划任务    │      │
│  └─────────────────────────────────────────────────┘      │
│                                                           │
│  ┌─────────────────────────────────────────────────┐      │
│  │           Jenkins CI/CD 自动化流水线             │      │
│  │  代码提交 → 自动构建 → Docker镜像 → 自动部署     │      │
│  └─────────────────────────────────────────────────┘      │
└─────────────────────────────────────────────────────────────┘