在ARM平台上使用docker部署Rouyi-Cloud

在ARM平台上使用docker部署Rouyi-Cloud

概述

  • 使用mac pro的m2芯片,启动ubuntu虚机,运行docker环境,该硬件环境是ARM平台
  • 使用docker环境,通过docker compose,将ruoyi-cloud项目运行并配置起来

资源列表

后端框架和版本

  • Java EE 8
  • Spring Boot 2.3.x
  • Spring Cloud Hoxton.SR9
  • Spring Framework 5.2.x
  • Vue 2.6.x
  • Element 2.14.x

运行环境必备

  • JDK >= 1.8 (推荐1.8版本)
  • Mysql >= 5.7.0 (推荐5.7版本)
  • Redis >= 3.0
  • Maven >= 3.0
  • Node >= 12
  • nacos >= 2.x.x
  • sentinel >= 1.6.0

下载ruoyi-cloud源代码

准备ARM上适配的软件

  • 在mac上,安装并使用multipass,管理ubuntu虚机
  • 启动一个ubuntu虚机
    • multipass launch docker
    • 注意:multipass launch docker,并不能拉起带docker的ubuntu,而是启动一个原生的ubuntu
      • 可能是docker适配的ubuntu,没有arm环境适配的镜像
  • 在ubuntu上,调整system-resovled的DNS服务器配置,以避免DNS寻址问题
    • 在/etc/systemd/resovled.conf中,增加DNS地址
    • sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    • 重启 sudo systemctl restart systemd-resolved
  • 在ubuntu上,更新APT对应的ARM环境仓库地址,很重要
    • deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
    • 主要是使用ports仓库,ports仓库中包含了ARM适配的软件包
    • 可以百度下如何更新arm适配的sources.list文件
  • 在ubuntu上,安装并配置docker
    • sudo apt install docker-ce
    • sudo usermod -aG docker $USER
    • 退出shell并重新进入
    • docker version
  • 在ubuntu上,安装并配置openjdk
    • sudo apt install openjdk-18-jdk
    • java --version
  • 在ubuntu上,安装并配置maven
    • sudo apt install maven
  • 在ubuntu上,安装并配置nvm,以管理nodejs的安装
  • 在ubuntu,安装并配置nodejs v12版本
    • nvm install 12
    • node -v

编译ruoyi-cloud

  • cd RuoYi-Cloud
  • 编译java服务器代码
    • mvn package
      • 先要安装好maven
      • 注意:pom.xml,已经设置仓库为maven.aliyun.com了
      • 网络畅通的前提下,全部jar包编译完大约不到5分钟
  • 打包ruoyi-ui客户端代码

准备工作,将jar包和sql文件复制到docker下

  • cd ../docker
  • sh copy.sh
    • 注意,sql文件可能有文件名不对问题,请自行调整sql文件名

docker镜像的arm版本问题

  • 按照以下方案,修改docker-compose.yaml文件的相关镜像和版本
  • redis不用修改,自带了arm版本
  • mysql:5.7,换为:biarms/mysql:5.7
    • 使用以下命令查看某个镜像的平台支持
    • docker run --rm mplatform/mquery biarms/mysql:5.7
  • nacos/nacos-server 换为:nacos/nacos-server:v2.2.3-slim
  • sh deploy.sh base
  • 确保mysql已经正常起来

启动base相关服务

  • sh deploy.sh base
  • 会启动三个服务
    • redis
    • mysql
    • nacos
  • 确保mysql和redis都起来了
    • docker compose ps
  • 注意:nacos会起不来,因为
    • nacos需要调整为arm版本
    • db中没有配置ry-config数据库

初始化mysql数据库

  • 可以通过 mysql:{ubuntu-ip}:3306,访问mysql服务
  • mysql登录账号缺省是:root/password
  • 使用mysql-client,创建db并导入数据(自行使用合适的客户端工具)
  • ry-config:导入 RuoYi-Cloud/docker/mysql/db/ry_config_20220929.sql 文件
  • ry-cloud:导入 RuoYi-Cloud/docker/mysql/db/ry_20230706.sql
  • 最终有2个db
    • ry-cloud
    • ry-config

