Hello world,every one!
接触过springcloud分布式系统好久了,今天来整理一下吧,笔者使用的是centos8阿里云服务器。
让我们开始吧
工具安装
安装上传下载工具
yum install lrzsz
git工具
yum -y install git
解压工具
yum install -y unzip zip
nginx安装
yum install nginx
docker安装
参考 https://www.runoob.com/docker/centos-docker-install.html
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
这里提示containerd.io版本太低,先升级:
wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
再安装:
yum install docker-ce docker-ce-cli containerd.io
启动docker:
systemctl start docker
https://www.cnblogs.com/niloay/p/6261784.html
https://www.cnblogs.com/freedom-only/p/11294103.html
添加admin到docker组https://blog.csdn.net/ljx1528/article/details/86424864
使用admin账户管理应用:
useradd admin
创建用户testuser
passwd admin
给已创建的用户testuser设置密码
gpasswd -a admin docker
将admin添加到docker组,docker安装时已经自动建好了
newgrp docker
刷新docker组
systemctl restart docker
创建docker ip组:可以根据自己的局域网段来
docker network create --subnet=192.168.2.0/16 shadownet
切换admin账户
拉取centos镜像:
docker pull centos
cd /home/admin
mkdir docker
cd docker
vi Dockerfile
将以下内容复制进去,第二行是时区同步,第三行设置系统语言,不同的基础镜像支持不同的语言包,可以进入容器执行locale -a查看容器所有语言包,后面的是配置java环境,jdk在后面会挂载到容器
FROM centos
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
ENV LANG C.utf8
ENV JAVA_HOME /usr/local/java8
ENV PATH ${PATH}:${JAVA_HOME}/bin
CMD java -version
保存后创建镜像: 后面的.表示当前目录
docker build -t my-image:v1 .
准备挂载目录,可以将常用的部署脚本和部署jar放进去,这里使用-v /home/admin/app/common_script:/app/common_script -v /home/admin/app/gateway:/app,前面是宿主目录,后面是docker目录
创建容器:
以gateway和user两个应用为例:制定ip和端口映射,挂载,没有静态ip需求的可以把–net shadownet --ip 192.168.2.2 换成 --net=host , 注意host 模式只支持 Linux 宿主机。静态ip在阿里云服务器上测试没问题,在本地测试服务器上测试连不上宿主机,奇了怪了,,
docker run -itd -p 7000:7000 -m2048M --net shadownet --ip 172.16.0.3 --name user -v /home/admin/app/common_script:/app/common_script -v /usr/local/java8:/usr/local/java8 -v /home/admin/app/user:/app my-image:v1 /bin/bash &&
docker run -itd -p 5201:5201 -m2048M --net shadownet --ip 172.16.0.4 --name store -v /home/admin/app/common_script:/app/common_script -v /usr/local/java8:/usr/local/java8 -v /home/admin/app/store:/app my-image:v1 /bin/bash
这时候容器已经跑起来了,查看命令:
docker ps -a
docker stats
进入容器:
docker exec -it user /bin/bash
docker exec -it store /bin/bash
让容器执行脚本:
docker exec -it user /bin/sh /app/common_script/start_app.sh
初始化脚本:/app/common_script/init.sh
mkdir -p /app/jar
mkdir -p /app/log/start-sh
touch /app/log/start-sh/jar-start.log
chmod 777 /app/*
执行初始化脚本: &&是让命令顺序执行
docker exec -it user /bin/sh /app/common_script/init.sh &&
docker exec -it store /bin/sh /app/common_script/init.sh
创建git本地代码库
先生成git证书免密登陆:
cd /home/admin/.ssh
ssh-keygen -t rsa -C git用户名
一直回车然后拷贝id_rsa.pub到git仓库里面添加SSH公钥
mkdir -p /home/admin/source
cd /home/admin/source
git clone git@代码库位置
这时已经基本完成,就差脚本了:
maven项目打包:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--配置为执行-->
<classifier>exec</classifier>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration><!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.taobao.GateWayCenterApp</mainClass>
<!-- 指定打包输出位置 便于脚本将可执行jar放到容器挂载目录以便执行-->
<outputDirectory>../../packages</outputDirectory>
<layout>JAR</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
打包脚本:
mvn_package.sh:
#先更新项目
cd /home/admin/source/项目名称
echo "---------------start update--------------"
git reset --hard && git pull && cd ~
echo "---------------update end--------------"
#mvn打包
rm -rf
cd /home/admin/source/项目名称
#统一将打包后的jar放在packages中
rm -rf packages
mvn clean package
#更新jar
cd packages
echo "---------------backup start--------------"
#备份
directory=app_`date +%Y-%M-%d_%H_%M_%S`
mkdir /home/admin/bak/${directory}
cp * /home/admin/bak/${directory}/
echo "---------------backup end--------------"
单项目启动脚本
set -m;
#更新jar,这里将打包好的jar放到挂载目录并让容器执行启动脚本
cd /home/admin/source/项目名/packages
cp user-1.0.0-exec.jar /home/admin/app/user/jar/app.jar
docker exec -i user /bin/sh /app/common_script/start_app.sh
通用脚本start_app.sh
##判断jar是否启动
pid=`ps aux | grep jar | grep app | awk '{print $2}'`
if [ ! -z "$pid" ];then
ps aux | grep jar | grep app | awk '{print $2}' | xargs kill -9
echo "========================已杀死进当前app进程======================="
else
echo "========================jar进程不存在或已结束========================"
echo "========================继续启动jar========================"
fi
nohup java -jar /app/jar/app.jar --spring.profiles.active=test >/app/log/log.log &
echo "========================app启动成功========================" \
#记录jar启动
date "+%Y-%m-%d %H:%M:%S" >> /app/log/start-sh/jar-start.log
tailf="tailf"
if [ ! -n "$1" ] ;then
echo "you have not input a tailf word!"
elif [ "$1" = "$tailf" ];then
tail -f /app/log/log.log
fi
Jenkins部署
推荐 启动脚本及git关联部署:
https://blog.csdn.net/qq_35868811/article/details/90295913?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-8
这里使用yum安装jenkins一直获取不到对应的GPG证书,放弃了,直接下载war包搞起吧
忘记了怎么下了,汗~
然后运行jenkins:8080端口
java -jar jenkins.war &
复制提示的初始化密码去打开浏览器,127.0.0.1:8080
登录后初始化需要好一会儿
参考https://www.cnblogs.com/linjiqin/p/10969175.html
配置ssh服务器登录,远程执行命令
执行更新打包命令(图里面的Exec command):
source /etc/profile
source ~/.bashrc
sh /home/admin/mvn_package.sh
更新运行gateway项目,可以配置到jenkins Exec command:
source /etc/profile
source ~/.bashrc
cd /home/admin/source/项目名/packages
cp gateway-1.0.0-exec.jar /home/admin/app/user/jar/app.jar
docker exec -i gateway /bin/sh /app/common_script/start_app.sh tailf
其他springcloud项目可参考user来弄
其他:
nacos启动:
/usr/local/nacos/bin/startup.sh -m standalone
端口:8848
redis
端口:6379
redis启动:
/usr/local/redis/src/redis-server /usr/local/redis/src/redis.conf
redis配置:
vi /usr/local/redis/redis.conf
#bind 127.0.0.1
requirepass 密码
protected-mode no
nginx启动:
端口:80
nginx -c /etc/nginx/nginx.conf
nginx重启:nginx -s reload
配置文件 /etc/nginx/nginx.conf
jenkins启动:
nohup java -jar /root/jenkins.war &