许多小伙伴在学习 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 并装置。

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

此时 Rainbond 会主动构建、启动 mall 一切服务,只需等候即可,布置完成后拓扑图如下:

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

拜访 mall-admin-web 前端项目验证布置,默许用户暗码:admin / macro123

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

mall-portalmall-search 暂时没有前端,能够拜访后端 swagger 验证布置 http://xxx/swagger-ui/,如下:

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

从零开始布置 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

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

树立组件间的依靠关系

在运用内,切换到修正形式,按照以下依靠关系并树立衔接:

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

给组件之间增加依靠

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

布置 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/

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

最后

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