商城项目02_环境搭建安装VAGRANTDOCKERMYSQLREDIS从0搭建各个微服务项目数据库初始化安装NGINX

Posted 所得皆惊喜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了商城项目02_环境搭建安装VAGRANTDOCKERMYSQLREDIS从0搭建各个微服务项目数据库初始化安装NGINX相关的知识,希望对你有一定的参考价值。

文章目录

①. virtualBox - 管理虚拟机

②. vagrant - 安装虚拟机

  • ①. 下载和安装vagrant
  1. Vagrant下载
  2. vagrant官网镜像
  3. 安装vagrant后,进入cmd,我们敲vagrent有信息就证明安装成功了
  4. 注意:VirualBox会与包括带不限于如下软件冲突,需要卸载这些软件,然后重启电脑。冲突的软件:红蜘蛛、360、净网大师(有可能)等
  • ②. 打开window cmd窗口,运行vagrant init centos/7,即可初始化一个centos7系统,运行vagrant up即可启动虚拟机。系统root用户的密码是vagrant(会出现很慢下载的清空)
    (下好了vargant,如果安装centos7很慢,可以用下面的连接替换初始化的那一步:vagrant init centos7 https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box。然后在执行vagrant up,就很快了,这个是国内的镜像地址。vagrant up,中间执行出现异常的话,多试几次)

  • ③. 关于vagrant命令
    (注意:下次使用也可以直接vagrant up直接启动,但要确保当前目录在C:/用户/ 文件夹下,他下面有一个Vagrantfile,不过我们也可以配置环境变量)

	(1). 下载cenots7:vagrant init centos/7
	(2). 启动虚拟机:vagrant up
	(3). 连接虚拟机:vagrant ssh
	(4). 重新加载:vagrant reload
	(5). 查看ip:ip addr (linux)
	(6). 查看当前用户: whoami (linux)
  • ④. 虚拟机网络设置(实现虚拟机和本地的window ip互通)
  1. Virtualbox使用的网络方式是网络地址转换NAT(端口转发),如果其它主机要访问虚拟机,必须由windows端口如3333转发给虚拟机端口如3306。这样每在linux里安一个软件都要进行端口映射,不方便,(也可以在virualBox里挨个设置)。我们想要给虚拟机一个固定的ip地址,windows和虚拟机可以互相ping通)
  2. 编辑Vagrantfile文件,修改其中的config.vm.network “private_network”,ip:“192.168.56.10”


3. 在虚拟机下和window下互相ping各自的ip

  • ⑤. 使用SSH免密登录(以后可以使用提供的ssh连接工具进行连接)
Vagrant ssh进去系统之后
vi /etc/ssh/sshd_config
修改 PasswordAuthentication 将no改成yes
重启服务 service sshd restart
这样以后我们就可以使用xshell进行免密登录了

  • ⑥. 如果出现虚拟机都ping不通baidu的情况(我的本地坏境是可以ping通的)

③. 虚拟机安装 - docker

  • ①. 卸载之前的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 \\
 device-mapper-persistent-data \\
 lvm2
  • ③. 告诉linux中docker的地址(配置镜像)
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
# 设置开机自启动
sudo systemctl enable docker
  • ⑤. 配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'

  "registry-mirrors": ["https://opvvjpc5.mirror.aliyuncs.com"]

EOF
sudo systemctl daemon-reload  
sudo systemctl restart docker 
  • ⑥. docker命令:
	(1). 查看docker的版本:docker -v
	(2). 设置开机自启动:sudo systemctl enable docker
	(3). 查看镜像:sudo docker images 
	(4). 设置docker里面容器自启动:sudo docker update redis --restart=always

④. docker上安装mysql

  • ①. 拉取mysql的镜像
sudo docker pull mysql:5.7
  • ②. 创建mysql容器并开启
    -p 3306:3306:将宿主机的3306端口映射到容器的3306端口
    -v /mydata/mysql/log:/var/log/mysql:在宿主机下创建log文件夹映射到容器的mysql下
    -v /mydata/mysql/data:/var/lib/mysql :将配置文件夹挂载到主机
    -v /mydata/mysql/conf:/etc/mysql :将配置问价挂载到主机
    -e MYSQL_ROOT_PASSWORD=root :初始化root用户的密码
    -d 表示后台运行
	# --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

  • ③. 查看mysql是否启动,并进入终端
docker ps
docker exec -it mysql/容器ID /bin/bash 使用守护式进程
  • ④. 修改mysql的统一编码为utf-8
 # 因为有目录映射,所以我们可以直接在镜像外执行
vi /mydata/mysql/conf/my.cnf

