10分钟在 Rainbond 上部署 mall 电商项目

news2024/12/22 19:47:08

很多小伙伴在学习 mall 电商项目时,都会在部署上折腾许久,虽然目前已经提供了很多种部署方式,比如 在 Linux 上部署 mall使用 Docker 或 DockerCompose 部署 mall ,但对于正在学习的我们都显得比较复杂,需要理解并学习这些容器技术。而本文将使用 Rainbond 部署 mall 电商项目,通过 Rainbond 部署 mall 商城项目非常方便、简单,让我们专注于代码,Rainbond 是一个云原生应用管理平台,使用简单,不需要懂容器、Kubernetes和底层复杂技术,轻松的在 Kubernetes 上部署应用并体验 Kubernetes 带来的能力。

本文介绍在 Rainbond 上的两种部署 mall 电商项目的方式:

  1. 通过 Rainbond 开源应用商店快速部署 mall
  2. 从 0 开始部署 mall 项目所有服务

前提

安装可用的 Rainbond 环境,Linux、Mac、Win上均可安装,参阅 Rainbond 快速安装

通过应用商店快速部署 mall

mall 电商项目已发布到 Rainbond 开源应用商店,可以通过开源应用商店一键部署,在 平台管理 -> 应用市场 -> 开源应用商店 中搜索 mall 并安装。

此时 Rainbond 会自动构建、启动 mall 所有服务,只需等待即可,部署完成后拓扑图如下:

访问 mall-admin-web 前端项目验证部署,默认用户密码:admin / macro123

mall-portalmall-search 暂时没有前端,可以访问后端 swagger 验证部署 http://xxx/swagger-ui/,如下:

从零开始部署 mall

中间件部署

mall 需要用到的中间件有:Mysql Redis RabbitMQ MongoDB ElasticSearch,这些中间件都可以通过 Rainbond 开源应用商店部署。

安装 Redis

在开源应用商店中搜索 Redis 并安装 5.x 版本

安装 MongoDB

在开源应用商店中搜索 MongoDB 并安装 4.x 版本

安装 RabbitMQ

在开源应用商店中搜索 RabbitMQ 并安装

安装 MySQL

在开源应用商店中搜索 MySQL 并安装 5.7 版本

  1. 在 Mysql 组件 -> 端口 打开对外端口服务,通过 IP:PORT 连接,默认用户密码 root / root
  2. 通过工具连接并导入 mall sql 数据。

安装 ElasticSearch

在开源应用商店中搜索 ElasticSearch 并安装 7.15.2 版本

  • ElasticSearch 应用包含了 Kinbana,如不需要可删除 Kinbana 组件
  • ElasticSearch 默认开启了密码验证,在 组件 -> 环境配置 -> 配置文件设置 编辑配置文件将 xpack.security.enabled 设置为 false 并更新组件生效。

安装中文分词器 IK Analyzer

  1. 首先在 团队视图 -> 插件 -> 新增插件 -> 通过应用商店安装插件 搜索 ES-IK-Analysis 并安装插件
  2. 为 ElasticSearch 组件添加存储,组件 -> 存储 -> 添加存储
    • 名称:自定义
    • 挂载路径:/usr/share/elasticsearch/plugins
    • 类型:共享存储
  3. 进入 组件 -> 插件 -> 未开通,开通 ES-IK-Analysis 插件
  4. 更新或重启 ElasticSearch 组件即可生效。

部署 mall 后端服务

修改项目代码配置

注释主 pom.xml 文件中的 execution 部分,不需要在项目中配置 Docker 打包项目,打包工作交给 Rainbond 处理,pom.xml 配置如下:

<!-- 
<execution>
  <id>build-image</id>
  <phase>package</phase>
  <goals>
    <goal>build</goal>
  </goals>
</execution>
-->

修改 mall-admin 服务的 application-dev.yml 文件,内容如下:

spring:
  datasource:
    url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false #MySQL连接地址
    username: ${MYSQL_USERNAME} #MySQL用户
    password: ${MYSQL_PWD} #MySQL密码
  ......
  redis:
    host: ${REDIS_HOST} #Redis连接地址
  ......

修改 mall-portal 服务的 application-dev.yml 文件,内容如下:

spring:
  datasource:
    url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false #MySQL连接地址
    username: ${MYSQL_USERNAME} #MySQL用户
    password: ${MYSQL_PWD} #MySQL密码
  ......
  data:
    mongodb:
      host: ${MONGODB_HOST} #MySQL连接地址为环境变量
      port: 27017
      database: mall-port
  redis:
    host: ${REDIS_HOST} #Redis服务器地址
  ......
  rabbitmq:
    host: ${AMQP_HOST} #RabbitMQ 连接地址
    virtual-host: ${RABBITMQ_DEFAULT_VHOST} #RabbitMQ virtual host
    username: ${RABBITMQ_DEFAULT_USER} #RabbitMQ 用户
    password: ${RABBITMQ_DEFAULT_PASS} #RabbitMQ 密码
  ......

修改 mall-search 服务的 application-dev.yml 文件,内容如下:

spring:
  datasource:
    url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false #MySQL连接地址
    username: ${MYSQL_USERNAME} #MySQL用户
    password: ${MYSQL_PWD} #MySQL密码
  ......
  elasticsearch:
    uris: ${ES_HOST}:${ES_PORT} #ElasticSearch连接地址
  ......

为什么都要改成环境变量的方式呢,因为这样更灵活,只需修改简单的变量配置可以让 mall 项目在任何环境中运行。而在 Rainbond 中,组件之间建立了依赖关系之后,会自动注入被依赖组件的环境变量,这样我们连环境变量都不用配置,更加方便,原理可参阅 Rainbond 组件之间的环境变量注入。

部署后端组件

在团队视图或应用视图 新增从源码创建组件:

  • 组件名称:自定义
  • 组件英文名称:自定义
  • 仓库地址:https://github.com/zzzhangqi/mall.git
  • 代码版本:master

以上仓库已经修改了上述的代码配置

此时 Rainbond 会检测到项目为多模块项目,进入多模块项目构建:勾选 mall-admin、mall-portal、mall-search 并构建。

进入每个组件内 -> 端口,删除默认的 5000 端口,添加新的组件对应端口:

  • mall-admin:8080
  • mall-portal:8085
  • mall-search:8081

建立组件间的依赖关系

在应用内,切换到编辑模式,按照以下依赖关系并建立连接:

给组件之间添加依赖

部署 mall 前端服务

很多时候我们的后端服务一般是不对外提供访问的,如果采用现在的配置那么在部署的时候,config/prod.env.js 中后端的地址就必须与前端的访问地址一样,如果不一样则会产生跨域,如下:

module.exports = {
  NODE_ENV: '"production"',
  BASE_API: '"https://admin-api.xxx.com"'
}

如何不暴露后端服务的同时又能解决跨域,可以使用 Nginx 反向代理后端服务。

config/prod.env.js 定义一个不存在的接口,比如 /api

module.exports = {
  NODE_ENV: '"production"',
  BASE_API: '"/api"'
}

比如现在前端访问登陆接口的 URL 是 /api/admin/login ,显然 /api 不是我们的接口,/admin/login 才是,那么通过 Nginx URL 重写,把 /api 重写,访问到后端的接口就是 /admin/login 此时接口正确就可以正常返回数据,也能解决跨域问题同时后端服务也不用对外暴露。

server {
    listen 80;

    location / {
      root /app/www;
      index index.html index.htm;
    }

    location  /api {
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass http://127.0.0.1:8080;
    }
}

部署前端组件

在团队视图或应用视图 新增从源码创建组件:

  • 组件名称:自定义
  • 组件英文名称:自定义
  • 仓库地址:https://github.com/zzzhangqi/mall-admin-web.git
  • 代码版本:master

以上仓库已经添加了上述配置

添加 mall-admin-web 依赖于 mall-admin

验证部署

访问 mall-admin-web 前端项目验证部署,默认用户密码:admin / macro123。mall-portalmall-search 暂时没有前端,可以访问后端 swagger 验证部署 http://xxx/swagger-ui/

最后

下一期出在 Rainbond 上部署 mall-swarm 微服务项目实践。

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

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

相关文章

Vue.js组件编程的知识要点

在C/S编程中&#xff0c;对程序员来说&#xff0c;组件编程是一个不能忽视或者越过的技术能力&#xff0c;特别是自定义的组件编程以及构建基础组件库。虽然组件编程不是必须的&#xff0c;全部使用系统或者别人的组件&#xff08;控件&#xff09;也可以完成系统的开发&#x…

使用Python根据原始Excel表格批量生成目标Excel表格

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤亭台六七座&#xff0c;八九十枝花。大家好&#xff0c;我是Python进阶者。一、前言前几天在帮助粉丝解决问题的时候&#xff0c;遇到一个简单的小需求&#…

程序员如何通过兼职赚钱?有哪些渠道?

程序员的工资是没有网上说的那么夸张。 就我自己来说&#xff0c;在刚刚工作的那几年&#xff0c;月薪没有超过1万块钱。但是刚刚来到大城市&#xff0c;这点工资连我交房租都不够&#xff0c;生存都成了问题。于是我开始考虑进行兼职&#xff0c;虽然在最开始的几个月也只能有…

(Week 11)综合复习(C++,图论,动态规划,搜索)

目录汤姆斯的天堂梦&#xff08;C&#xff0c;Dijkstra&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解题思路&#xff1a;[蓝桥杯 2022 国 A] 环境治理&#xff08;C&#xff0c;Floyd&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输…

工控安全—工控常见协议识别

文章目录一、Nmap常见参数介绍二、工控常见协议识别三、工控设备指纹识别3.1 S73.2 Modbus3.3 IEC 60870-5-1043.4 DNP33.5 EtherNet/IP3.6 BACnet3.7 Tridium Niagara Fox3.8 Crimson V33.9 OMRON FINS3.10 PCWorx3.11 ProConOs3.12 MELSEC-Q四、测试一、Nmap常见参数介绍 -s…

STM32F411CE驱动Xbox摇杆

外观 引脚说明和原理 GND-GND 5V-5V VRX-ADC1通道1 VRX-ADC1通道2 SW独立按键-单片机的输入检测 本质上这个遥感就是集成了一个按键和两个电位器&#xff0c;遥感转动改变电位器也会转动&#xff0c;电压输出的值也就不一样&#xff0c;通过检测数值可自定义的做出判断&a…

linux发送tcp/udp请求

本文章介绍下通过nc工具和iperf工具&#xff0c;发送tcp/udp请求一、nc工具&#xff08;netcat工具&#xff09;这个工具linux系统默认是自带的&#xff0c;以下是命令的常用参数1.1 发送tcp请求在服务端监听端口nc -l port客户端连接并发送请求nc -v host port在服务端收到了信…

javaWeb 会话和跟踪

会话 用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪 HTTP协议是无状态的&#xff0c;每次浏览器向服务器请求时&#xff0c;服务器都会将该请求视…

kafka消费者API

kafka的消费方式 pull&#xff08;拉模式&#xff09; 消费者采用从broker中主动拉去数据 kafka采用这种方式 push&#xff08;推模式&#xff09; kafka没有采用这种方式&#xff0c;因为由broker决定消费发送速率。很难适应所有消费者 pull模式不足之处是&#xff0c;如…

Linux 的 Vim,gcc,makefile 的使用

坚持看完&#xff0c;结尾有思维导图总结 这里写目录标题vimvim的安装vim的配置vim 的使用vim 的三种模式三种模式对应的命令通用命令模式底行模式gcc 和 g编译和执行预编译编译汇编链接过程make总结vim Vim 是Linux 中使用的编辑器&#xff0c;一般的程序要经历一个过程才能运…

Codeforces Round #841 (Div. 2) and Divide by Zero 2022(A~E)

A. Joey Takes Money给出一个序列a&#xff0c;每次操作可以选择两个数&#xff0c;将两个数分别改成与原数乘积相同的两个数&#xff0c;问最后得到的最大的数组和是多少。思路&#xff1a;乘积一定&#xff0c;和最大一定是与1相乘。则整个数组的积与n - 1个1的和就是最大值。…

探索云原生技术之容器编排引擎-Kubernetes/K8S详解(7)

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

缓存(redis)与数据库(MYSQL)数据一致性问题

在MYSQL数据库集文章中&#xff0c;仔细的学习了一些MYSQL数据库的知识。但是&#xff0c;随着我们的业务越来越好&#xff0c;那么我们不可能直接去操作MYSQL数据库。因为直接去操作MYSQL终究会有比较多的I/O操作&#xff0c;而使整个系统的性能最终受到数据库I/O的制约而无法…

教外篇(6):C++ qrencode 实现二维码生成

系列文章目录 文章目录 系列文章目录前言一、qrencode库的基本使用二、BMP图片生成原理三、二维码生成四、放大图像、解决编码问题前言 该系列教程目录与说明可以查看这篇文章::C/C++教程 本文主要介绍如何使用C++来实现二维码的生成,使用到了开源库:qrencode 代码生成结…

C++入门--vector

目录 vector的介绍 vector的使用 对象的定义 遍历 reserve与resize insert与erase 迭代器失效 vector的模拟实现 vector的介绍&#xff1a; vector是表示可变大小数组的序列容器。 vector的使用&#xff1a; 对象的定义&#xff1a; void test_vector1() {vector<int…

ZYNQ图像-腐蚀膨胀笔记

大磊fpga 腐蚀 下图从左到右依次为a&#xff0c;b&#xff0c;c step1&#xff1a;将b中的黄色十字架在a中遍历 step2&#xff1a;当b的黄色方格在a中 没有碰到白色方格 时输出中心坐标 step3&#xff1a;将step2中所有输出的坐标涂成黄色&#xff0c;得出c图 膨胀 step1…

Redhat 7 安装 iftop软件

1.关闭subscription-manager vi /etc/yum/pluginconf.d/subscription-manager.conf enable 0 2.通过浏览器下载Centis-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3.上传至/etc/yum.repos.d/ 4.修改Centos-7.repo文件 #cd /etc/yum.repos.d/ #ls #vim CentOS…

怎么看电脑是32位还是64位?超级简单的方法!

熟悉计算机的朋友都知道&#xff0c;电脑系统可以分为32位和64位系统。它们之间有什么区别&#xff1f;它们支持不同的内存&#xff1a;32位操作系统最多支持4G内存&#xff0c;但64位系统可以支持4G、8G、16G、32G、64G、128G、256G等。兼容软件也不同&#xff1a;32位只支持3…

老照片修复方法是什么?这篇文章来告诉你

我们每年回老家时&#xff0c;都喜欢看看以前的老物件&#xff0c;尤其是照片&#xff0c;因为它承载了我们一代又一代人的回忆&#xff0c;不管过去了多久&#xff0c;家里的长辈拿到一张照片时&#xff0c;都可以准确的说出当时在哪里&#xff1f;在做什么&#xff1f;由此引…

基于python和cv2、pytorch实现的车牌定位、字符分割、字符识别项目

问题描述车牌的检测和识别的应用非常广泛&#xff0c;比如交通违章车牌追踪&#xff0c;小区或地下车库门禁。在对车牌识别和检测的过程中&#xff0c;因为车牌往往是规整的矩形&#xff0c;长宽比相对固定&#xff0c;色调纹理相对固定&#xff0c;常用的方法有&#xff1a;基…