宝塔面板-微服务项目部署

肖卓2024年9月18日
大约 13 分钟

以港口能量管理系统微服务项目为例,它常用的服务有

服务名称用途是否必须
nacos服务注册发现和统一配置中心
rabitmq消息中间件
xxl-job-admin分布式定时任务
sentinelSentinel监控
gateway网关微服务,统一的数据入口
systemjeecg系统服务,提供登录,系统配置等功能
demo业务代码微服务,实现主要的业务功能
zncb智能抄表微服务,与硬件设备对接

1.安装宝塔面板

官网下载安装地址:[https://www.bt.cn/new/download.html](https://www.bt.cn/new/download.html)

2.创建数据库

2.1创建naocs数据库

添加数据库选择Mysql数据库,配置数据库名

添加完成后导入数据sql,如下附件

tables_nacos.sqlopen in new window

2.2创建xxl-job数据库

添加数据库选择Mysql数据库,配置数据库名

添加完成后导入数据sql,如下附件

tables_xxl_job.sqlopen in new window

2.3创建Jeecg系统数据库

添加数据库选择Mysql数据库,配置数据库名

添加完成后导入数据sql,如下附件

ydb-wei-jeecg_2024-08-08_01-30-02_mysql_data.sql.gzopen in new window

2.4创建MongoDB数据库

MongoDB作为一款高性能高可用的灵活数据库可方便处理海量数据(每秒2.5万次数据处理),用来存储硬件设备发来的数据.

在宝塔上安装MongoDB数据库,然后添加一个数据库

2.5创建时序数据库InfluxDB

InfluxDB时序数据库只关注新增数据,不处理修改和删除数据,所以能做到海量数据的插入和查询,在亿级数据的查询上能做到毫秒级响应,丰富的查询语句和方式可以更好的查询数据.

官方文档:安装 InfluxDB |InfluxDB OSS 2.7 文档 (influxdata.com)open in new window

安装完成后创建一个存储桶

2.5创建Redis缓存

直接在宝塔面板的软件管理中搜索redis进行安装,设置端口和密码

3.修改项目配置

启动环境都搭建好了以后,就可以根据设置的环境修改项目配置,但是微服务项目中大部分的配置都在nacos中进行配置,所以当前介绍的是其他微服务如何连接nacos和nacos数据库配置,还有xxl-job分布式定时任务的配置

3.1Nacos配置

nacos作为一个注册和配置中心,我们只需要关注他连接的数据库,配置数据库的相关配置即可.

3.2打包Nacos

修改完成后即可将项目打包,因为其他的配置项需要在nacos中进行配置,需要先部署nacos

3.3部署Nacos

在宝塔面板上添加java项目,选择springboot类型

3.4Nacos操作

nacos部署成功后可以通过浏览器进行访问,我部署在内网服务器上,地址为

http://nacos.jyjb.org/nacos/index.htmlopen in new window

默认账号密码都是nacos

3.4.1创建命名空间

命名空间是一个概念,相当于工作空间,将不同的环境进行区分和隔离,比如测试和生产环境可以放到不同的命名空间下,每个命名空间下都可以配置不同的配置文件,服务注册后也在不同的空间下相互隔离

每个命令空间都会有自己唯一的ID,需要复制这个ID到项目的配置中,比如我的测试环境的命名空间是7e2140cf-c4e2-4760-81f5-19ef78b8d93d

3.4.2配置命令空间和注册地址

找到项目最核心的POM文件,修改其中的命令空间,dev,test,prod都有自己的命名空间和注册地址,生产环境中配置时需要将prod的命名空间ID修改,注册地址修改到当前环境下的nacos部署地址和端口

3.5XXL-JOB配置

分布式定时任务xxl-job我们需要关注的是他连接的数据源和accessToken

login中配置的是启动后的登录用户和密码,accessToken是其他服务启动后像定时任务注册时需要提供的秘钥

3.6微服务配置

以上都是在项目文件中进行配置,各个微服务的配置还没有进行配置,还要nacos能统一管理服务配置,不需要我们每次都修改项目文件配置,只需要在界面上操作即可,以下是测试环境的命名空间下的配置文件列表

如果是新的生产环境可能没有这些配置文件,需要从其他地方进行复制,其中文件名中的test都需要更改成prod,比如jeecg-test.yaml需要改成jeecg-prod.yaml,附件中是test环境的一些配置文件

nacos_config_export_20240808161509.zipopen in new window

其中基础的配置文件jeecg.yaml不需要更改其中配置

server:
  tomcat:
    max-swallow-size: -1
  error:
    include-exception: true
    include-stacktrace: ALWAYS
    include-message: ALWAYS
  compression:
    enabled: true
    min-response-size: 1024
    mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
management:
  health:
    mail:
      enabled: false
  endpoints:
    web:
      exposure:
        include: "*"
    health:
      sensitive: true
  endpoint:
    health:
      show-details: ALWAYS
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
  mail:
    host: smtp.163.com
    username: jeecgos@163.com
    password: ??
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
  quartz:
    job-store-type: jdbc
    initialize-schema: embedded
    auto-startup: false
    startup-delay: 1s
    overwrite-existing-jobs: true
    properties:
      org:
        quartz:
          scheduler:
            instanceName: MyScheduler
            instanceId: AUTO
          jobStore:
            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            tablePrefix: QRTZ_
            isClustered: true
            misfireThreshold: 12000
            clusterCheckinInterval: 15000
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 10
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true
  jackson:
    date-format:   yyyy-MM-dd HH:mm:ss
    time-zone:   GMT+8
  aop:
    proxy-target-class: true
  activiti:
    check-process-definitions: false
    async-executor-activate: false
    job-executor-activate: false
  jpa:
    open-in-view: false
  freemarker:
    suffix: .ftl
    content-type: text/html
    charset: UTF-8
    cache: false
    prefer-file-system-access: false
    template-loader-path:
      - classpath:/templates
  mvc:
    static-path-pattern: /**
    pathmatch:
      matching-strategy: ant_path_matcher
  resource:
    static-locations: classpath:/static/,classpath:/public/
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
mybatis-plus:
  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml
  global-config:
    banner: false
    db-config:
      id-type: ASSIGN_ID
      table-underline: true
  configuration:
    call-setters-on-nulls: true

3.6.1System微服务配置

system微服务使用的配置文件是jeecg-test.yaml,同时demo微服务也使用的这个配置文件,其中配置如下,需要将MongoDB配置,mysql配置,redis配置,rabbitmq配置,influxDB配置都修改成实际环境的配置,请注意#配置根据实际环境修改
spring:
  data:
  #配置根据实际环境修改
    mongodb:
      uri: mongodb://zncb:zncb123@192.168.0.101:27017/zncb
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
        allow:
      web-stat-filter:
        enabled: true
    dynamic:
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,wall,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
        master:
        #配置根据实际环境修改
          url: jdbc:mysql://192.168.0.101:3306/ydb-wei-test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
          username: ydb-wei-test
          password: ydbweiwang123
          driver-class-name: com.mysql.cj.jdbc.Driver
  redis:
  #配置根据实际环境修改
    database: 0
    host: 127.0.0.1
    password: 1qaz@WSX2ml
    port: 6380
  rabbitmq:
  #配置根据实际环境修改
    host: 124.71.136.36
    username: xiaozhuo
    password: 1qaz@WSX
    port: 5672
    publisher-confirms: true
    publisher-returns: true
    virtual-host: zncb
    listener:
      simple:
        acknowledge-mode: manual
        concurrency: 1
        max-concurrency: 1
        retry:
          enabled: true
minidao:
  base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
jeecg:
  signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a
  appId: 123456
  signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys
  uploadType: local
  domainUrl:
    pc: http://localhost:3100
    app: http://localhost:8051
  path:
    upload: /opt/jeecg/upFiles
    webapp: /opt/jeecg/webapp
    shelload: /opt/jeecg/shellFile
    tempload: /opt/jeecg/tempFile
    python: python3
  shiro:
    excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/actuator/**,/license/licenseInfo/edit
  oss:
    endpoint: oss-cn-beijing.aliyuncs.com
    accessKey: ??
    secretKey: ??
    bucketName: jeecgdev
    staticDomain: ??
  elasticsearch:
    cluster-name: jeecg-ES
    cluster-nodes: jeecg-boot-es:9200
    check-enabled: false
  file-view-domain: 127.0.0.1:8012
  minio:
    minio_url: http://minio.jeecg.com
    minio_name: ??
    minio_pass: ??
    bucketName: otatest
  jmreport:
    mode: dev
    is_verify_token: false
    verify_methods: remove,delete,save,add,update
  wps:
    domain: https://wwo.wps.cn/office/
    appid: ??
    appsecret: ??
  xxljob:
  #配置根据实际环境修改
    enabled: true
    adminAddresses: http://192.168.0.101:9080/xxl-job-admin
    appname: weiwang-test
    accessToken: 123456
    logPath: logs/jeecg/job/jobhandler/
    logRetentionDays: 30
    #配置根据实际环境修改
  redisson:
    address: 127.0.0.1:6380
    password: 1qaz@WSX2ml
    type: STANDALONE
    enabled: true
logging:
  level:
    org.jeecg.modules.system.mapper : info
cas:
  prefixUrl: http://localhost:8888/cas
knife4j:
  production: false
  basic:
    enable: false
    username: jeecg
    password: jeecg1314
justauth:
  enabled: true
  type:
    GITHUB:
      client-id: ??
      client-secret: ??
      redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback
    WECHAT_ENTERPRISE:
      client-id: ??
      client-secret: ??
      redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback
      agent-id: ??
    DINGTALK:
      client-id: ??
      client-secret: ??
      redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback
  cache:
    type: default
    prefix: 'demo::'
    timeout: 1h
third-app:
  enabled: false
  type:
    WECHAT_ENTERPRISE:
      enabled: false
      client-id: ??
      client-secret: ??
      agent-id: ??
    DINGTALK:
      enabled: false
      client-id: ??
      client-secret: ??
      agent-id: ??
#配置根据实际环境修改
influx:
  url: http://1.15.142.132:8090
  token: bDzTsDFqtnXTwXMcdfuy40qxENqArOCHlpZozNm90WInOmtCKxW0lLDNVAVxgTzEFzEwyFdTPZ0WlJJuUWGYXg==
  bucket: weiwang
  org: zncb

queue:
  #多个项目同时部署时,METER_HEART_QUEUE不能重复,否则消息在一个队列中轮询
  #电表心跳处理队列,接收电表心跳广播,处理电表心跳相关的事件
  METER_HEART_QUEUE: meter_heart_queue
  #同步消息接收队列,接收抄表系统发送的同步消息
  #多个项目同时部署时,SYNC_SEND_QUEUE,否则消息在一个队列中轮询
  ASYNC_RECEIVE_QUEUE: async_receive_queue
exchange:
  #异步接收交换机,广播模式
  ASYNC_SEND_EXCHANGE: async_send_exchange
  #同步接收交换机,广播模式
  SYNC_SEND_EXCHANGE: sync_send_exchange
  #异步发送交换机,定向模式
  ASYNC_RECEIVE_EXCHANGE: sync_receive_exchange
  #电表心跳处理交换机,广播模式
  METER_HEART_EXCHANGE: meter_heart_exchange

3.6.2Zncb微服务配置

zncb微服务是智能抄表的简称,主要与硬件设备进行对接,通过了丰富的数据传输和解析协议,可以通过TCP协议,MQTT协议,Http协议,Rabbit协议,Redis缓存进行数据的交换和转发,内置DLT645协议解析器,可以处理电表发过来的报文,然后将数据通过多种方式传输到其他服务中,修改的部分参考#配置根据实际环境修改
spring:
  mqtt:
  #配置根据实际环境修改
    username: xiaozhuo
    password: 123456
    client-id-prefix: tashi
    url: tcp://106.53.135.139:8096
    topics: wangguan/#,tashi
  data:
  #配置根据实际环境修改
    mongodb:
      uri: mongodb://zncb:zncb123@192.168.0.101:27017/zncb
netty:
  server:
  #配置根据实际环境修改
    port: 10084


queue:
  #多个项目同时部署时,ASYNC_SEND_QUEUE不能重复,否则消息在一个队列中轮询
  #异步消息发送队列,发送消息到异步队列中
  ASYNC_SEND_QUEUE: async_send_queue
  #同步消息接收队列,接收抄表系统发送的同步消息
  #多个项目同时部署时,SYNC_SEND_QUEUE,否则消息在一个队列中轮询
  SYNC_SEND_QUEUE: sync_send_queue
exchange:
  #异步接收交换机,广播模式
  ASYNC_SEND_EXCHANGE: async_send_exchange
  #同步接收交换机,广播模式
  SYNC_SEND_EXCHANGE: sync_send_exchange
  #异步发送交换机,定向模式
  ASYNC_RECEIVE_EXCHANGE: sync_receive_exchange
  #电表心跳交换机
  METER_HEART_EXCHANGE: meter_heart_exchange

3.6.3Gateway微服务

网关微服务需要连接redis和设置网关配置获取方式,默认从数据库中获取网关配置
jeecg:
  route:
    config:
      #type:database nacos yml
      data-type: database
      group: DEFAULT_GROUP
      data-id: jeecg-gateway-router
spring:
  redis:
    database: 0
    host: 127.0.0.1
    port: 6380
    password: 1qaz@WSX2ml

4.部署后端项目

以上配置都完成后,即可部署项目,首先要将项目打包

打包后有多个jar包,每个微服务的jar包都需要上传到宝塔面板的FTP中

4.1网关微服务部署

![](https://cdn.nlark.com/yuque/0/2024/png/44237161/1723106834666-3e4179f4-f648-431a-9936-c311646fed5d.png)

部署完成后打开页面

4.2定时任务服务部署

![](https://cdn.nlark.com/yuque/0/2024/png/44237161/1723106874876-4e6551b8-cc33-488c-ac7a-736480e50c2d.png)

部署完成后打开页面

4.3JEECG系统微服务部署

![](https://cdn.nlark.com/yuque/0/2024/png/44237161/1723106917996-ce7151ed-93f4-4ffe-8214-0b290510101d.png)

4.4哨兵监听微服务部署

![](https://cdn.nlark.com/yuque/0/2024/png/44237161/1723107027033-eccffc16-a316-49ab-8215-f26476de099a.png)

部署完成打开页面

4.5智能抄表微服务部署

![](https://cdn.nlark.com/yuque/0/2024/png/44237161/1723107586494-497627df-22dc-43fb-bb6f-9381793aad61.png)

4.6业务系统微服务部署

![](https://cdn.nlark.com/yuque/0/2024/png/44237161/1723107621673-552ba8e1-b590-4734-9653-cf0b9b418b91.png)

以上微服务部署完成需要检查日志中有无报错信息,根据实际的报错信息进行问题的排查,大部分问题还是进行文件配置时配置有遗漏的问题

5.部署前端项目

前端项目相对来说就容易部署太多了,只需要修改前端配置,然后将项目打包编译后上传到服务器中,简单的配置即可

5.1项目打包

修改配置文件.env.test,根据项目环境修改,如果是生产环境修改.env.prod,下面配置中配置后端网关微服务的url地址或者域名

编译项目,在package.json中选择编译的类型,测试环境编译或生产环境编译,点启动

编译完成后在项目根目录中会存在一个dist文件夹,将文件夹上传到FTP中

5.2配置项目

在宝塔面板中选择一个HTML项目,上传dist文件夹到FTP中,配置时选择ftp下的dist文件夹,配置好域名即可访问

打开页面地址

以上就是项目部署的全过程,如果出现了验证码说明整个配置没问题,可登录访问

6.进阶部署

通过以上方式部署成功后,存在一个问题,每次代码发版更新都要重新进行代码拉取,打包编译,上传到FTP,重启项目整个流程,有没有方式能简化这些步骤,可以使用Jenkins进行一键部署,全自动的拉取代码,编译,上传,重启项目,以下是文档地址

https://www.yuque.com/xiaozhuo-fapnj/qpukwi/dzp1ugf4s24dd9bk?singleDoc#open in new window 《Jenkins使用》

上次编辑于: 2024/9/18 16:07:54
贡献者: 肖卓
评论
Powered by Waline v2.5.1