Linux 基于 Docker 容器化部署 Pmhub 项目

news2024/9/29 9:23:13

文章目录

  • Linux 基于 Docker 容器化部署Pmhub项目
    • 前置准备条件
      • ( 必做 )MYSQL环境配置
      • ( 必做 )Redis环境配置
      • ( 必做 )Nacos环境配置
      • ( 选做 )Seata环境配置
      • ( 选做 )容器可视化工具Portainer
    • 部署各服务到Docker
      • PmHub-gateway
        • 修改配置文件`bootstrap.yml`
        • 修改Nacos中`pmhub-gateway-dev.yml`的配置
        • package for jar 包
        • 将 jar 包上传服务器
        • 编写`Dockerfile`
        • 将 jar 包制作成镜像
        • 查看构建的镜像 - docker images
        • 启动gateway网关服务 - 再查看启动日志
        • 启动成功画面如下
        • 访问一下检查是否部署成功
    • PmHub-system
    • PmHub-auth
    • PmHub-project
    • PmHub-workflow
    • PmHub-gen
    • PmHub-job
    • PmHub-monitor
    • 小结

Linux 基于 Docker 容器化部署Pmhub项目

使用 Docker Compose 搭建项目环境,简化项目部署过程,降低环境差异性问题,提升资源隔离安全性
线下爱你千万遍,不如线上见一面 (哈哈哈, 这句话戳到我了~🤣)

前置准备条件

  • 全部的中间件我都是基于**Linux****Docker**部署的, 为了更好的管理
  • 不习惯用**XShell**等工具可以装个可视化管理工具, 虽然有一定的侵入性…
  • 这里我用的可视化管理工具是**portainer.io**, 部署的容器都很容易管理

image.png

  • 强调一点, 这里部署项目仅供学习参考, 不要上生产环境!!
  • 部署的中间件我使用的基本都是默认端口, 很容易被别人扫的!!
  • 还有就是服务器上的中间件密码设置的复杂一些, 最好是大小写字母数字符号组合

( 必做 )MYSQL环境配置

  • 拉取镜像
docker pull mysql:8.0.33
  • 拷贝文件
mkdir -p /data/mysql/{conf,logs,data}

docker run -p 3306:3306 --name mysql -d mysql:8.0.33

docker cp mysql:/var/log/mysql /data/mysql
docker cp mysql:/var/lib/mysql /data/mysql
docker cp mysql:/etc/mysql/conf.d /data/mysql

chmod 777 /data/mysql/{conf,logs,data}

docker rm -f mysql
  • 创建容器
docker run -p 3306:3306 --name mysql \
-v /data/mysql/logs:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-e TZ=Asia/Shanghai --restart=always \
-e MYSQL_ROOT_PASSWORD=ovo@Knight \
-d mysql:8.0.33
  • 连接数据库

image.png

  • 将SQL导入到服务器的数据库中

image.png

( 必做 )Redis环境配置

  • 拉取镜像
docker pull redis:7.0.12
  • 拷贝文件
mkdir -p /data/redis/{conf,data,log}
touch /data/redis/log/redis.log

docker run -p 6379:6379 --name redis -d redis:7.0.12

docker cp redis:/data /data/redis
docker cp redis:/etc/redis.log /data/redis/log
docker cp redis:/etc/redis/redis.conf /data/redis/conf

chmod -R 777 /data/redis/conf/redis.conf /data/redis/log/redis.log /data/redis/data

docker rm -f redis
  • 创建容器
docker run --name redis \
-p 6379:6379 --restart=always \
-v /data/redis/data:/data \
-v /data/redis/log/redis.log:/etc/redis.log \
-v /data/redis/conf:/etc/redis/redis.conf \
-d redis:7.0.12 redis-server /etc/redis/redis.conf
  • 用测试工具查看是否成功部署Redis

image.png

( 必做 )Nacos环境配置

  • 拉取镜像
