测试服务器自动化部署(一)
xiao 5/8/2020 linuxdocker
# 说明及前置要求
本系统采用Linux系统contos8.0版本
项目使用Java语言,Spring boot框架,利用mvn插件docker-maven-plugin在打包(package/build)时自动构建镜像
项目基于微服务spring cloud全家桶.部署到码云Gitee.com中.
使用docker容器装载每个服务.docker-compose进行部署.
- 基础环境 docker-compose-env.yml
| 应用 | 说明 |
|---|---|
| nginx | http反向代理工具 |
| mysql | 关系型数据库 |
| mongo | 非关系型数据库 |
| redis | 缓存中间件 |
| rabbitMq | 消息队列中间件 |
| jenkins | 自动化部署项目 |
- 配置环境 docker-compose-config.yml
| 应用 | 说明 |
|---|---|
| eureka | 注册与发现中心 |
| config | 配置中心 |
| gateway | 网关 |
- 具体的项目(有依赖关系,需配置项目启动完成后启动) docker-compose-app.yml
# 部署思路
- 在码云配置公匙然后在测试服务器免密pull拉取新版本
- 进入项目根目录进行maven package打包重新构建docker镜像
- 停止并删除旧容器,使用docker-compose用新的docker镜像构建新容器并启动
- 编写shell脚本,配合Jenkins进行自动化部署,非专业人士也能去打包了(真香🙆♂)
# 配置环境
# java
由于jdk-8u251-linux-x64.tar.gz需要登录才能下载.所以自行下载并上传到服务器
cd /usr/local
# 解压到当前目录(/usr/local)
tar -xvf /home/tool/jdk-8u251-linux-x64.tar.gz
# 返回根目录并添加以下jdk环境变量
cd ~
vim + ./.bashrc
# 更新环境变量
source ~/.bashrc
# 查看是否生效
java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
jdk环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_251
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:{JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# maven
wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
cd /usr/local
tar -xvf /home/tool/apache-maven-3.6.3-bin.tar.gz
# 添加以下jdk环境变量
vim + ./.bashrc
# 更新环境变量
source ~/.bashrc
# 查看是否生效
mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/apache-maven-3.6.3
Java version: 1.8.0_251, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_251/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-147.el8.x86_64", arch: "amd64", family: "unix"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
maven环境变量
export M2_HOME=/usr/local/apache-maven-3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
修改${maven_home}/conf/setting.xml配置:
- 仓库地址
<localRepository>/home/repo</localRepository>
1
- 使用阿里镜像源
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
1
2
3
4
5
6
2
3
4
5
6
# git
yum install -y git
1
# 部署项目
# 部署公匙到gitee
#3个回车就完事了
ssh-keygen -t rsa -C "xxx@xxx.com"
#查看 ~/.ssh/id_rsa.pub 文件内容,获取到你的 public key
cat ~/.ssh/id_rsa.pub
1
2
3
4
2
3
4
将获取到的public key添加到项目->管理->部署公匙管理->添加部署公匙

# 拉取项目并打包
#xxx/xxx换成自己的项目地址
git clone git@gitee.com:xxx/xxx.git
#打包jar(进到项目根目录中)
mvn clean package
1
2
3
4
2
3
4
Git通过ssh协议免密pull拉取项目

# 使用docker-maven-plugin插件自动打包jar到Docker镜像
<artifactId>namo-demo</artifactId>
<version>1.0.0</version>
<properties>
<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
</properties>
<build>
<directory>${project.basedir}/target</directory>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker.maven.plugin.version}</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>namo-cloud/${project.artifactId}:${project.version}</imageName>
<!--<dockerHost>${docker.host}</dockerHost> 不上传到其他服务器-->
<baseImage>java:8</baseImage>
<entryPoint>["java", "-jar", "-Dspring.profiles.active=prod","/${project.build.finalName}.jar"]
</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 使用shell脚本启动容器
使用mvn package打包后,构建新的容器并启动
#!/usr/bin/env bash
app_name='namo-registry'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 8001:8001 --name ${app_name} \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d namo-cloud/${app_name}:1.0.0
echo '----start container----'
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
参数说明
- -p 8001:8001 将容器的8001端口映射到主机的8001端口
- -v /etc/localtime:/etc/localtime 容器与宿主时间同步
- -v /mydata/app/${app_name}/logs:/var/logs将日志文件夹挂载到主机
- -d 后台运行镜像
# 编辑docker-compose
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql-test
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always #自启动
environment:
MYSQL_ROOT_PASSWORD: root #设置root帐号密码
ports:
- 3306:3306
volumes:
- /mydata/mysql/conf/conf.d:/etc/mysql/conf.d #数据文件挂载
- /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf #配置文件挂载
- /mydata/mysql/log:/logs #日志文件挂载
- /mydata/mysql/data:/var/lib/mysql #数据
redis:
image: redis:6.0.1
container_name: redis-test
command: redis-server --appendonly yes
restart: always
volumes:
- /mydata/redis/data:/data #数据文件挂载
ports:
- 6379:6379
nginx:
image: nginx:1.17.10
container_name: nginx-test
restart: always
volumes:
- /mydata/nginx/conf:/etc/nginx #配置文件挂载
- /mydata/nginx/html:/usr/share/nginx/html #静态资源根目录挂载
- /mydata/nginx/logs:/var/log/nginx #日志文件挂载
ports:
- 80:80
rabbitmq:
image: rabbitmq:management
container_name: rabbitmq-test
restart: always
volumes:
- /mydata/rabbitmq/data:/var/lib/rabbitmq #数据文件挂载
- /mydata/rabbitmq/log:/var/log/rabbitmq #日志文件挂载
ports:
- 5672:5672
- 15672:15672
mongo:
image: mongo:4.2.6
container_name: mongo-test
restart: always
volumes:
- /mydata/mongo/db:/data/db #数据文件挂载
ports:
- 27017:27017
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins-test
restart: always
user: root
volumes:
- /mydata/jenkins_home:/var/jenkins_home
ports:
- 50000:5000
- 8080:8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
接着后台启动就完事了
docker-compose -f /root/docker-compose-env.yml up -d
1