一、服务器初始化
1. Linux 服务器安装宝塔面板
2.使用ssh root@ip 的方式远程连接
3.安装Docker ,参考:http://www.xiefeng.org/?id=3中的Docker安装
二、项目配置
1.项目中 eureka 配置需加上: prefer-ip-address: true 具体配置列如:
eureka:
instance:
prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
client:
serviceUrl:
defaultZone: http://xxx.xxx.xxx.xxx :9000/eureka/ #ip+port
register-with-eureka: false
fetch-registry: false
2.其余微服务的yml文件中也需配置:prefer-ip-address: true 具体配置列如:
eureka:
instance:
lease-renewal-interval-in-seconds: 60 #没过60秒给注册中心发送心跳
lease-expiration-duration-in-seconds: 120 #超过120秒没发送心跳,让注册中心删除实例
prefer-ip-address: true
client:
service-url:
defaultZone: http://xxx.xxx.xxx.xxx:9000/eureka #ip+port
3.微服务的pom.xml文件,配置打包插件,具体配置列如:
${project.artifactId}
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-surefire-plugin
true
com.spotify
docker-maven-plugin
1.0.0
${project.artifactId}
${project.basedir}
/
${project.build.directory}
${project.build.finalName}.jar
4.编译项目并打包 ,使用idea自带的打包方式 : 右侧Maven按钮 -> 项目[root]->双击package ->打包成功,获取jar包;
三. 服务器创建文件夹(使用宝塔面板)
1.在服务器非系统盘符中(如果有)创建对应文件夹,以项目为例如下:
1) mhxs-eureka-server (eureka注册与发现)
2) mhxs-web-comment-api (客户端)
3) mhxs-web-novel-api (客户端)
4) mhxs-web-user-api (客户端)
5) mhxs-gateway (网关zuul,集成了swagger2)
2.上传对应的jar文件到对应对应的文件夹中.
3.在对应文件夹中的分别创建Dockerfile文件,并编辑内容例如:
FROM java:8
MAINTAINER "维护者:ww"
VOLUME /www/jarslogs
ADD mhxs-web-user-api-1.jar /app.jar
EXPOSE 9003
CMD java -jar /app.jar
注1:其中微服务jar包修改了版本(如:xx-1.jar,xxx-2.jar,xxx-3.jar,....),对应文件夹下的同理修改,目的是为了方便后期版本回退.
注2:注意修改对应的jar名称和端口
4.编写创建镜像的脚本文件 : build_images.sh 和 相应jar文件夹一级,具体内容列如:
#!/usr/bin/env bash
set -eo pipefail
modules=(mhxs-eureka-server mhxs-web-comment-api mhxs-web-novel-api mhxs-web-user-api mhxs-gateway)
for module in "${modules[@]}"; do
docker build -t ${module} /www/jars/${module}
done
注:其中modules中的为对应的 jar文件夹名称
5.使用ssh连接到linux服务器,进入到build_image.sh 文件夹下,创建Docker镜像,操作如下:
sh build_image.sh
6.查看镜像
Docker images
7.在jar包文件夹同一层中创建启动镜像脚本:start_services.sh具体内容例如:
#!/bin/bash
# eureka-server服务器检测
serverStatus=0
# 访问eureka注册中心,获取http状态码
CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://api.badgerlibrary.com:9000`
# 判断状态码为200
if [[ $CODE -eq 200 ]]; then
serverStatus=1
else
serverStatus=0
fi
# eureka-server服务器异常,启动服务器
if [[ $serverStatus -eq 0 ]]; then
echo "eureka-server服务启动中......."
docker run -d -p 9000:9000 mhxs-eureka-server
while :
do
# 访问eureka注册中心,获取http状态码
CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://api.badgerlibrary.com:9000`
# 判断状态码为200
if [[ $CODE -eq 200 ]]; then
# 输出绿色文字,并跳出循环
echo -e "\033[42;34m server is ok \033[0m"
break
else
# 暂停1秒
echo -e "server is starting >>>>>>"
sleep 1
fi
done
# while结束时,也就是eureka启动完成后,执行容器中的run.sh。
echo -e "\033[42;34m eureka-server 启动成功 \033[0m"
sleep 1
echo -e "comment 开始启动"
docker run -d -p 9001:9001 mhxs-web-comment-api
sleep 1
echo -e "novel 开始启动"
docker run -d -p 9002:9002 mhxs-web-novel-api
sleep 1
echo -e "user 开始启动"
docker run -d -p 9003:9003 mhxs-web-user-api
sleep 1
echo -e "gateway 开始启动"
docker run -d -p 8088:8088 mhxs-gateway
echo -e "comment/novel/user/gateway 启动中,请稍后查看:http://api.badgerlibrary.com:9000"
else
echo "server 服务正常"
##### 检测comment服务
CODEComment=`curl -I -m 10 -o /dev/null -s -w %{http_code} https://api.badgerlibrary.com/api/comment/index`
# 判断状态码为200
if [[ $CODEComment -eq 200 ]]; then
echo "comment 服务正常"
else
echo "comment 服务异常,重启中......."
docker run -d -p 9001:9001 mhxs-web-comment-api
fi
sleep 1
##### 检测novel服务
CODENovel=`curl -I -m 10 -o /dev/null -s -w %{http_code} https://api.badgerlibrary.com/api/novel/index`
# 判断状态码为200
if [[ $CODENovel -eq 200 ]]; then
echo "novel 服务正常"
else
echo "novel 服务异常,重启中......."
docker run -d -p 9002:9002 mhxs-web-novel-api
fi
sleep 1
##### 检测user服务
CODEUser=`curl -I -m 10 -o /dev/null -s -w %{http_code} https://api.badgerlibrary.com/api/user/index`
# 判断状态码为200
if [[ $CODEUser -eq 200 ]]; then
echo "user 服务正常"
else
echo "user 服务异常,重启中......."
docker run -d -p 9003:9003 mhxs-web-user-api
fi
sleep 1
##### 检测gateway服务
CODEGateway=`curl -I -m 10 -o /dev/null -s -w %{http_code} https://api.badgerlibrary.com/doc.html`
# 判断状态码为200
if [[ $CODEGateway -eq 200 ]]; then
echo "gateway 服务正常"
else
echo "gateway 服务异常,重启中......."
docker run -d -p 8088:8088 mhxs-gateway
fi
fi
注1: 其中CODE用于检测对应服务是否已经启动成功,需根据具体项目修改.
注2: 启动方式分为全顺序启动和非全顺序启动
8: 查看镜像容器:
docker ps -a
9:更新jar:
1) docker ps -a 查看全部容器
2) docker stop CONTAINER ID CONTAINER ID CONTAINER ID .... 方式停止镜像运行,关闭服务
注: CONTAINER ID 为对应容器的ID
3) docker rm CONTAINER ID CONTAINER ID CONTAINER ID .... 方式删除镜像容器
4) docker rmi IMAGE ID IMAGE ID IMAGE ID .... 方式删除对应镜像
5) docker images 查看镜像列表,确认需要删除的镜像全部删除.
6) 按照对应的1到8的步骤,更新jar。
10.查看日志,有两种方法
1)直接通过宝塔面板可以找到对应日志位置:
日志默认都会以json-file的格式存储于/var/lib/docker/containers/<容器id>/<容器id>-json.log下
2) 使用命令查看
docker logs -f 容器ID
-f :不间断持续输出