声明
本文是根据尚硅谷视频讲解的谷粒商城项目,手动实操过后以及踩坑后的心得体会,笔记会根据分为几大关键点进行讲解,码字不易,请勿转载发布!
环境搭建篇:仅讲解如何搭建一个可运行的环境,不包括部署集群,属于基础篇章
下载 visualBox 和 vagrant
vagrant init centos/7 初始化一个centos7系统
vagrant up 启动虚拟机环境
vagrant ssh 连上虚拟机
vagrant reload 重启虚拟机
就是如果其他主机要访问虚拟机,必须由windows端口如3333开辟给虚拟机端口如3306。这样每在linux里安一个软件都要进行端口映射不方便,(也可以在virualBox里挨个设置)。
解决方案:给虚拟机一个固定的ip地址,windows和虚拟机可以互相ping通。这样直接访问虚拟机ip就相当于直接访问虚拟机
更改Vagrantfile更改虚拟机ip,修改其中的config.vm.network "private_network",ip:"192.168.56.10",配置完后vagrant reload重启虚拟机
# 备份原yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 使用新yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
# 生成缓存
yum makecache
#卸载系统之前的docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装yum-utils包
sudo yum install -y yum-utils
# 配置镜像
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动docker
sudo systemctl start docker
# 设置开机自启动
sudo systemctl enable docker
# 查看版本
docker -v
# 查看虚拟机docker镜像
sudo docker images
登录阿里云按照步骤:https://cr.console.aliyun.com/cn-qingdao/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://chqac97z.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 拉取镜像到本地
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 \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
# 查看成功启动的镜像
docker ps
# 进入已启动的容器
docker exec -it mysql bin/bash
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
# 重新启动mysql
docker restart mysql
# 在虚拟机中,如果直接挂载的话docker会以为挂载的是一个目录,所以我们先创建一个文件然后再挂载
mkdir -p /mydata/redis/conf
# 创建文件
touch /mydata/redis/conf/redis.conf
# 拉取redis镜像
docker pull redis
# 启动容器
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
# 默认没有持久化,配置文件开启持久化
vim /mydata/redis/conf/redis.conf
# 插入下面内容
appendonly yes
# 重新启动redis
docker restart redis
# 设置开机自启
docker update redis --restart=always
# 拉取nginx镜像
docker pull nginx:1.10
# 随便启动一个nginx实例,只是为了复制出配置,放到docker里作为镜像的统一配置
docker run -p 80:80 --name nginx -d nginx:1.10
# 进入mydata目录
cd /mydata
# 创建nginx文件夹
mkdir nginx
# 把nginx里的东西复制出来,然后在外部 /mydata/nginx有了一堆文件
docker container cp nginx:/etc/nginx .
# 进入nginx目录
cd /mydata/nginx/
# 创建conf目录
mkdir conf
# 将nginx目录下的内容移动到conf目录下
cd /mydata
mv nginx conf
# 由于移除了,所以nginx文件夹不存在了,所以创建一个nginx文件夹,将conf移动到nginx下
mkdir nginx
mv conf/ nginx/
# 停掉nginx
docker stop nginx
# 移除此容器,因为只是要得到配置文件而已
docker rm nginx
# 创建新的nginx,使用刚才复制出来的配置文件
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10
# 注意一下这个路径映射到了/usr/share/nginx/html,我们在nginx配置文件中是写/usr/share/nginx/html,不是写/mydata/nginx/html
# 设置开机自启
docker update nginx --restart=always
正向代理:可以清楚知道我要访问什么内容(网址),但是由于直接访问访问不到,所以需要利用代理服务器帮助访问寻求
反向代理:不知道实际的服务是什么(隐藏真实的ip),nginx服务器是将真正服务器的地址存放在nginx,然后客户端通过ip访问nginx,然后由nginx匹配到规则后代理到真正服务器, 比如我们只知道网关的域名,实际上网关的真实ip和将要怎么转发是由nginx控制的,不是我们通过一个实际的地址直接访问(也就是隐藏了服务器的内部信息)
先解析本机是否有相应的映射规则,解析本机的host文件,根据域名解析到对应的地址,由于每次修改hosts文件太麻烦了,因此,安装SwitchHosts
配置nginx.conf,负载均衡到网关
cd /mydata/nginx/conf/conf.d/
cp default.conf mall.conf
vim mall.conf
以前,无论是动态或是静态请求,都会交给nginx,再由Nginx转交给网关,由网关交给后台服务的集群,假设现在产生了很多首页的请求,一个就占用了微服务一半的资源,两个就会占满,最终吞吐量每秒就会只有两三个左右
所以将静态资源直接放在nginx, 由nginx直接将资源返回,而动态资源还是交由网关处理,最终给予真正的服务
将原idea的静态资源static
文件夹,全部移到服务器的/mydata/nginx/html/
目录下
# 拉取 elasticsearch 和 kibana镜像
docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2
# 创建配置文件
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
chmod -R 777 /mydata/elasticsearch/
echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml
# 启动容器
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"
-e ES_JAVA_OPTS="-Xms64m -Xmx512m"
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins
-d elasticsearch:7.4.2
# 开机自启
docker update elasticsearch --restart=always
# 启动kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 -d kibana:7.4.2
# 开机自启
docker update kibana --restart=always
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671
-p 15672:15672 rabbitmq:management
docker update rabbitmq --restart=always
Auto Close Tag Auto Rename Tag Chinese ESlint
HTML CSS Support HTML Snippets JavaScript ES6
Live Server open in brower Vetur
修改总项目的.gitignore
**/mvnw
**/mvnw.cmd
**/.mvn
**/target/
.idea
**/.gitignore
数据库表参考:https://gitee.com/HanFerm/gulimall/tree/master/sql文件
ps:gulimall_admin里面的schedule_job表要清空,不然启动renrenfast模块会报获取定时任务CronTrigger出现异常
参考链接
https://blog.csdn.net/hancoder/article/details/106922139