微服务的编程测评系统22-项目部署结束

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [1. 项目部署](#1. 项目部署)
    • [1.1 nacos上的项目配置](#1.1 nacos上的项目配置)
    • [1.2 其他组件的docker-compose](#1.2 其他组件的docker-compose)
    • [1.3 后端打包](#1.3 后端打包)
    • [1.4 组件之间依赖关系](#1.4 组件之间依赖关系)
    • [1.5 nginx配置](#1.5 nginx配置)
    • [1.6 docker一些命令](#1.6 docker一些命令)
    • [1.7 修改](#1.7 修改)
    • [1.8 第二台机器](#1.8 第二台机器)
    • [1.9 测试](#1.9 测试)
    • [1.10 纠错](#1.10 纠错)
  • 总结

前言

1. 项目部署

1.1 nacos上的项目配置

http://192.168.56.107:8848/nacos/就可以了

其中192.168.56.107是公网,外网

一开始会先进入登录页面

默认密码是nacos和nacos

这里可以修改密码

java 复制代码
        username: nacos
        password: nacosckoj_8

然后是创建命令空间

java 复制代码
```java
spring:
  application:
    name: oj-gateway
  profiles:
    active: local
  cloud:
    nacos:
      discovery:
        namespace: 7c56d49e-a3b9-41e7-b779-2eccb84c27ec
        server-addr: http://你安装nacos的云服务器内网ip:8848
        username: nacos
        password: nacosckoj_8
        ip: ${HOST_IP}
      config:
        namespace: 7c56d49e-a3b9-41e7-b779-2eccb84c27ec
        server-addr: http://你安装nacos的云服务器内网ip:8848
        file-extension: yaml
        username: nacos
        password: nacosckoj_8

然后是修改bootstrap.yml

其中内网ip可以在阿里云的控制台查询到,外网ip也可以查询到,但是在浏览器上用nacos就要用外网ip了

因为我用的是本地的ubuntu,所以就是192.168.56.107了

java 复制代码
spring:
  application:
    name: oj-gateway
  profiles:
    active: local
  cloud:
    nacos:
      discovery:
        namespace: 7c56d49e-a3b9-41e7-b779-2eccb84c27ec
        server-addr: http://192.168.56.107:8848
        username: nacos
        password: nacosckoj_8
        ip: ${HOST_IP}
      config:
        namespace: 7c56d49e-a3b9-41e7-b779-2eccb84c27ec
        server-addr: http://192.168.56.107:8848
        file-extension: yaml
        username: nacos
        password: nacosckoj_8

记得其他的微服务也要改

因为java的程序都是在一台服务器上跑的,所以可以用内网ip来相互访问的

但是浏览器访问nacos是不能用内网ip的,因为服务器的内网是在阿里云那边的

但是我们的浏览器不在阿里云那边

然后是nacos上面的配置了

java 复制代码
server:
  port: 9201
spring:
  data:
    redis:
      host: 192.168.56.107
      password: 123456
  datasource:
    url: jdbc:mysql://192.168.56.107:3306/ckoj_dev?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8
    username: ojtest
    password: 123456
    hikari:
      minimum-idle: 5 # 最⼩空闲连接数
      maximum-pool-size: 20 # 最⼤连接数
      idle-timeout: 30000 # 空闲连接存活时间(毫秒)
      connection-timeout: 30000 # 连接超时时间(毫秒)
    elasticsearch:
      uris: http://192.168.56.107:9200
jwt:
  secret: zxcvbnmasdfghjkl

直接复制以前的就可以了,然后把ip改为内网ip,或者公网ip

java 复制代码
server:
  port: 9204
spring:
  rabbitmq:
    host: 192.168.56.108
    port: 5672
    username: admin
    password: admin
  datasource:
    url: jdbc:mysql://192.168.56.108:3306/ckoj_dev?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8
    username: ojtest
    password: 123456
    hikari:
      minimum-idle: 5 # 最⼩空闲连接数
      maximum-pool-size: 20 # 最⼤连接数
      idle-timeout: 30000 # 空闲连接存活时间(毫秒)
      connection-timeout: 30000 # 连接超时时间(毫秒)
jwt:
  secret: zxcvbnmasdfghjkl
sandbox:
  docker:
    host: tcp://172.17.0.1:2375
  limit:
    memmory: 100000000
    memory-swap: 100000000
    cpu: 1
    time: 5

注意docker这里我们要用docker0的ip

http://192.168.56.107/是我的内网ip,我这个只有内网ip

1.2 其他组件的docker-compose

因为这些组件之间得到依赖性不强了,所以一起搞

java 复制代码
  oj-xxl-job-server:
    container_name: oj-xxl-job-server
    image: xuxueli/xxl-job-admin:2.4.0
    # 设置连接MySQL的URL、用户名和密码等配置。
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://oj-mysql-server:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
      - SPRING_DATASOURCE_USERNAME=ojtest
      - SPRING_DATASOURCE_PASSWORD=123456
    # 假设xxl-job监听在8080端口
    ports:
      - "8080:8080"
    # 依赖于 oj-mysql-server 服务,并在其状态为健康时启动。
    depends_on:
      oj-mysql-server:
        condition: service_healthy

  oj-redis-server:
    container_name: oj-redis-server
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - ./redis/data:/data
    # 设置 Redis 的访问密码。
    environment:
      REQUIREPASS: 123456
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 10s
      timeout: 5s
      retries: 10

  oj-gateway:
    image: ck/oj-gateway:0.0.1-SNAPSHOT
    # 提供了构建上下文的路径。这意味着Docker将在./bitoj-jar/gateway/目录中寻找构建所需的文件。
    build:
      context: ./ckoj-jar/gateway/
    container_name: oj-gateway
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.107
    ports:
      - "19090:19090"
    privileged: true
    depends_on:
      oj-nacos-server:
        condition: service_healthy
      oj-redis-server:
        condition: service_healthy

  oj-nginx-server:
    # 使用 nginx:1.21 镜像。
    image: nginx:1.21
    # 容器名称为 oj-nginx-server
    container_name: oj-nginx-server
    volumes:
      # 配置文件挂载
      - ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
      # 前端项目部署核心步骤。这可以用于将一些静态资源(如网页、文件、图片等)从本地主机挂载到容器中,供 Nginx 进行服务。
      - ./nginx/dist:/home/dist
    environment:
      # 时区上海
      TZ: Asia/Shanghai
    # 端口映射
    ports:
      - "80:80"
      - "10030:10030"
      - "443:443"
    privileged: true
    # 表示此服务依赖于 oj-gateway 服务,即 oj-gateway 服务启动后才会启动此服务。
    depends_on:
      - oj-gateway

  oj-elasticsearch-server:
    container_name: oj-elasticsearch-server
    image: elasticsearch:8.5.3
    ports:
      - "9200:9200"
    # 挂载本地目录用于存储 Elasticsearch的数据、插件。
    volumes:
      - ./elasticsearch/es-plugins:/usr/share/elasticsearch/plugins
    # 设置为单节点模式,并限制 Java 虚拟机的内存使用。暂时禁用了Elasticsearch的安全特性
    environment:
      discovery.type: single-node
      ES_JAVA_OPTS: "-Xms256m -Xmx256m"
      xpack.security.enabled: false
    # 通过执行 curl 命令检查 Elasticsearch 的集群健康状态。
    healthcheck:
      test: [ "CMD", "curl", "-s", "http://localhost:9200/_cluster/health?wait_for_status=green&timeout=1s" ]
      interval: 30s
      timeout: 5s
      retries: 10

  oj-kibana-server:
    image: kibana:8.5.3
    container_name: oj-kibana-server
    ports:
      - "10010:5601"
    # 依赖于 oj-elasticsearch-server 服务,并在其健康时启动。
    depends_on:
      oj-elasticsearch-server:
        condition: service_healthy
    # 设置系统语言为中文,并指定连接到 Elasticsearch 的 URL
    environment:
      I18N_LOCALE: zh-CN
      ELASTICSEARCH_URL: http://elasticsearch:9200

  oj-rabbitMQ-server:
    container_name: oj-rabbitMQ-server
    image: rabbitmq:3.8.30-management
    ports:
      - "5672:5672"
      - "10020:15672"
    volumes:
      - ./rabbit/data:/var/lib/rabbitmq
    # 设置 RabbitMQ 的默认用户名和密码。
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin
    healthcheck:
      test: [ "CMD", "rabbitmqctl", "status" ]
      interval: 30s
      timeout: 10s
      retries: 10

  oj-system:
    image: ck/oj-system:0.0.1-SNAPSHOT
    build:
      context: ./ckoj-jar/system/
    container_name: oj-system
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.107
    ports:
      - "9201:9201"
    privileged: true
    depends_on:
      oj-nacos-server:
        condition: service_healthy
      oj-redis-server:
        condition: service_healthy
      oj-elasticsearch-server:
        condition: service_healthy

  oj-friend:
    image: ck/oj-friend:0.0.1-SNAPSHOT
    build:
      context: ./ckoj-jar/friend/
    container_name: oj-friend
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.107
    ports:
      - "9202:9202"
    privileged: true
    depends_on:
      oj-nacos-server:
        condition: service_healthy
      oj-redis-server:
        condition: service_healthy
      oj-elasticsearch-server:
        condition: service_healthy
      oj-rabbitMQ-server:
        condition: service_healthy

  oj-job:
    image: ck/oj-job:0.0.1-SNAPSHOT
    build:
      context: ./ckoj-jar/job/
    container_name: oj-job
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.107
    ports:
      - "9203:9203"
    privileged: true
    depends_on:
      oj-nacos-server:
        condition: service_healthy
      oj-redis-server:
        condition: service_healthy

  oj-judge:
    image: ck/oj-judge:0.0.1-SNAPSHOT
    build:
      context: ./ckoj-jar/judge/
    container_name: oj-judge
    # 将本地目录挂载到容器内的用户代码存储目录
    volumes:
      - /user-code-pool:/user-code-pool
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.107
    privileged: true
    depends_on:
      oj-nacos-server:
        condition: service_healthy
      oj-rabbitMQ-server:
        condition: service_healthy

gateway的HOST_IP应该为http://192.168.56.107/

这里bootstrap里面的${HOST_IP}指的是环境变量里面的ip

java 复制代码
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 服务所在云服务器内网IP

就是这里配置的环境变量

所有的微服务都要配置HOST_IP

java 复制代码
    depends_on:
      oj-nacos-server:
        condition: service_healthy
      oj-redis-server:
        condition: service_healthy

然后是gateway的依赖项有多个,依赖redis和nacos

java 复制代码
      - ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
      - ./nginx/dist:/home/dist

然后是nginx,有这个配置文件

静态资源也是用的这个

java 复制代码
    volumes:
      - ./elasticsearch/es-plugins:/usr/share/elasticsearch/plugins

然后是es,我们挂载的是插件

因为有个分词器要挂载上去

es的鉴权现在暂时不打开

java 复制代码
    image: ck/oj-gateway:0.0.1-SNAPSHOT

build是镜像的来源

1.3 后端打包

java 复制代码
mvn clean package -DskipTests

maven安装

安装成功以后,关闭idea,重新启动,因为可能没有反应过来已经更新了path

然后在idea的控制台执行mvn clean package -DskipTests就可以了

这样就成功了

然后就可以执行脚本了

java 复制代码
#rm ../ckoj-jar/gateway/oj-gateway.jar
#rm ../ckoj-jar/friend/oj-friend.jar
#rm ../ckoj-jar/job/oj-job.jar
#rm ../ckoj-jar/judge/oj-judge.jar
#rm ../ckoj-jar/system/oj-system.jar
copy ../../../oj-gateway/target/oj-gateway-1.0-SNAPSHOT.jar ../ckoj-jar/gateway/oj-gateway.jar
copy ../../../oj-modules/oj-judge/target/oj-judge-1.0-SNAPSHOT.jar ../ckoj-jar/judge/oj-judge.jar
copy ../../../oj-modules/oj-friend/target/oj-friend-1.0-SNAPSHOT.jar ../ckoj-jar/friend/oj-friend.jar
copy ../../../oj-modules/oj-job/target/oj-job-1.0-SNAPSHOT.jar ../ckoj-jar/job/oj-job.jar
copy ../../../oj-modules/oj-system/target/oj-system-1.0-SNAPSHOT.jar ../ckoj-jar/system/oj-system.jar
pause

我们用powershell来执行脚本

直接搜索就可以打开了

java 复制代码
cd D:\spring-project\ck-oj\deploy\test\sh
.\copy.ps1

出现这个按enter就成功了

如果只有组件,我们是可以docker compose up -d,直接拉取镜像

但是有了微服务的话,就不可以了,是因为镜像这一块,因为mysql和nacos镜像不是我们自定义的,不需要构建这两个镜像的,但是这些微服务的镜像我们是没有的,所以要先构建这些微服务的镜像才可以构建容器

先用docker compose build来构建镜像---》java服务

java 复制代码
docker compose build

直接这个命令,然后就可以根据docker compose .yml来构建镜像了

然后是

java 复制代码
docker compose up -d

1.4 组件之间依赖关系


1.5 nginx配置

然后是nginx的配置,比如服务器组的配置

java 复制代码
upstream ckoj {
    server 你的云服务器1内网IP:19090;
    server 你的云服务器2内网IP:19090;
}
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /home/dist/oj-fe-c/dist;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    location /dev-api/ {
       proxy_pass http://ckoj/friend/;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

server {
    listen       10030;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /home/dist/oj-fe-b/dist;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    location  /dev-api/ {
       proxy_pass http://ckoj/system/;
    }
}

upstream 中配置服务器组的时候均使⽤服务器的内⽹ip。

在 server 块中配置了两个端⼝的监听:80 和 10030。因为我们有 B 端和 C 端,有各⾃不同的静态资源和动态资源,所以需要分别监听这两个端⼝。

root /home/dist/oj-fe-c/dist : 这段配置指定静态资源的⽬录。这⾥所说的静态资源正是我们前⾯讲nginx 动静分离时提到的静态资源。

upstream配置的是服务器组,后面跟的是网关的端口号

为什么配置两个server呢,因为有b端和c端

b端是10030端口号

c端是80端口号

java 复制代码
    location /dev-api/ {
       proxy_pass http://ckoj/friend/;
    }

这个就是代理,请求以/dev-api/开头就代理到http://ckoj/friend/

java 复制代码
    location / {
        root   /home/dist/oj-fe-c/dist;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

try_files uri uri/ /index.html; : 由于我们的前端应⽤是⽤Vue开发的单⻚⾯应⽤(SPA),并使⽤客⼾端路由来管理⻚⾯的不同状态和视图。然⽽,服务器并不识别这些前端路由,只会处理来⾃客⼾端的URL请求,这可能导致404错误。通过添加这段配置,⽆论⽤⼾请求的路径是什么,最终都会被导向SPA的 index.html ⽂件。这个⽂件通常是SPA的⼊⼝点。index.html 就是我们前端项目的入口点


挂载的话,自己写了容器就会同步我们写的,我们没有写,就会去同步容器的数据

1.6 docker一些命令

java 复制代码
docker images 
docker rmi -f 镜像ID或名称:标签

docker ps -a
# 先停止容器(若运行中)
docker stop 容器ID或名称
docker rm 容器ID或名称
docker rm -f 容器ID或名称  # 无需先停止,直接删除

docker logs 容器ID或名称 # 看日志

docker compose build

docker compose up -d

docker compose down

docker restart id重新启动容器

docker compose down 是 Docker Compose 的一个命令,用于停止并删除当前 Docker Compose 管理的所有容器

它的主要作用是:

停止所有通过 docker compose up 启动的容器

删除这些已停止的容器

删除由 Compose 创建的自定义网络(默认不会删除宿主机的默认网络)

可选删除相关的卷(需加 -v 或 --volumes 参数)

可选删除构建的镜像(需加 --rmi all 或 --rmi local 参数)

常用场景:

想彻底清理当前 Compose 项目的运行环境时使用

对 docker-compose.yml 配置文件做了重大修改后,需要重新部署时使用

镜像一般是最干净的,容器才是受docker-compose.yml污染的

除非我们用jar包创建的容器有错

所以docker compose build

可以不用多次执行,除非jar包有问题

docker compose build 的核心作用是:根据当前目录下 docker-compose.yml 文件中定义的配置,为所有指定了 build 上下文的服务构建本地 Docker 镜像。

它主要解决的问题是"批量构建镜像",避免了手动为每个服务执行 docker build 命令的繁琐操作,具体包含以下关键行为:

  • 自动识别 docker-compose.yml 中每个服务的 build 配置(如 Dockerfile 路径、构建参数等)。
  • 按配置顺序(或依赖关系)为多个服务并行/串行构建镜像,构建完成的镜像会自动关联到对应的服务。
  • 支持增量构建:若服务的代码、Dockerfile 未修改,会复用之前的构建缓存,加快构建速度。

如果已经有了这个镜像呢,还会构建吗

默认情况下不会重新完整构建,会优先使用构建缓存来加速过程,只有当触发缓存失效的条件时,才会重新构建变化的部分。

具体逻辑如下:

  1. 检查缓存有效性:Docker 会对比服务的 build 上下文(如代码、依赖文件)和 Dockerfile 的内容。若所有文件均未修改,且构建参数( args )等配置也无变化,则直接复用现有镜像层,不进行新构建。
  2. 缓存失效则增量构建:若 Dockerfile 指令(如 COPY 、 RUN )或上下文文件有修改,会从修改指令的那一层开始重新构建,未修改的底层仍复用缓存,而非完全重建整个镜像。
  3. 强制全量构建:若需忽略缓存、强制重新构建所有层,可在命令后加 --no-cache 参数,即 docker compose build --no-cache 。

1.7 修改

修改一些小bug,导致不成功

第一我们docker-compose.yml文件里面写的是小写s

第二,没有把ik分词器传进去

第三elasticsearch是和dotasource同级的配置

1.8 第二台机器

java 复制代码
# 指定 Docker Compose ⽂件的版本
#version: '3.8'
#services:定义了服务列表
services:

  oj-gateway:
    image: ck/oj-gateway:0.0.1-SNAPSHOT
    # 提供了构建上下文的路径。这意味着Docker将在./bitoj-jar/gateway/目录中寻找构建所需的文件。
    build:
      context: ./ckoj-jar/gateway/
    container_name: oj-gateway
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.108
    ports:
      - "19090:19090"
    privileged: true


  oj-system:
    image: ck/oj-system:0.0.1-SNAPSHOT
    build:
      context: ./ckoj-jar/system/
    container_name: oj-system
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.108
    ports:
      - "9201:9201"
    privileged: true


  oj-friend:
    image: ck/oj-friend:0.0.1-SNAPSHOT
    build:
      context: ./ckoj-jar/friend/
    container_name: oj-friend
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.108
    ports:
      - "9202:9202"
    privileged: true


  oj-job:
    image: ck/oj-job:0.0.1-SNAPSHOT
    build:
      context: ./ckoj-jar/job/
    container_name: oj-job
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.108
    ports:
      - "9203:9203"
    privileged: true


  oj-judge:
    image: ck/oj-judge:0.0.1-SNAPSHOT
    build:
      context: ./ckoj-jar/judge/
    container_name: oj-judge
    # 将本地目录挂载到容器内的用户代码存储目录
    volumes:
      - /user-code-pool:/user-code-pool
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      HOST_IP: 192.168.56.108
    privileged: true

先是docker-compose.yml文件,直接复制以前的就可以了,然后去掉depends on

因为第一台机器的依赖项已经启动成功

然后是HOST_IP也要改,HOST_IP是环境变量

java 复制代码
  cloud:
    nacos:
      discovery:
        namespace: 7c56d49e-a3b9-41e7-b779-2eccb84c27ec
        server-addr: http://192.168.56.107:8848
        username: nacos
        password: nacosckoj_8
        ip: ${HOST_IP}

会在bootstrap.yml里面用到,这个的意思是指定gateway微服务的jar所在服务器的地址

第二台虚拟机我们就只需要这两个文件就可以了,只部署虚拟机,不部署组件

但是docker-compose.yml名字改变了

java 复制代码
docker compose -f docker-compose2.yml build
docker compose -f docker-compose2.yml up -d

这样就可以了

1.9 测试

访问http://192.168.56.107:10030/就可以访问b端接口了

但是我们要新添加一个管理员用户

我们是有添加管理员用户的接口的---》给网关添加白名单

测试一下但是报错了

我们用docker logs id

就可以查看了

所以我们直接在数据库添加吧

java 复制代码
    @Override
    public int add(SysUserSaveDTO saveDTO) {
        List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserAccount, saveDTO.getUserAccount()));
        if(CollectionUtil.isNotEmpty(sysUsers)){
            throw new ServiceException(ResultCode.AILED_USER_EXISTS);
        }
        SysUser sysUser = new SysUser();
        sysUser.setUserAccount(saveDTO.getUserAccount());
        sysUser.setPassword(BCryptUtils.encryptPassword(saveDTO.getPassword()));
        sysUser.setCreateBy(Constants.SYSTEM_USER_ID);
        return sysUserMapper.insert(sysUser);
    }

或者我们设置一个系统用户

然后又要重新打包了

但是这次只用重新搞system的jar包了

只用重新启动system,重新部署system

java 复制代码
docker compose up -d oj-nacos-server

指定部署的服务名

所以构建build的时候也是可以指定的

java 复制代码
docker compose build oj-system

注意这个build是要有build参数的,是我们需要自己创建镜像的,是需要dockerfile的,没有的话,就不会执行,默认有的镜像就不会build了

java 复制代码
services:
  oj-mysql-server:

其中这个oj-system就是services下一级的名字

java 复制代码
docker compose build oj-system 
docker compose up -d oj-system
docker compose -f docker-compose2.yml build oj-system
docker compose -f docker-compose2.yml up -d oj-system


这样就成功了

http://192.168.56.107:80就可以进入c端了

1.10 纠错

有一些错误

比如nacos上面judge配置的Rabbitmq和mysql的地址,我写的192.168.56.108,其实应该是192.168.56.107

还有一个问题就是

,问题依然是 rabbit_disk_monitor 进程因 df 命令超时反复崩溃,且之前的配置优化未生效 ------ 核心原因是 旧版本 RabbitMQ(3.8.x)与你的 Docker 环境存在底层文件系统交互障碍,常规配置调整无法解决

就是说RabbitMQ(3.8.x)与你的 Docker 环境存在底层文件系统交互障碍,会报错的

java 复制代码
  oj-rabbitMQ-server:
    container_name: oj-rabbitMQ-server
    image: rabbitmq:3.9.13-management
    ports:
      - "5672:5672"
      - "10020:15672"
    volumes:
      - ./rabbit/data:/var/lib/rabbitmq
    # 设置 RabbitMQ 的默认用户名和密码。
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin
    healthcheck:
      test: [ "CMD", "rabbitmqctl", "status" ]
      interval: 30s
      timeout: 10s
      retries: 10

所以我们更换Rabbitmq的版本为3.9.13

你的当前镜像版本是 3.8.30,而 RabbitMQ 在 3.9 版本 中对「磁盘监控模块」进行了 底层重构,彻底解决了旧版本(3.8.x 及更早)依赖 df 命令导致的超时崩溃问题 ------ 这正是你当前遇到的核心痛点。

这样就可以了

这样以后就成功了

总结

相关推荐
mask哥7 小时前
详解flink性能优化
java·大数据·微服务·性能优化·flink·kafka·stream
hqxstudying7 小时前
Kafka 深入研究:从架构革新到性能优化的全面解析
java·开发语言·微服务·kafka·springcloud
失散138 小时前
并发编程——17 CPU缓存架构详解&高性能内存队列Disruptor实战
java·缓存·架构·并发编程
骥龙13 小时前
零信任架构:重塑现代企业安全基石
安全·架构
Sweety丶╮79415 小时前
【Kubernetes】知识点总结5
云原生·容器·kubernetes
zyplanke17 小时前
Kubernetes(四):Service
云原生·容器·kubernetes·k8s
码界奇点18 小时前
KingbaseES一体化架构与多层防护体系如何保障企业级数据库的持续稳定与弹性扩展
数据库·架构·可用性测试
deepwater_zone18 小时前
Spring 微服务
spring·微服务
掘金-我是哪吒18 小时前
分布式微服务系统架构第169集:1万~10万QPS的查当前订单列表
分布式·微服务·云原生·架构·系统架构