您的位置:首页 > 运维架构 > Docker

初次部署springboot、docker、redis、mysql、nginx、jenkins自动化部署

2018-10-22 18:01 1311 查看

本文章适合所有初学者阅读,我会从刚买来的一台服务器开始从零到部署项目当然怎么购买我就不多说了

使用到的技术有springboot,docker,Redis的,MySQL和Nginx的

操作环境MAC电脑

首先通过终端连接服务器   

[code]ssh root@ip地址 

 

这是一台全新的服务器废话不多说直接开始操作步骤了

可以先设置一下服务器的安全,阅读我这篇文章

https://www.geek-share.com/detail/2751353754.html

安装docker

[code]yum -y install docker

查看是否安装成功

[code]docker -v

接着将docker后台启动   

[code]systemctl start docker.service

设置开机启动

[code]systemctl enable docker

通过ps -ef | grep docker我们可以看到docker已经启动了

4,镜像加速

鉴于国内网络问题,后续拉取Docker镜像十分缓慢,我们可以需要配置加速器来解决,我使用的阿里的镜像

没什么好说的阿里都已经告诉你怎么使用了粘贴进去就好了然后重启

5,安装jdk,mysql,redis,nginx直接拉即可但是我们需要加载自己的配置所以我们先创建docker-config目录我存放的目录是

6,目录新建好了后,我们先把镜像拉下来我们先通过docker images查看当前镜像现在是一个都还没有

7,我这里使用的是jdk8,mysql:5.6.35。不是所有东西都是最新的才是最好的所以我这里选择了版本其他最新的没啥影响

[code]docker pull java:8
docker pull mysql:5.6.35
docker pull redis
docker pull nginx
docker pull jenkins/jenkins

我们再输入docker images就可以看到拉下来的镜像了

8,我们通过docker ps -a查看当前运行的镜像现在是一个都还没有我们先把mysql跑起来

[code]docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.35

9,我们将容器里的配置文件都复制到服务器里面下面是代码ID是你的容器ID

[code]docker cp ID:/etc/mysql/my.cnf /app/soft/docker-config/mysql/conf/

redis默认是没有配置的,需要我们手动新增我们先进入redis / conf目录添加redis.conf具体配置如下具体字段都有说明

[code]mysql可以不用改动redis和nginx根据自己需要更改配置
Redis配置
# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
# 启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis.pid
daemonize no
#设置进程锁文件
pidfile /var/run/redis.pid
#端口
port 6379
#密码
requirepass

# 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
# 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
# debug (很多信息, 对开发/测试比较有用)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel debug

# 日志记录方式,默认为标准输出,如果配置为redis为守护进程方式运行,而这里又配置为标准输出,则日志将会发送给/dev/null
logfile logs
# 设置数据库的数量,默认数据库为0,可以使用select <dbid>命令在连接上指定数据库id
# dbid是从0到‘databases’-1的数目
databases 16
##指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
#save <seconds> <changes>
#Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
#指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,
#可以关闭该#选项,但会导致数据库文件变的巨大
rdbcompression yes
#指定本地数据库文件名
dbfilename dump.rdb
#指定本地数据库路径
dir ./
#指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能
#会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有
#的数据会在一段时间内只存在于内存中
appendonly no
#指定更新日志条件,共有3个可选值:
#no:表示等操作系统进行数据缓存同步到磁盘(快)
#always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
#everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec

nginx的配置  记得把自己域名写上去  我这里随便写了个localhost的域名

[code]

#nginx进程数,建议设置为等于CPU总核心数

worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections  1024;
}