[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进行测试:
  • ⑥. 设置mysql开机自启 : docker update mysql --restart=always

⑤. docker上安装redis

  • ①. 安装镜像
sudo docker pull redis
  • ②. 有坑
    (docker run -p…有坑:如果直接挂载的话docker会以为挂载的是一个目录,在虚拟机中我们先创建一个文件然后再挂载)
# 在虚拟机中
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
  • ③. 运行redis
  1. -d redis redis-server /etc/redis/redis.conf:在后台启动redis服务,以etc/redis/redis.conf启动都会读取这个文件
  2. 注意:/etc/redis/redis.conf,只有/etc/redis没有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 \\
# 下面这几句话的意思是,每次启动的时候都使用的/etc/redis/redis.conf的配置启动的
-d redis redis-server /etc/redis/redis.conf
  • ④. 直接进去redis客户端
docker exec -it redis redis-cli
[root@localhost vagrant]# docker exec -it redis redis-cli
127.0.0.1:6379> set name tang
OK
127.0.0.1:6379> get name
"tang"
127.0.0.1:6379> 
  • ⑤. 配置持久化、配置密码(选配)
	vim /mydata/redis/conf/redis.conf
	# 插入下面内容
	appendonly yes
	保存
	vim /mydata/redis/conf/redis.conf
	# 插入下面内容
	requirepass root
	保存
  • ⑥. 重启redis
	docker restart redis
  • ⑦. 测试
  • ⑧. 设置redis开机自启动:sudo docker update redis --restart=always

⑥. 从gitee初始化一个微服务

  • ①. 设置模板也要勾上
  • ②. 创建好之后如图所示
  • ③. 在IDEA中导入项目

⑦. 从0搭建各个微服务项目

  • ①. IDEA然后New Module–Spring Initializer–com.atguigu.gulimall,Artifact填gulimall-product。Next - 选择web(web开发),springcloud routing里选中openFeign(rpc调用)

  • ②. 依次创建出以下服务
    (商品服务product、存储服务ware、订单服务order、优惠券服务coupon、用户服务member)

  • ③. 共同点
    导入web和openFeign
    group:com.atguigu.gulimall
    Artifact:gulimall-XXX
    每一个服务,包名com.atguigu.gulimall.XXXproduct/order/ware/coupon/member
    模块名:gulimall-XXX

  • ④. 然后右下角显示了springboot的service选项,选择它

  • ⑤. 从某个项目粘贴个pom.xml粘贴到项目目录,修改它

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gulimall</name>
    <description>聚合服务</description>
    <packaging>pom</packaging>
    <modules>
        <module>gulimall-product</module>
        <module>gulimall-ware</module>
        <module>gulimall-order</module>
        <module>gulimall-coupon</module>
        <module>gulimall-member</module>
    </modules>
</project>
  • ⑥. 修改总项目的.gitignore,把小项目里的垃圾文件在提交的时候忽略掉,比如HELP.md
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar

**/mvnw
**/mvnw.cmd
**/.mvn
**/target/

.idea

**/.gitignore
  • ⑦. 在maven窗口刷新,并点击+号,找到刚才的pom.xml添加进来,发现多了个root。这样比如运行root的clean命令,其他项目也一起clean了

  • ⑧. 提交项目到git(初始化项目)

⑧. 数据库坏境初始化

  • ①. 进入数据库工具,进行一个连接测试
  • ②. 依次创建出如下的数据库脚本
    (utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,java程序中将报SQL异常)

gulimall_oms
gulimall_pms
gulimall_sms
gulimall_ums
gulimall_wms

⑨. 高级篇 - 安装nginx

  • ①. 随便启动一个nginx实例,只是为了复制出配置
docker run -p80:80 --name nginx -d nginx:1.10 
  • ②. 将容器内的配置文件拷贝到/mydata/nginx/conf/ 下
mkdir -p /mydata/nginx/html
mkdir -p /mydata/nginx/logs
# 这个命令是在 /mydata/ 下执行的
docker container cp nginx:/etc/nginx .
# 别忘了后面有个点
# 由于拷贝完成后会在config中存在一个nginx文件夹,所以需要将它的内容移动到conf中
# 在mydata/nginx/下创建一个conf文件夹
mkdir conf
[root@localhost mydata]# mv nginx conf
[root@localhost mydata]# mkdir nginx 
[root@localhost mydata]# mv conf  nginx/
[root@localhost mydata]# ls
elasticsearch  mysql  nginx  redis
[root@localhost mydata]# cd nginx/
[root@localhost nginx]# ls
conf
[root@localhost nginx]# mkdir -p /mydata/nginx/html
[root@localhost nginx]# mkdir -p /mydata/nginx/logs
[root@localhost nginx]# ls
conf  html  logs
  • ③. 终止原容器:
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
  • ⑥. 设置开机启动nginx
docker update nginx --restart=always
  • ⑦. 创建“/mydata/nginx/html/index.html”文件,测试是否能够正常访问
echo '<h2>hello nginx!</h2>' >index.html
  • ⑧. 访问:http://nginx所在主机的IP:80/index.html

以上是关于商城项目02_环境搭建安装VAGRANTDOCKERMYSQLREDIS从0搭建各个微服务项目数据库初始化安装NGINX的主要内容,如果未能解决你的问题,请参考以下文章

商城项目02_环境搭建安装VAGRANTDOCKERMYSQLREDIS从0搭建各个微服务项目数据库初始化安装NGINX

商城项目_目录

谷粒商城_01_环境搭建

谷粒商城-分布式基础项目环境搭建

谷粒商城-分布式基础项目环境搭建

谷粒商城-分布式基础项目环境搭建