谷粒商城项目环境配置
1.安装Docker
----> 安装命令
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
$ sudo yum install -y yum-utils
---->官网yum源
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
---->阿里云yum源(推荐)
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
yum makecache fast
$ sudo yum install docker-ce docker-ce-cli containerd.io
$ sudo systemctl start docker
---->查看docker信息
docker -v
docker images
---->设置开机自启动
systemctl enable docker
---->修改docker源为阿里云
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://aeb49y3h.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
---->docker镜像自动启动
举例:redus、mysql
docker update redis --restart=always
docker update mysql --restart=always
2.安装docker–>mysql
----> 从远程拉取mysql的5.7 Tag镜像
docker pull mysql:5.7
---->配置mysql
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \(本地和docker关联)
-e MYSQL_ROOT_PASSWORD=123456(自己mysql密码) \
-d mysql:5.7(版本)
进入mysql
docker exec -it mysql /bin/bash
配置 config文件
/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
collection-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
3.安装docker–>redis
----> 从远程拉取redis镜像文件
docker pull redis
----> redis的基本配置
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持久化
vim /mydata/redis/conf/redis.conf
填入:
appendonly yes
4.Maven配置
---->下载Linux的maven安装包
上传到Linux
cd /usr/local
tar -zxvf apache-maven-3.6.3-bin.tar.gz //注意版本号
---->配置环境变量
vi /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
刷新变量
source /etc/profile
查看是否安装成功
mvn -v
进入setting.xml文件
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror></mirrors><profiles>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profiles>
5.git配置
----> 安装下载git
----> 配置用户名和邮箱
git config -global user.name "username"
git config -global user.email "username@email.com"
----> 配置git免密登录在git bash中:
ssh-keygen -t rsa -C "username@email.com:
三次回车
查看密钥
cat ~/.ssh/id_rsa.pub
进入gitee找到公钥页面,将查看到的密钥填入进去
测试是否成功
ssh -T git@gitee.com
6.创建项目微服务
gitee新建仓库建立以下服务:**
商品服务,仓储服务,订单服务,优惠券服务,用户服务
共同点:
1.导入spring web,openfeign
2.每一个服务的包名:
com.xxx.gulimall.xxx(product/order/ware/coupon/member)
3.模块名:
gulimall-product/order/ware/coupon/member
7.获取gitee的renren开源前后端项目
1.进入Gitee搜索人人开源
2.复制renren-fast(后端)和renren-fast-vue(前端)项目的地址
3.在本地git clone 地址,拉取项目到本地
4.在idea中配置renren-fast项目,在总pom中导入renren-fast的model(删除自带的.git文件)
8.安装配置node.js
---->官网下载安装node.js
检查版本
node -v
---->配置npm使用淘宝镜像
npm config set registry http://registry.npm.taobao.org/
9.前端项目renren-fast-vue配置
---->在VS Code中安装插件
Auto Close Tag,Auto Rename Tag
Chinese(Simplified) Language
ESLint
HTML CSS Support
HTML Snippets
JavaScript(ES6) code snippets
Live Server
open in browser
TSLint(deprecated)
Vetur
将reneren-fast-vue项目导入到VS Code中
在VS Code的终端输入npm install下载依赖组件
启动前端项目
npm run dev
10.后端逆向工程搭建
---->下载gitee上的人人开源的renren-generator项目
---->项目导入总工程并修改application.yml和application.properties中对应的数据库的参数
---->运行generator项目,反向生成工程
---->对生成的每个微服务yml进行配置
server:
port: xxxxx
spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://xxxxx:3306/gulimall_*ms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto
11.配置nacos
---->修改common中的pom文件,引入Nacos
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
---->在每个微服务配置application.yml
spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://39.99.217.20:3306/gulimall_ums?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
cloud:
nacos:
discovery:
server-addr: ******:8848(nacos地址)
application:
name: gulimall-member(微服务名字)
---->在主程序使用@EnableDiscoveryClient开启服务注册发现功能
12.open-feign远程调用
---->引入open-feign的gav坐标
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
---->编写一个接口,告诉springcloud这个接口需要调用远程服务。
1).声明接口的每一个方法都是调用哪个远程服务的哪个请求。
2).创建一个feign文件夹,在此文件夹内创建CouponFeign接口远程调用gulimall-coupon服务
@FeignClient("gulimall-coupon")
public interface CouponFeign {
@RequestMapping("/coupon/coupon/test")
public R test();
}
---->在启动类加入@EnableFeignClients(basePackages = “{接口所在的包全类名}”)开启远程调用功能.
13.nacos-config配置
---->导入nacos-config的pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
---->创建一个bootstrap.properties
spring.application.name=nacos-config-example
spring.cloud.nacos.config.server-addr=*****:8848
---->给配置中心默认添加一个数据集(Data Id)---->默认规则:应用名.properties
---->给应用名.properties添加任何配置
---->动态获取配置
@RefreshScope:添加在Controller层,动态获取并刷新配置
@Value:获取到配置信息
如果配置中心和当前应用的配置文件中都配置了相同的项,优先调用配置中心的配置。
---->细节
1、命名空间:配置隔离
默认:public(保留空间),默认新增的所有配置都在public空间。
- –>开发,测试,生产:利用命名空间来做环境隔离
注意:在bootstrap.properties配置上是,需要使用哪个命名空间下的配置
spring.cloud.nacos.config.namespace=页面上命名空间的ID. - –>每一个微服务之间相互配置隔离,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置。
默认:public(保留空间),默认新增的所有配置都在public空间。
2、配置集:所有的配置的集合
3、配置集ID:类似文件名。 Data Id:类似文件名
4、配置分组:
- 默认所有的配置集都属于:DEFAULT_GROUP
- 每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod…
----> 7.配置多个yml、properties
在nacos-config中配置后,在项目的bootstrap.properties中加入:
spring.cloud.nacos.config.extension-configs[0].data-id=***
spring.cloud.nacos.config.extension-configs[0].group=***
spring.cloud.nacos.config.extension-configs[0].refresh=true
14.Gateway网关API配置
---->网关配置example
- 创建一个网关微服务gulimall-gateway
- 添加gateway依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
- 如果公共pom内有数据源依赖,需要在启动类排除数据源自动配置
@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class GulimallGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallGatewayApplication.class, args);
}
}
- 在配置中心创建bootstrapt.properties
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=****:8848
spring.cloud.nacos.config.namespace=****(nacos的config配置中心的命名空间ID)
- 在配置中心创建application.yml
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
- 启动gulimall-gateway访问http://****:88/hello?url=baidu,跳转至百度
- 启动gulimall-gateway访问http://****:88/hello?url=qq,跳转至腾讯
---->项目网关配置
- 登录renren-fast项目,在菜单管理–>新建目录
- 新增菜单
- 创建前端vue的category.vue文件
- 修改static\config\index.js的api接口请求地址为网关地址
- renren-fast加入common的pom配置
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
- 修改renren-fast的renren-fast\src\main\resources\application.yml
spring:
application:
name: renren-fast
cloud:
nacos:
discovery:
server-addr: ****:8848
-
修改gulimall-gateway\src\main\resources\application.yml将路由转发至renren-fast微服务
-
访问地址:http://localhost:8001/#/login
-
统一配置跨域
---->
创建gulimall-gateway\src\main\java\com\atguigu\gulimall\gateway\config\GulimallCorsConfiguration.java
---->
package com.**.gulimall.gateway.config;
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration;import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;import org.springframework.web.cors.reactive.CorsWebFilter;
@Configurationpublic class GulimallCorsConfiguration {
@Bean
public CorsWebFilter corsWebFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.setAllowCredentials(true);
source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(source);
}
}
---->禁用默认跨域
renren-fast\src\main\java\io\renren\config\CorsConfig.java
----> 修改gulimall-gateway\src\main\resources\application.yml将路由转发至gulimall-product微服务
spring:
cloud:
gateway:
routes:
- id: product_route
uri: lb://gulimall-product
predicates:
- Path=/api/product/**
filters:
- RewritePath=/api/(?<segment>.*),/$\{segment}
----> 添加配置gulimall-product\src\main\resources\bootstrap.properties
spring.application.name=gulimall-product
spring.cloud.nacos.config.server-addr=***:8848
---->product添加注册发现
server:
port: 10000
spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://****:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
cloud:
nacos:
discovery:
server-addr: ****:8848
application:
name: gulimall-product
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto
---->启动注册功能
// 添加注册发现功能
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallProductApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallProductApplication.class, args);
}
}