重新启动nacos

  • nacos/nacos-server 换为:nacos/nacos-server:v2.2.3-slim
    • 检测平台支持:docker run --rm mplatform/mquery nacos/nacos-server:v2.2.3-slim
  • sh deploy.sh base
  • 确保redis,mysql,nacos已经正常启动
  • 可以通过 http://{ubuntu-ip}:8848/nacos 访问nacos管理界面,缺省没有密码
  • 可以通过 mysql:{ubuntu-ip}:3306,访问mysql服务

启动modules相关微服务

  • sh deploy.sh modules
  • 会启动多个微服务
    • ruoyi-nginx,该服务会承载前端静态ui,并会将prod-api的路径转发给后端gateway
    • ruoyi-gateway
    • ruoyi-auth
    • ruoyi-modules-system
  • 注意:后面3个java版本的服务,都会起不来,需要修改配置文件

调整ruoyi-gateway的配置文件

  • 通过环境变量,注入nacos的服务器地址
    • 缺省的nacos地址,配置为 127.0.0.1:8848,由于是容器环境隔离了,该ip地址是错误的
    • SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR
    • 修改docker-compose.yaml,调整gateway的环境变量为
        environment:
          SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
          SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    
  • 登录到nacos,修改nacos配种中心上的,ruoyi-gateway-dev.yml中的redis服务器地址为ruoyi-redis
    • 注意spring_redis_host参数,不能通过环境变量设置
      • 因为该参数是app启动之后,从nacos的配置中心后面注入的,会以nacos为准
  • 重启gateway
    • docker compose restart ruoyi-gateway
  • 需要的话,重启ruoyi-nginx
    • docker compose restart ruoyi-nginx
    • 由于nginx会记住后端proxypass后端的gateway的ip地址,当gateway重启后,ip地址可能会变更

一些docker compose的调试命令

  • docker compose ps
  • docker compose logs -f
  • docker compose logs xxx -f
  • docker compose restart xxx

调整ruoyi-auth的配置文件

  • 通过环境变量,注入nacos的注册中心和配置中心地址
    • 修改docker-compose.yaml,调整ruoyi-auth的环境变量为
        environment:
          SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
          SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    
  • 修改nacos上配置中心的配置文件ruoyi-auth-dev.yml
    • 调整spring.redis.host的地址为ruoyi-test
  • 重启ruoyi-auth
    • docker compose restart ruoyi-auth

调整ruoyi-modules-system的配置文件

  • 通过环境变量,注入nacos的注册中心和配置中心地址
    • 修改docker-compose.yaml,调整ruoyi-modules-system的环境变量为
        environment:
          SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
          SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    
  • 修改nacos上配置中心的配置文件ruoyi-system-dev.yml
    • 调整spring.redis.host的地址为ruoyi-test
    • 调整spring.datasource.dynamic.datasource.master.url中的MySQL服务器地址为ruoyi-mysql
  • 重启ruoyi-modules-system
    • docker compose restart ruoyi-modules-system

确保所有服务启动正常

  • docker compose ps
    • 应该能够看到7个容器实例
  • docker compose logs


    img-20230831122027.png

访问ruoyi首页并登录

  • 前端ui的地址,通过容器ruoyi-nginx公布出来,端口80,并绑定到host主机的80端口
  • 打开浏览器,访问:http://{ubuntu-ip}/
  • 输入账号:admin 密码:admin123 并输入验证码
    • 该账号和密码,存放在mysql的数据库ruoyi-cloud,表sys_user中
    • 由ry_20230706.sql导入时候生成该账号和密码
  • 进入到系统首页,登录成功
  • 点击展开左侧系统管理菜单,依次点击并体验功能
    • 用户管理
    • 角色管理
    • 菜单管理
    • 部门管理
    • 通知公告
      • 可以新增一个通知,正常存盘并显示
    • 以上功能都展示正常


      img-20230831122114.png

