云服务器搭建集成自动化部署Java+Maven+Git+Jenkins+Docker+Mysql+Nginx

前言
本文记录了自己在搭建集成自动化部署过程的步骤,以及遇到的问题,并重新整理了一下思路,还有一些简单的概念说明。主要是参考了大神的文章:Jenkins+Docker+Gitlab+Maven搭建持续集成环境 基于系统:CentOs 7.6

基础环境

Java
Oracle下载jdk的tar包比如:jdk-8u221-linux-x64.tar(需要注册账号,并且点击接受license)
1、传到服务器某目录比如 /root 下
2、到指定目录新建放jdk的文件夹,作为jdk主目录

$cd /usr/local
$mkdir java

3、解压jdk的tar包到指定目录

$tar -zxvf /root/jdk-8u221-linux-x64.tar -C /usr/local/java/

4、配置环境变量

$vi /etc/profile
$export JAVA_HOME=/usr/local/java/jdk1.8.0_221
$export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
$export PATH=$PATH:$JAVA_HOME/bin
$source /etc/profile
$java -version

Maven
下载Maven的tar包比如:apache-maven-3.6.1-bin.tar.gz
1、上传到服务器某目录比如 /root
2、到指定目录新建放Maven主目录

$cd /usr/local
$mkdir maven

3、解压tar包到指定目录

$tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /usr/local/maven/

4、配置环境变量

$vi /etc/profile
$export M2_HOME=/usr/local/maven/apache-maven-3.6.0
$export PATH=$PATH:$M2_HOME/bin
$source /etc/profile
$mvn -v

Git
1、用yum安装

$yum -y update
$yum install -y git
$git --version

2、创建git用户

$useradd git
$passwd git
$id git

3、服务端创建Git仓库
1)设置服务器目录

$cd /root
$mkdir git
$cd git
$mkdir gittest.git
$git init --bare gittest.git
$chown -R git:git gittest.git/

2)设置客户端公钥到服务端
C:\Users\用户名.ssh 下id_rsa.pub的内容copy到 /home/git/.ssh/authorized_keys
记得新建的文件夹owner为git,同时更改文件权限

$vi /home/git/.ssh/authorized_keys
$cd /home/git
$chown -R git:git .ssh
$chmod 700 .ssh
$cd .ssh
$chmod 600 authorized_keys

(i 粘贴 公钥)

3)确认公钥私钥(RSA)认证开启

$vi /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

$vi /etc/rc.d/init.d/sshd restart

4、禁止git用户ssh登入

$vi /etc/passwd

git:x:1002:1002::/home/git:/bin/sh   
改为
git:x:1002:1002::/home/git:/usr/bin/git-shell

地址为:git@ip:/root/git/gittest.git

5、生成本机的git秘钥

$ssh-keygen -t rsa

三个回车,保存目录为
/root/.ssh/id_rsa
/root/.ssh/id_rsa.pub

Jenkins
目前docker版本的jenkins有点问题(版本号落后不支持在线安装插件),于是考虑在本机安装
1、下载rpm安装包到自定义目录 /root/jenkins-2.176.2-1.1.noarch.rpm

$rpm -ivh jenkins-2.176.2-1.1.noarch.rpm

2、配置jenkins的java目录

$vim /etc/init.d/jenkins

找到位置添加
/usr/local/java/jdk1.8.0_221/bin/java

3、启动服务

$service jenkins start

默认端口为8080,初始密码请参考登入页面的说明,具体配置请见后面

Docker
1、安装Docker

$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

2、启动Docker

$service docker start
$docker ps

3、加入开机启动

$systemctl enable docker
$docker version

配置Swap
因为我的云服务器内存比较小,这里设置一下Swap,目录可以自己改

dd if=/dev/zero of=/var/swap bs=1024 count=1024000
mkswap /var/swap
mkswap -f /var/swap
swapon /var/swap
vi /etc/fstab
/var/swap swap swap defaults 0 0

查看依赖度,并设置新的

cat  /proc/sys/vm/swappiness 
sysctl vm.swappiness=60

加入开机启动

echo "vm.swappiness = 60"  >>  /etc/sysctl.conf

详细配置

1、Docker网络环境配置
为了能自定义ip,Docker中需要配置自定义网络。

$docker network create --subnet=172.19.0.0/16 --gateway 172.19.0.1 mynetwork
$docker network inspect mynetwork

2、Docker部署Mysql
拉去镜像启动容器后,登入容器创建数据库等操作