docker pull nacos/nacos-server:v2.1.1
  • 拷贝文件
mkdir -p /data/nacos/{conf,logs,data}

docker run -p 8848:8848 --name nacos -d nacos/nacos-server:v2.1.1

docker cp nacos:/home/nacos/conf /data/nacos
docker cp nacos:/home/nacos/data /data/nacos
docker cp nacos:/home/nacos/logs /data/nacos

chmod 777 /data/nacos/{conf,logs,data}

docker rm -f nacos
  • 创建容器
  • **MYSQL_SERVICE_HOST=192.168.100.100**修改为自己的IP
  • **MYSQL_SERVICE_PASSWORD=ovo@Knight**修改为自己的MYSQL密码
docker run -d \
-e MODE=standalone \
--privileged=true \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.100.100 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=ovo@Knight\
-e MYSQL_SERVICE_DB_NAME=pmhub-nacos \
-e TIME_ZONE='Asia/Shanghai' \
-v /data/nacos/logs:/home/nacos/logs \
-v /data/nacos/data:/home/nacos/data \
-v /data/nacos/conf:/home/nacos/conf \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--name nacos --restart=always nacos/nacos-server:v2.1.1
  • 查看是否成功部署Nacos
  • http://192.168.100.100:8848/nacos/** ( 换成服务器的IP )**

image.png

( 选做 )Seata环境配置

  • 创建对应的**seata**数据库, 也就是项目里的**pmhub_seata.sql**文件

  • 如果前面跟着我的步骤来的话, 数据库应该都已经创建了, 可以直接下一步

  • 拉取镜像

docker pull seataio/seata-server:1.5.2
  • 拷贝文件
mkdir -p /data/seata/conf

docker run -d -p 8091:8091 -p 7091:7091 --name seata seataio/seata-server:1.5.2

docker cp seata:/seata-server/resources/. /data/seata/conf

chmod 777 /data/seata/conf

docker rm -f seata
  • 修改配置文件**application.yml**

server:
  port: 7091

spring:
  application:
    name: seata-server

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${log.home:${user.home}/logs/seata}
  extend:
    logstash-appender:
      destination: 127.0.0.1:4560
    kafka-appender:
      bootstrap-servers: 127.0.0.1:9092
      topic: logback_to_logstash

console:
  user:
    username: seata
    password: seata

seata:
  config:
    type: nacos
    nacos:
      server-addr: 192.168.100.100:8848
      namespace:
      group: DEFAULT_GROUP
      username: nacos
      password: nacos
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 192.168.100.100:8848
      group: DEFAULT_GROUP
      namespace:
      cluster: default
      username: nacos
      password: nacos
  store:
    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://192.168.100.100:3306/pmhub-seata?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
      user: root
      password: xxxxxx
      min-conn: 10
      max-conn: 100
      global-table: global_table
      branch-table: branch_table
      lock-table: lock_table
      distributed-lock-table: distributed_lock
      query-limit: 1000
      max-wait: 5000
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/metadata/v1/**




  • **application.yml**中需要修改的地方, 换成自己的Nacos地址
  • Mysql数据库密码换成自己的, 其他保持跟我的一样就可以啦~

image.png
image.png
image.png

  • 在Nacos中新建pmhub-seata-dev.properties配置
#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
#Transport configuration, for client and server
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none

#Transaction routing rules configuration, only for the client
service.vgroupMapping.default_tx_group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false

#Transaction rule configuration, only for the client
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h

#Log rule configuration, for client and server
log.exceptionRate=100

#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional.
store.mode=db
store.lock.mode=db
store.session.mode=db
#Used for password encryption
store.publicKey=

#If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100

#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://192.168.100.100:3306/pmhub-seata?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
store.db.user=root
store.db.password=xxxxxx
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100

#Transaction rule configuration, only for the server
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=10000
server.xaerNotaRetryTimeout=60000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false

#Metrics configuration, only for the server
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

  • 这里的数据库IP地址和密码记得换成自己的哦~

image.png

  • **启动Seata容器 - ****SEATA_IP=192.168.100.100**改成自己服务器的地址
docker run --name seata \
-p 8091:8091 \
-p 7091:7091 \
-e SEATA_IP=192.168.100.100 \
-v /data/seata/conf:/seata-server/resources \
--privileged=true \
-d \
seataio/seata-server:1.5.2
  • 启动成功如图

image.png

( 选做 )容器可视化工具Portainer

  • 拉取镜像
docker pull portainer/portainer-ce
  • 启动镜像, 创建容器
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /dockerData/portainer:/data --restart=always --name portainer portainer/portainer-ce:latest
  • 访问可视化工具 - http://192.168.100.100:9000 ( 改成自己的服务器地址 )
  • 第一次进入需要设置admin的账号和密码, 设置一下就可以进来查看Docker里的容器了

image.png

部署各服务到Docker

	**-------前言-------**
  • 如果觉得每次打**Jar**包麻烦的话, 可以将全部配置都改好然后统一打包
  • 如果觉得每次制作镜像麻烦的话, 可以写一个脚本一键Copy, 下面粘一个苍何老师的sh脚本
  • 我这种部署方式算是比较传统的Docker单服务部署, 后面我有时间会出**docker-compose**来部署
#!/bin/sh

# 复制项目的文件到对应docker路径,便于一键生成镜像。
usage() {
	echo "Usage: sh copy.sh"
	exit 1
}


# copy sql
echo "begin copy sql "
cp ../sql/pmhub_20240305.sql ./mysql/db
cp ../sql/pmhub_nacos_20240423.sql ./mysql/db

# copy html
echo "begin copy html "
cp -r ../pmhub-ui/dist/** ./nginx/html/dist


# copy jar
echo "begin copy pmhub-gateway "
cp ../pmhub-gateway/target/pmhub-gateway.jar ./pmhub/gateway/jar

echo "begin copy pmhub-auth "
cp ../pmhub-auth/target/pmhub-auth.jar ./pmhub/auth/jar

echo "begin copy pmhub-monitor "
cp ../pmhub-monitor/target/pmhub-monitor.jar  ./pmhub/monitor/jar

echo "begin copy pmhub-system "
cp ../pmhub-modules/pmhub-system/target/pmhub-system.jar ./pmhub/modules/system/jar

echo "begin copy pmhub-job "
cp ../pmhub-modules/pmhub-job/target/pmhub-job.jar ./pmhub/modules/job/jar

echo "begin copy pmhub-gen "
cp ../pmhub-modules/pmhub-gen/target/pmhub-gen.jar ./pmhub/modules/gen/jar

echo "begin copy pmhub-project "
cp ../pmhub-modules/pmhub-project/target/pmhub-project.jar ./pmhub/modules/project/jar

echo "begin copy pmhub-workflow "
cp ../pmhub-modules/pmhub-workflow/target/pmhub-workflow.jar ./pmhub/modules/workflow/jar

PmHub-gateway

修改配置文件bootstrap.yml

image.png

修改Nacos中pmhub-gateway-dev.yml的配置
  • 改成自己服务器的IP和Redis部署的端口, 有密码加上密码

image.png

package for jar 包

image.png

将 jar 包上传服务器
  • 创建一个**Dockerfile**文件, 文件路径可以和我的一样

image.png

编写Dockerfile
# 基础镜像
FROM openjdk:11.0-jre-buster

# author
MAINTAINER ccoio

# 复制jar文件到路径
COPY pmhub-gateway.jar /pmhub-gateway.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","/pmhub-gateway.jar"]
将 jar 包制作成镜像
  • 先进入当前放置 jar 包的目录下, 再构建镜像
cd /root/pmhub/gateway/
docker build -t pmhub-gateway:v0.01 .

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看构建的镜像 - docker images

image.png

启动gateway网关服务 - 再查看启动日志
docker run -d --name pmhub-gateway -p 6880:6880 pmhub-gateway:v0.01
docker logs -f  pmhub-gateway
启动成功画面如下

image.png

  • 如果出现下面的错误大概率是Nacos没有成功启动

image.png

访问一下检查是否部署成功

image.png

PmHub-system

  • 前面的几步都和**pmhub-gateway**一样, 按部就班就行, 下面放一些截图供参考
  • **修改Nacos的配置文件记得发布哦~ 不然就白瞎了~ **🤣
  • **项目有个地方Redis配置要改成服务器的IP!!!, 如下图 : **

image.png

  • 修改**bootstrap.yml**配置文件

image.png

  • 修改Nacos里的**pmhub-system-dev.yml**文件

image.png

image.png

  • 将项目打成 Jar 包

image.png\

  • **Jar**包上传服务器

image.png

  • 编写Dockerfile文件
# 基础镜像
FROM openjdk:11.0-jre-buster

# author
MAINTAINER ccoio

# 复制jar文件到路径
COPY pmhub-system.jar /pmhub-system.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","/pmhub-system.jar"]
  • 将 Jar 包制作成镜像
docker build -t pmhub-system:v0.01 .

image.png

  • 启动**pmhub-system**服务, 再查看服务日志
docker run -d --name pmhub-system -p 6801:6801 pmhub-system:v0.01
docker logs -f pmhub-system

image.png

  • 检查是否部署成功

image.png

PmHub-auth

  • 到这样应该也轻车熟路了吧, 哈哈哈~

  • 自己动手尝试部署一个看看咯? 你一定可以的 ! ! !

  • 修改**bootstrap.yml**配置文件

image.png

  • 修改Nacos里的pmhub-auth-dev.yml配置文件

image.png

  • 打包成 Jar 包

image.png

  • 将 Jar 包上传服务器

image.png

  • 编写Dockerfile 文件
# 基础镜像
FROM openjdk:11.0-jre-buster

# author
MAINTAINER ccoio

# 复制jar文件到路径
COPY pmhub-auth.jar /pmhub-auth.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","/pmhub-auth.jar"]
  • 将 Jar 包制作成镜像
docker build -t pmhub-auth:v0.01 .

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 启动**pmhub-auth**服务, 再查看启动日志
docker run -d --name pmhub-auth -p 6800:6800 pmhub-auth:v0.01
docker logs -f pmhub-auth

image.png

  • 检查是否部署成功

image.png

PmHub-project

  • 部署这个服务要先部署有RocketMQ, 在我上篇文章里面写有部署教程, 也可以参考苍何老师的
  • https://articles.zsxq.com/id_zwoa78tgusjk.html** ( 本地Windows部署Pmhub )**
  • PmHub本地搭建RocketMQ环境 (yuque.com) ( PmHub本地搭建RocketMQ环境 )
  • **其他和前面的单服务部署基本一致, 下面放一些部署过程截图供参考. **✌️
  • 这里要记得修改Nacos里的**application-dev.yml**的RocketMQ地址

image.png

  • 修改**bootstrap.yml**配置文件image.png

  • 修改Nacos中的**pmhub-project-dev.yml**配置文件

image.png
image.png
image.png

  • 将项目打成 Jar 包

image.png

  • 将 Jar 包上传服务器

image.png

  • 编写Dockerfile文件
# 基础镜像
FROM openjdk:11.0-jre-buster

# author
MAINTAINER ccoio

# 复制jar文件到路径
COPY pmhub-project.jar /pmhub-project.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","/pmhub-project.jar"]
  • 将Jar包制作成镜像
docker build -t pmhub-project:v0.01 .

image.png

  • 启动**pmhub-project**服务, 再查看启动日志
docker run -d --name pmhub-project -p 6806:6806 pmhub-project:v0.01
  • 这个Error是因为没有启动Seata中间件, 但无伤大雅哈哈哈~
  • 不过后面**pmhub-project**会一直输出Error日志, 因为检测不到seata
  • 你可以选择部署seata然后写上相关的配置, 或者直接注释掉seata的配置也可以

image.png

  • 检查是否部署成功

image.png

PmHub-workflow

  • 准备要完成全服务的部署啦, 再坚持一下下~ 😜

  • 修改**bootstrap.yml**配置文件

image.png

  • 修改Nacos中的**pmhub-workflow-dev.yml**配置文件

image.png
image.png
image.png
image.png

  • 将项目打成 Jar 包

image.png

  • 将 Jar 包上传服务器

image.png

  • 编写Dockerfile文件
# 基础镜像
FROM openjdk:11.0-jre-buster

# author
MAINTAINER ccoio

# 复制jar文件到路径
COPY pmhub-workflow.jar /pmhub-workflow.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","/pmhub-workflow.jar"]
  • 将Jar包制作成镜像
docker build -t pmhub-workflow:v0.01 .

image.png

  • 启动**pmhub-workflow**, 再查看启动日志
docker run -d --name pmhub-workflow -p 6808:6808 pmhub-workflow:v0.01
docker logs -f pmhub-workflow

image.png

  • 检查是否部署成功

image.png

PmHub-gen

  • **pmhub-gen****pmhub-job****部署基本一样啦~ **

  • 修改**bootstrap.yml**配置文件

image.png

  • 修改Nacos中**pmhub-gen-dev.yml**配置文件

image.png
image.png

  • 将项目打成 Jar 包

image.png

  • 将 Jar 包上传服务器

image.png

  • 编写Dockerfile文件
# 基础镜像
FROM openjdk:11.0-jre-buster

# author
MAINTAINER ccoio

# 复制jar文件到路径
COPY pmhub-gen.jar /pmhub-gen.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","/pmhub-gen.jar"]
  • 将 Jar 包制作成镜像
docker build -t pmhub-gen:v0.01 .

image.png

  • 启动**pmhub-gen**, 再查看启动日志
docker run -d --name pmhub-gen -p 6802:6802 pmhub-gen:v0.01
docker logs -f pmhub-gen

image.png

  • 检查是否部署成功

image.png

PmHub-job

  • 还剩两个就部署完啦, 再坚持坚持~ 🐱

  • 修改**bootstrap.yml**配置文件

image.png

  • 修改Nacos中的**pmhub-job-dev.yml**文件

image.png
image.png

  • 将项目打成 Jar 包

image.png

  • 将 Jar 包上传服务器

image.png

  • 编写Dockerfile文件
# 基础镜像
FROM openjdk:11.0-jre-buster

# author
MAINTAINER ccoio

# 复制jar文件到路径
COPY pmhub-job.jar /pmhub-job.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","/pmhub-job.jar"]
  • 将 Jar 包制作成镜像
docker build -t pmhub-job:v0.01 .

image.png

  • 启动**pmhub-job**, 再查看启动日志
docker run -d --name pmhub-job -p 6803:6803 pmhub-job:v0.01
docker logs -f pmhub-job

image.png

  • 检查是否部署成功, 有响应就是部署成功啦~

image.png

PmHub-monitor

  • **终于到最后一个服务啦, 马上就全部部署成功啦~ **😸

  • 修改**bootstrap.yml**配置文件

image.png

  • 将项目打成 Jar 包

image.png

  • 将 Jar 包上传服务器

image.png

  • 编写Dockerfile文件
# 基础镜像
FROM openjdk:11.0-jre-buster

# author
MAINTAINER ccoio

# 复制jar文件到路径
COPY pmhub-monitor.jar /pmhub-monitor.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","/pmhub-monitor.jar"]
  • 将 Jar 包制作成镜像
docker build -t pmhub-monitor:v0.01 .

image.png

  • 启动**pmhub-monitor**, 再查看启动日志
docker run -d --name pmhub-monitor -p 6888:6888 pmhub-monitor:v0.01
docker logs -f pmhub-monitor

image.png

  • 检查是否部署成功
  • 输入**[**http://192.168.100.100:6888/login**](http://192.168.100.100:6888/login)** , 账号: admin 密码: 123456

image.png

image.png

小结

  • 至此全部服务都成功部署啦~
  • 我这种部署方式简单, 好理解, 就是略有些麻烦…
  • 但我觉得这样部署对于新手的理解会更好一些吧
  • 至少能让新手有更多实操的机会( 绝对不是我懒的写docker-compose! 哈哈哈)
  • 期待大家的反馈, 有问题可以评论区留言, 一起讨论, 一起学习, 共同进步 ! 🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1980420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

英特尔股市暴跌,财报亏损 | HuggingFace 实现盈利 |iOS18 Beta 苹果AI

写在前面 了解一下最近科技圈发生的一些事情 英特尔 硬件巨头英特尔宣布裁掉1.5w个岗位,约占英特尔员工的12%,非常的夸张。本次裁员可能是由于前段时间英特尔的i7,i9的13/14代处理器的暴雷,导致英特尔Q2的财报低迷。 今年以来…

IDC权威认可:亚信安全引跑中国DDI市场

近日,国际数据公司(IDC)正式发布了《IDC China Semiannual DDI Tracker, 2023H2》,亚信安全域名服务和地址分配及管理系统(AIDDI)凭借在企业核心网络防护中自动化、安全性、智能化的突出能力,占…

十分钟带你速通 Vue 组件

自定义组件 组件是可复用的 Vue 实例,在开发过程中,我们可以把重复用到的功能封装成自定义组件,达到便捷开发的目的。 组件的组织 通常一个应用会以一棵嵌套的组件树的形式来组织: 你可能会有头部导航、内容区、侧边栏等组件&a…

WEB漏洞-SQL注入之MYSQL注入

跨库注入的原理:针对同一IP下的不同域名 同一服务器下 网站A对应数据库A 网站B对应数据库B 网站C对应数据库C 如果某网站的存在注入点,注入点的权限恰好是root权限,也就是最高权限,那么可以通过跨库注入获取其他网站的数据库…

室内宠物空气净化器哪个好?排名靠前室内宠物空气净化器使用感受

自从家里有了4只英短后,一到季节我就得不停的拖地刷床,除了这些可以手动清理的猫毛之外,那么空气中的猫毛怎么办?感受一下40度高温的养猫人,给掉毛怪疏毛浮毛飘飘,逃不过的饮水机,各个角落&…

YOLOv8部署的4种不同部署方式推理速度对比:pytorch、onnx、ncnn、tflite

1.模型转换 首先,我们将yolov8n.pt转换分别转换成onnx、ncnn、tflite格式模型,供后续使用不同模型部署使用,进行速度对比测试。转换代码如下: # 转onnx yolo export model=yolov8n.pt format=onnx# 转ncnn yolo export model=yolov8n.pt format=ncnn# 转tflite yolo expo…

【C++】windows11环境包管理工具vcpkg配置和教程

【C】windows11环境包管理工具vcpkg配置和教程 文章目录 【C】windows11环境包管理工具vcpkg配置和教程vcpkg 概述Vckpg 下载和安装先决条件下载安装 初识vcpkg:新建helloworld项目集成到 Visual Studio全局集成和移除集成到项目 总结 vcpkg 概述 开源库绝大部分都…

Maven配置国内镜像仓库和本地仓库

参考文章:IDEA配置Maven教程(超详细版~)_idea maven配置教程-CSDN博客 1.找到Maven的 settings.xml文件 我的按照路径是:C:\Program Files\Java\apache-maven-3.9.8\conf 2.打开settings.xml文件 我的打开是这个样子 3.增加本地仓库 在根…

简单的docker学习 第12章 Docker Swarm

第12章 Docker Swarm 12.1 swarm 理论基础 12.1.1 简介 Docker Swarm 是由 Docker 公司推出的 Docker 的原生集群管理系统,它将一个 Docker主机池变成了一个单独的虚拟主机,用户只需通过简单的 API 即可实现与 Docker 集群的通信。Docker Swarm 使用 …

护眼大路灯哪个牌子好?2024学生护眼大路灯推荐

护眼大路灯哪个牌子好?护眼大路灯不仅能够提供日常的光线照明,还模拟了太阳光光线,使在室内用眼学习也能够有着自然光般的舒适感,但现在市场上有许多对产品质量把控不过关、光线效果欠佳、存有安全隐患的劣质护眼大路灯产品&#…

MySQL索引及索引的优化策略

1.什么是索引? 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息 2.为什么使用索引: 1.高效性:利用索引可以提高数据库的查询效率 2.唯一性:索引可以确保所查的数据的唯一…

【已解决】没有密码,如何解除PPT的“只读方式”?

PPT可以设置有密码的“只读方式”,保护文件不被随意编辑更改。 在设置保护后,打开PPT时就会弹出对话框,提示需要“输入密码以修改或以只读方式打开”,也就是输入密码才能编辑修改PPT,如果点击“只读”也能打开文件&am…

2025浙江(杭州)国际安防产品展览会(浙江安博会)

2025浙江(杭州)国际智慧城市与安防产品展览会 2025hangzhou smart city And Security Expo 时间:2025年4月23-25日 地点:杭州国际博览中心 展会介绍 浙江(杭州)国际智慧城市及安防产品博览会(简称:浙江安博会&#…

探索AutoGGUF:新时代的量化工具

大家好!今天我非常激动地向大家介绍一款新工具,叫做AutoGGUF。AutoGGUF是一款全新的图形用户界面,它是用Python语言编写的,基于PyQt6库。PyQt6是Python的一种绑定,用于创建图形用户界面。而AutoGGUF的设计初衷是简化使…

docker 安装 geoserver

docker 安装 geoserver 文章目录 docker 安装 geoserver一、准备工作二、创建容器三、安装插件3.1 插件下载3.2 将插件拷贝进容器3.3 创建新镜像 四、配置 nginx 代理 一、准备工作 # 获取最新镜像 docker pull kartoza/geoserver#创建数据持久化目录 /usr/local/application/…

大模型RAG实战|文本转换:文本分割器、中文标题增强与高级提取管道

ThinkRAG大模型RAG实战系列文章,带你深入探索使用LlamaIndex框架,构建本地大模型知识库问答系统。本系列涵盖知识库管理、检索优化、模型本地部署等主题,通过代码与实例,讲解如何打造生产级系统,实现本地知识库的快速检…

抽象代数精解【8】

文章目录 希尔密码矩阵矩阵基本概念行列式基本概念特殊矩阵关于乘法运算构成群 加解密原理密钥加密函数解密函数 Z 26 上的运算( Z 256 与此类似) Z_{26}上的运算(Z_{256}与此类似) Z26​上的运算(Z256​与此类似&…

一篇模块化RAG之最新全面系统性综述

RAG访问外部知识库增强了LLMs处理知识密集型任务的能力,随着应用场景需求的增加,RAG系统变得更加复杂。传统的RAG依赖于简单的相似性检索,**面对复杂查询和变化多端的文本块时表现不佳:**对查询的浅层理解、检索冗余和噪声。 朴素…

Elasticsearch未授权访问漏洞

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索】擎,基于RESTful web:接口。Elasticsearch:是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch的增别改…

Spring File Storage(文件的对象存储)框架基本使用指南

概述 本文仅作为快速入门,深入学习及使用详见官网 云存储 在开发过程当中,会使用到存文档、图片、视频、音频等等,这些都会涉及存储的问题,文件可以直接存服务器,但需要考虑带宽和存储空间,另外一种方式…