后续

  • 当前的docker部署,只部署了部分微服务和中间件
  • 部署的中间件
    • redis
    • myql
    • nacos
  • 部署的微服务
    • ruoyi-nginx
    • ruoyi-gateway
    • ruoyi-auth
    • ruoyi-modules-system
  • 当前并没有启动的微服务
    • ruoyi-modeuls-gen
    • ruoyi-modules-job
    • ruoyi-modules-file
    • ruoyi-visual-monitor
    • 以上的微服务可以按需启动
      • docker compose up -d ruoyi-modules-job
  • 你自己开发的微服务,可以定义在docker-compose.yaml文件中,并按需启动
    • docker compose up -d xxxx
    • 注意,如果你自己开发的微服务需要和docker中的其他中间件和微服务联调,请使用各个容器公开出来的host端口地址
      • 注意:host端口地址,不是docker-compose.yaml文件中定义的service名字

最后,给出调整后的docker-compose.yaml文件

version : '3.8'
services:
  ruoyi-nacos:
    container_name: ruoyi-nacos
    image: nacos/nacos-server:v2.2.3-slim
    build:
      context: ./nacos
    environment:
      - MODE=standalone
    volumes:
      - ./nacos/logs/:/home/nacos/logs
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    depends_on:
      - ruoyi-mysql
  ruoyi-mysql:
    container_name: ruoyi-mysql
    image: biarms/mysql:5.7
    build:
      context: ./mysql
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/logs:/logs
      - ./mysql/data:/var/lib/mysql
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_unicode_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    environment:
      MYSQL_DATABASE: 'ry-cloud'
      MYSQL_ROOT_PASSWORD: password
  ruoyi-redis:
    container_name: ruoyi-redis
    image: redis
    build:
      context: ./redis
    ports:
      - "6379:6379"
    volumes:
      - ./redis/conf/redis.conf:/home/ruoyi/redis/redis.conf
      - ./redis/data:/data
    command: redis-server /home/ruoyi/redis/redis.conf
  ruoyi-nginx:
    container_name: ruoyi-nginx
    image: nginx
    build:
      context: ./nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/html/dist:/home/ruoyi/projects/ruoyi-ui
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - ruoyi-gateway
    links:
      - ruoyi-gateway
  ruoyi-gateway:
    container_name: ruoyi-gateway
    build:
      context: ./ruoyi/gateway
      dockerfile: dockerfile
    ports:
      - "8080:8080"
    environment:
      SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    depends_on:
      - ruoyi-redis
    links:
      - ruoyi-redis
  ruoyi-auth:
    container_name: ruoyi-auth
    build:
      context: ./ruoyi/auth
      dockerfile: dockerfile
    ports:
      - "9200:9200"
    environment:
      SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    depends_on:
      - ruoyi-redis
    links:
      - ruoyi-redis
  ruoyi-modules-system:
    container_name: ruoyi-modules-system
    build:
      context: ./ruoyi/modules/system
      dockerfile: dockerfile
    ports:
      - "9201:9201"
    environment:
      SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    depends_on:
      - ruoyi-redis
      - ruoyi-mysql
    links:
      - ruoyi-redis
      - ruoyi-mysql
  ruoyi-modules-gen:
    container_name: ruoyi-modules-gen
    build:
      context: ./ruoyi/modules/gen
      dockerfile: dockerfile
    ports:
      - "9202:9202"
    environment:
      SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    depends_on:
      - ruoyi-mysql
    links:
      - ruoyi-mysql
  ruoyi-modules-job:
    container_name: ruoyi-modules-job
    build:
      context: ./ruoyi/modules/job
      dockerfile: dockerfile
    ports:
      - "9203:9203"
    environment:
      SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    depends_on:
      - ruoyi-mysql
    links:
      - ruoyi-mysql
  ruoyi-modules-file:
    container_name: ruoyi-modules-file
    build:
      context: ./ruoyi/modules/file
      dockerfile: dockerfile
    ports:
      - "9300:9300"
    environment:
      SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848
    volumes:
    - ./ruoyi/uploadPath:/home/ruoyi/uploadPath
  ruoyi-visual-monitor:
    container_name: ruoyi-visual-monitor
    build:
      context: ./ruoyi/visual/monitor
      dockerfile: dockerfile
    ports:
      - "9100:9100"
    environment:
      SPRING_CLOUD_NACOS_DISCOVERY_SERVERADDR: ruoyi-nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVERADDR: ruoyi-nacos:8848

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容