$docker pull mysql:5.7
$docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 --net mynetwork --ip 172.19.0.3 -d mysql:5.7
$docker exec -it mysql bash
$mysql -u root -p"root"
$GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
$FLUSH PRIVILEGES;
$create database tjl;

3、Docker部署项目
这里用springboot的jar包进行部署测试

$ cd /root/product
$vi Dockfile

FROM java:8
MAINTAINER xiaofeng
VOLUME /tmp
ADD tjl-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8089

上传jar包到Dockfile同级目录 /root/product/tjl-0.0.1-SNAPSHOT.jar,并进行编译

docker build -t tjl .

启动容器

$docker run -d -p 8089:8089 --name tjl --link mysql:mysql -v /root/run_product/tmp:/tmp --net mynetwork --ip 172.19.0.4 tjl

$docker run -d -p 8090:8089 --name tjl2 --link mysql:mysql -v /root/run_product/tmp:/tmp --net mynetwork --ip 172.19.0.5 tjl

Dockfile这里要说明一下/tmp,指的是Docker容器中的目录/tmp映射到主机目录,主机目录是自动的,用inspect查看,并找到Mounts

$docker inspect tjl

"Mounts": [
    {
        "Type": "volume",
        "Name": "997f738dd5d8c35b59cd7b284badab64ab9a4dbe0f6e962072f080e0a8977303",
        "Source": "/var/lib/docker/volumes/997f738dd5d8c35b59cd7b284badab64ab9a4dbe0f6e962072f080e0a8977303/_data",
        "Destination": "/tmp",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
]

3、运行nginx镜像
下载nginx镜像,并运行,注意有映射目录文件,请自己设置新增目录。
另配置文件中增加了ssl和负载均衡配置。

$docker pull nginx
$docker run  -p 80:80 -p 443:443 -d --name nginxsslweb -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/conf.d/:/etc/nginx/conf.d/ -v /www:/www -v /root/nginx/logs/:/home/nginx/logs/ --net mynetwork --ip 172.19.0.6 nginx
$docker stop nginxsslweb

$openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crt
$cd /root/nginx/conf.d
$mkdir ssl
$cp -r /usr/local/ssl/*  /root/nginx/conf.d/ssl/

$vi /root/nginx/conf.d/default.conf
upstream mytomcat{
        server 172.19.0.4:8089 weight=1;
        server 172.19.0.5:8089 weight=1;
}

server{
    listen       80;
    server_name  120.78.150.156;
    return    301 https://$server_name$request_uri;
}

server {
    listen       443 ssl;
    server_name  120.78.150.156;
    ssl_certificate /etc/nginx/conf.d/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/conf.d/ssl/nginx.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    access_log /home/nginx/logs/httpsaccess.log;
    location / {
           proxy_pass http://mytomcat;
        }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

4、配置jenkins
这里网上有许多资料,这里就简单说几点。
1)启动jenkins并登入网址端口8080
2)进入插件管理,安装Maven Integration Plugin插件
3)配置JAVA_HOME和MAVEN_HOME
4)新任务,选择Maven
5)选择git插件,这里要配置秘钥(注意是私钥,匹配git仓库的公钥)
6) pom.xml 文件需要加项目 tjl/pom.xml
7)在Post Steps里面写入shell脚本
思路就是把旧的容器停了,镜像删了,然后重新构建启动。要注意jenkins的输出目录,还有配置sudo

$vi /etc/sudoers
root    ALL=(ALL)       ALL
jenkins ALL=(ALL)       NOPASSWD:ALL

##Post Steps脚本

sudo rm -rf /root/product/tjl-0.0.1-SNAPSHOT.jar
sudo cp /var/lib/jenkins/workspace/tjl2/tjl/target/tjl-0.0.1-SNAPSHOT.jar /root/product/tjl-0.0.1-SNAPSHOT.jar
sudo docker stop tjl
sudo docker stop tjl2
sudo docker rm -f tjl
sudo docker rm -f tjl2
sudo docker rmi tjl
sudo docker build -t tjl /root/product
sudo docker run -d -p 8089:8089 --name tjl --link mysql:mysql -v /root/product/tmp:/tmp --net mynetwork --ip 172.19.0.4 tjl
sudo docker run -d -p 8090:8089 --name tjl2 --link mysql:mysql -v /root/product/tmp:/tmp --net mynetwork --ip 172.19.0.5 tjl

7)点击立即构建等待完成。
8)配置触发构建条件,这里大家自行设置。

至此整个集成自动化部署已经搭建完成,快打开网址ip尝试一下吧。

常用命令:
查看容器ip

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql

容器启动日志

docker logs tjl

查看内存

free -mh
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值