springcloud服务器搭建-自动化部署docker+jenkins

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 &

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值