同学们好!作为一个复杂的分布式系统,往往涉及数量众多的功能组件。特别是基于微服务架构的互联网应用,每一个微服务都是一个独立的可执行程序,再加上前端服务器,服务注册与发现服务器,等等。构建、部署和维护这样的复杂系统,无论是对开发人员,还是对运维人员,都是一种空前的挑战。编写并使用运维脚本,在某种程度上可以简化这部分工作,提高工作效率,同时也减少了犯错误的机会,提高了系统整体的易用性和可维护性。
这节课,我们将为《我家租房网》项目创建四个脚本,分别用于构建前后端服务器、启动基于FastDFS和Nginx的文件服务器、启动前后端服务器和停止前后端服务器。有了这些脚本,我们的开发和测试工作会变得更加轻松愉快。
首先我们来编写前后端服务器的构建脚本。
在项目目录下创建名为build.sh的Shell脚本文件:
x1
2
3cd back-end
4
5cd GetImageCode
6echo "Building ${PWD##*/}..."
7go build
8
9cd ../GetSMSCode
10echo "Building ${PWD##*/}..."
11go build
12
13cd ../UserRegister
14echo "Building ${PWD##*/}..."
15go build
16
17cd ../GetAreas
18echo "Building ${PWD##*/}..."
19go build
20
21cd ../UserLogin
22echo "Building ${PWD##*/}..."
23go build
24
25cd ../GetUser
26echo "Building ${PWD##*/}..."
27go build
28
29cd ../SetUsername
30echo "Building ${PWD##*/}..."
31go build
32
33cd ../UploadAvatar
34echo "Building ${PWD##*/}..."
35go build
36
37cd ../UserAuth
38echo "Building ${PWD##*/}..."
39go build
40
41cd ../PublishHouse
42echo "Building ${PWD##*/}..."
43go build
44
45cd ../UploadImage
46echo "Building ${PWD##*/}..."
47go build
48
49cd ../GetHouses
50echo "Building ${PWD##*/}..."
51go build
52
53cd ../GetHouse
54echo "Building ${PWD##*/}..."
55go build
56
57cd ../GetIndex
58echo "Building ${PWD##*/}..."
59go build
60
61cd ../../front-end
62echo "Building ${PWD##*/}..."
63go build
64
65cd ..
66echo "Ok!"
67
68exit 0
依次进入每一个后端微服务的工程目录,执行go build命令,在该工程目录下生成相应微服务的可执行程序。最后进入前端服务器的工程目录,执行go build命令,在该目录下生成前端服务器的可执行程序。
直接在项目目录下启动Bash控制台,执行前面编写的脚本。可以看到,所有后端微服务和前端服务器的可执行程序,都已被构建好,并位于各自的工程目录下。
下一步,我们为运行在虚拟机中的文件服务器编写启动脚本。
在项目目录下创建名为file.sh的Shell脚本文件:
xxxxxxxxxx
71
2
3sudo fdfs_trackerd /etc/fdfs/tracker.conf
4sudo fdfs_storaged /etc/fdfs/storage.conf
5sudo /usr/local/nginx/sbin/nginx
6
7exit 0
以超级用户身份依次启动FastDFS的跟踪服务器和存储服务器,启动Nginx服务器。
进入虚拟机,在终端窗口中执行前面编写的脚本,启动基于FastDFS和Nginx的文件服务器。
编写一个脚本,一键启动《我家租房网》。
在项目目录下创建名为start.sh的Shell脚本文件:
xxxxxxxxxx
711
2
3echo "Starting Consul..."
4consul agent -dev &
5
6cd back-end
7
8cd GetImageCode
9echo "Starting ${PWD##*/}..."
10./${PWD##*/} &
11
12cd ../GetSMSCode
13echo "Starting ${PWD##*/}..."
14./${PWD##*/} &
15
16cd ../UserRegister
17echo "Starting ${PWD##*/}..."
18./${PWD##*/} &
19
20cd ../GetAreas
21echo "Starting ${PWD##*/}..."
22./${PWD##*/} &
23
24cd ../UserLogin
25echo "Starting ${PWD##*/}..."
26./${PWD##*/} &
27
28cd ../GetUser
29echo "Starting ${PWD##*/}..."
30./${PWD##*/} &
31
32cd ../SetUsername
33echo "Starting ${PWD##*/}..."
34./${PWD##*/} &
35
36cd ../UploadAvatar
37echo "Starting ${PWD##*/}..."
38./${PWD##*/} &
39
40cd ../UserAuth
41echo "Starting ${PWD##*/}..."
42./${PWD##*/} &
43
44cd ../PublishHouse
45echo "Starting ${PWD##*/}..."
46./${PWD##*/} &
47
48cd ../UploadImage
49echo "Starting ${PWD##*/}..."
50./${PWD##*/} &
51
52cd ../GetHouses
53echo "Starting ${PWD##*/}..."
54./${PWD##*/} &
55
56cd ../GetHouse
57echo "Starting ${PWD##*/}..."
58./${PWD##*/} &
59
60cd ../GetIndex
61echo "Starting ${PWD##*/}..."
62./${PWD##*/} &
63
64cd ../../front-end
65echo "Starting ${PWD##*/}..."
66./${PWD##*/} &
67
68cd ..
69echo "Ok!"
70
71exit 0
先启动Consul服务器,接着启动每一个后端微服务,最后启动前端服务器。
直接在项目目录下启动Bash控制台,执行前面编写的脚本。可以看到,Consul服务器、所有后端微服务和前端服务器都被启动运行。
最后再编写一个脚本,一键停止《我家租房网》。
在项目目录下创建名为stop.sh的Shell脚本文件:
xxxxxxxxxx
541
2
3echo "Stoping front-end..."
4kill -s 9 `ps aux | grep front-end | awk '{print $1}'`
5
6echo "Stoping GetImageCode..."
7kill -s 9 `ps aux | grep GetImageCode | awk '{print $1}'`
8
9echo "Stoping GetSMSCode..."
10kill -s 9 `ps aux | grep GetSMSCode | awk '{print $1}'`
11
12echo "Stoping UserRegister..."
13kill -s 9 `ps aux | grep UserRegister | awk '{print $1}'`
14
15echo "Stoping GetAreas..."
16kill -s 9 `ps aux | grep GetAreas | awk '{print $1}'`
17
18echo "Stoping UserLogin..."
19kill -s 9 `ps aux | grep UserLogin | awk '{print $1}'`
20
21echo "Stoping GetUser..."
22kill -s 9 `ps aux | grep GetUser | awk '{print $1}'`
23
24echo "Stoping SetUsername..."
25kill -s 9 `ps aux | grep SetUsername | awk '{print $1}'`
26
27echo "Stoping UploadAvatar..."
28kill -s 9 `ps aux | grep UploadAvatar | awk '{print $1}'`
29
30echo "Stoping UserAuth..."
31kill -s 9 `ps aux | grep UserAuth | awk '{print $1}'`
32
33echo "Stoping PublishHouse..."
34kill -s 9 `ps aux | grep PublishHouse | awk '{print $1}'`
35
36echo "Stoping UploadImage..."
37kill -s 9 `ps aux | grep UploadImage | awk '{print $1}'`
38
39echo "Stoping GetHouses..."
40kill -s 9 `ps aux | grep GetHouses | awk '{print $1}'`
41
42echo "Stoping GetHouse..."
43kill -s 9 `ps aux | grep GetHouse | awk '{print $1}'`
44
45echo "Stoping GetIndex..."
46kill -s 9 `ps aux | grep GetIndex | awk '{print $1}'`
47
48echo "Stoping Consul..."
49kill -s 9 `ps aux | grep consul | awk '{print $1}'`
50
51cd ..
52echo "Ok!"
53
54exit 0
通过kill命令,依次杀死前端服务器、各后端微服务及Consul服务器进程。
直接在项目目录下启动Bash控制台,执行前面编写的脚本。可以看到,前端服务器、所有后端微服务和Consul服务器都被终止运行。
谢谢大家,我们下节课再见!