许多小伙伴在学习 mall 电商项目时,都会在布置上折腾许久,虽然现在现已供给了许多种布置方式,比方 在 Linux 上布置 mall
、运用 Docker 或 DockerCompose 布置 mall
,但关于正在学习的我们都显得比较杂乱,需求了解并学习这些容器技能。而本文将运用 Rainbond 布置 mall 电商项目,经过 Rainbond 布置 mall 商城项目非常便利、简略,让我们专注于代码,Rainbond 是一个云原生运用办理平台,运用简略,不需求懂容器、Kubernetes和底层杂乱技能,轻松的在 Kubernetes 上布置运用并体会 Kubernetes 带来的能力。
本文介绍在 Rainbond 上的两种布置 mall 电商项目的方式:
- 经过 Rainbond 开源运用商铺快速布置 mall
- 从 0 开始布置 mall 项目一切服务
前提
装置可用的 Rainbond 环境,Linux、Mac、Win上均可装置,参阅 Rainbond 快速装置
经过运用商铺快速布置 mall
mall 电商项目已发布到 Rainbond 开源运用商铺,能够经过开源运用商铺一键布置,在 平台办理 -> 运用市场 -> 开源运用商铺 中查找 mall
并装置。
此时 Rainbond 会主动构建、启动 mall 一切服务,只需等候即可,布置完成后拓扑图如下:
拜访 mall-admin-web
前端项目验证布置,默许用户暗码:admin / macro123
mall-portal
和 mall-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 版别
- 在 Mysql 组件 -> 端口 打开对外端口服务,经过 IP:PORT 衔接,默许用户暗码
root / root
- 经过东西衔接并导入 mall sql 数据。
装置 ElasticSearch
在开源运用商铺中查找 ElasticSearch 并装置 7.15.2 版别
- ElasticSearch 运用包含了 Kinbana,如不需求可删除 Kinbana 组件
- ElasticSearch 默许敞开了暗码验证,在 组件 -> 环境装备 -> 装备文件设置 修正装备文件将
xpack.security.enabled
设置为false
并更新组件收效。
装置中文分词器 IK Analyzer
- 首先在 团队视图 -> 插件 -> 新增插件 -> 经过运用商铺装置插件 查找
ES-IK-Analysis
并装置插件 - 为 ElasticSearch 组件增加存储,组件 -> 存储 -> 增加存储
- 称号:自界说
- 挂载路径:
/usr/share/elasticsearch/plugins
- 类型:同享存储
- 进入 组件 -> 插件 -> 未注册,注册
ES-IK-Analysis
插件 - 更新或重启 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-portal
和 mall-search
暂时没有前端,能够拜访后端 swagger 验证布置 http://xxx/swagger-ui/
最后
下一期出在 Rainbond 上布置 mall-swarm 微服务项目实践。