http {
include       mime.types;
default_type  application/octet-stream;

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

upstream localhost.web {
server localhost:8080;
}

#vue 映射
server {
listen       80;#监听端口
#域名可以有多个,用空格隔开
server_name  test.admin.lfeel.com;
location / {
root   /usr/share/nginx/vue/lfeel-admin;
index  index.html index.htm;
}
#没域名情况下图片映射
#location /images/ {
#    alias /data2/upload;
#    autoindex off;
#}
}

#web 映射
server {
listen       80;
server_name  test.admin.api.lfeel.com;
location / {
proxy_pass http://localhost.web;
proxy_set_header   Host    $host;
proxy_set_header   X-Real-IP   $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

#图片服务器
server {
listen       80;
server_name  test.pic.lfeel.com;
location / {
root  /usr/share/nginx/upload/;
autoindex off;
}
}

# HTTPS server
#
#server {
#    listen       443 ssl;
#    server_name  localhost;

#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;

#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;

#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}
include servers/*;
}

然后我们停止运行的容器,然后把它们都删除

 

10,我们自己的需要挂在的配置文件都已经创建好了那就根据我们的配置文件启动把先进入docker-config目录下

大部分命令请移步泊坞窗命令,我就不做命令的解释了

启动的MySQL,挂载CONF和日志目录数据目录,并设置密码 进入docker-config目录执行

[code]docker run -p 3306:3306 --name docker-mysql \
-v $PWD/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v $PWD/mysql/logs:/var/log/mysql \
-v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.35

启动Redis的

[code]docker run --name docker-redis -p 6379:6379 \
-v $PWD/redis/conf/redis.conf:/etc/redis/redis.conf \
-v $PWD/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

启动nginx新增了/ data2 / vue / lfeel-admin的目录

[code]docker run -d -p 80:80 --name docker-nginx \
-v /data2/vue/lfeel-admin:/usr/share/nginx/vue/lfeel-admin \
-v $PWD/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/nginx/logs:/var/log/nginx \
-v /data2/upload:/usr/share/nginx/upload -d nginx

启动jenkins

[code]docker run -d -p 9090:8080 --name jenkins --restart=always \
-v /app/soft/docker-config/jenkins:/var/jenkins_home jenkins/jenkins

 

我们需要把阿里的防火墙打开才能让外部访问

jenkins自动化部署 这个东西搞了我很久我还是没摸透  只能搞我会的方式了

访问http://ip:9090可以访问jenkins

进入这个地址获取密码  因为我这里是docker启动jenkins 所以容器里面做了挂载 

如果你的没找到  那就进入jenkins容器里面去找  容器里面肯定会有的

选择默认安装

全都安装完毕我们进入jenkins

然后保存 

系统管理   插件管理  安装ssh和maven

 

等它重启完毕

进入系统设置

可以点击下面的测试 看看是否链接成功

 

新建一个任务

 

 

 

保存构建看看  下面是build的脚本是网上抄下来的

[code]#操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/data2/dockerFile
# 源jar路径
SOURCE_PATH=/app/soft/docker-config/jenkins/workspace/lfeel
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=lfeel-admin
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')

DATE=`date +%Y%m%d%H%M`

# 最新构建代码 移动到项目环境
function transfer(){
echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 迁移至 $BASE_PATH/$SERVER_NAME ...."
cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH/$SERVER_NAME
cp $SOURCE_PATH/$SERVER_NAME/docker/Dockerfile $BASE_PATH/$SERVER_NAME
echo "迁移完成"
}

# 备份
function backup(){
if [ -f "$BASE_PATH/$SERVER_NAME/$SERVER_NAME.jar" ]; then
echo "$SERVER_NAME.jar 备份..."
cp $BASE_PATH/$SERVER_NAME/$SERVER_NAME.jar $BASE_PATH/$SERVER_NAME/backup/$SERVER_NAME-$DATE.jar
echo "备份 $SERVER_NAME.jar 完成"
else
echo "$BASE_PATH/$SERVER_NAME/$SERVER_NAME.jar不存在,跳过备份"
fi
}

# 构建docker镜像
function build(){
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME镜像,IID=$IID"
else
echo "不存在$SERVER_NAME镜像,开始构建镜像"
cd $BASE_PATH/$SERVER_NAME
docker build -t $SERVER_NAME .
fi
}

# 运行docker容器
function run(){
backup
transfer
build
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID,重启docker容器 ..."
docker restart $SERVER_NAME
echo "$SERVER_NAME容器重启完成"
else
echo "不存在$SERVER_NAME容器,docker run创建容器..."
docker run --name $SERVER_NAME -v /data2/upload:/data2/upload -v /data2/logs/lfeel/lfeel-admin:/data2/logs/lfeel/lfeel-admin -d -p 8080:8080 $SERVER_NAME
echo "$SERVER_NAME容器创建完成"
fi
}

#入口
run

可以看到成功的部署了  如果有哪里跑不动  仔细看我的环境目录和你的环境目录结构或者百度查询错误是什么原因引起的

部署情况大概主要内容就这些了

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: