商城基础架构图:
必要组件准备
docker安装sql,redis
docker的每个镜像,都可看做是在一个完整独立的Linux系统上加载了一个应用程序。
指令
更详细的指令学习,可参考:docker指令学习
docker images
:查看安装的镜像
1、安装mysql镜像:
去docker仓库,里搜索mysql各版本镜像
sudo docker pull mysql:5.7
# --name指定容器名字 -v目录挂载 -p指定端口映射 -e设置mysql参数 -d后台运行
sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \ # Linux下的/mydata/mysql/log与容器内部的/var/log/mysql沐浴露进行挂载
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \ # -e 修改mysql的参数
-d mysql:5.7
docker ps
查看 docker 中正在运行的镜像
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c496d2553202 mysql:5.7 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
从左到右依次是:
- CONTAINER ID:ID
- IMAGE:镜像
- COMMAND: 启动命令
- CREATED: 启动时间
- STATUS: 状态
- PORTS: 端口号及与主机的映射关系
- NAMES:容器名
此时我们就可以验证,一个镜像就是一个完整的Linux操作系统了:
# 执行 mysql 容器的 /bin/bash
[root@VM-16-11-centos /]# docker exec -it mysql /bin/bash
# 可以看到已经进入了 mysql 镜像(看ID)
root@c496d2553202:/# ls # 从目录可看出,就是一个完整的Linux系统目录
bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
- 修改mysql配置:
vi /mydata/mysql/conf/my.conf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
docker restart mysql
: 重启 mysql 镜像
2、安装redis
-
拉取镜像:
docker pull redis
(不加版本号时,默认最新镜像) -
目录挂载
由于暂不存在 redis.conf 文件,如果直接挂载的话docker会以为挂载的redis.conf是一个目录,所以我们先创建一个文件然后再挂载。
# 在虚拟机中
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
# 直接进去redis客户端。
docker exec -it redis redis-cli
- 修改 redis 配置:配置AOF持久化模式
vi /mydata/redis/conf/redis.conf
appendonly true
使镜像随着电脑重启自启动:
sudo docker update mysql --restart=always
sudo docker update redis --restart=always
VsCode 及相应插件
创建所有的微服务目录
- 商品服务:product
- 仓储服务:ware
- 订单服务:order
- 优惠券服务:coupon
- 用户服务:member
共同点:都使用SpringWeb+OpenFeign
创建数据库:
- pms: 商品系统
- sms:营销系统
- oms:订单系统
- ums:用户系统
- wms:库存系统
然后导入数据
利用现有后台管理框架二次开发
人人开源的后台管理框架(进行二次开发)
1、renren-fast,后台管理框架的后台项目
2、renren-fast-vue(前端),前端项目
将 renren-fast 项目导入到现有工程中。
- 下载node.js
官网下载,安装完成后,因为就在/usr/bin/
目录下,所以不用配置环境变量,开箱即用。
设置镜像源:
npm config set registry https://registry.npm.taobao.org
在 renren-fast-vue
前端项目中,使用 npm install
来安装所需组件。
代码生成
使用 renren-generator
项目,来生成基础服务的 controller/dao/entity/service
代码。
只需要修改:
- application.yml 中
spring.datasource.url
连接为自己的数据库,username, password
为自己的 - generator.properties 中的
mainPath
(路径),package
(包名),moduleName
(模块名),tablePrefix
(表前缀)
- 因为每个生成的文件都会依赖共同的 util, entity,因此我们抽象出一个
common
包来解决共同依赖问题。
给每个服务进行配置——在 resouces 下新建 application.yml,内容如下:
spring:
datasource:
username: root
password: root
url: jdbc:mysql://49.233.35.25:3306/topmall_pms # 改成对应的数据库
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml # mapper 目录
global-config:
db-config:
id-type: auto # 自增主键
server:
port: 10000 # 端口号
其他组件选型
- 注册中心(服务发现/注册): SpringCloud Alibaba - Nacos
- 配置中心(动态配置管理): SpringCloud Alibaba - Nacos
- 负载均衡: SpringCloud - Ribbon
- 声明式HTTP客户端(调用远程服务RPC?): SpringCloud - Feign
- 服务容错(限流、降级、熔断): SpringCloud Alibaba - Sentinel
- API网关(webflux编程模式): SpringCloud - Gateway
- 调用链监控: SpringCloud - sleuth
- 分布式事务解决方案: SpringCloud Alibaba - Seata