初次部署springboot、docker、redis、mysql、nginx、jenkins自动化部署
本文章适合所有初学者阅读,我会从刚买来的一台服务器开始从零到部署项目当然怎么购买我就不多说了使用到的技术有springboot,docker,Redis的,MySQL和Nginx的操作环境MAC电脑首先通过终端连接服务器ssh root@ip地址这是一台全新的服务器废话不多说直接开始操作步骤了可以先设置一下服务器的安全,阅读我这篇文章https://...
本文章适合所有初学者阅读,我会从刚买来的一台服务器开始从零到部署项目当然怎么购买我就不多说了
使用到的技术有springboot,docker,Redis的,MySQL和Nginx的
操作环境MAC电脑
首先通过终端连接服务器
ssh root@ip地址
这是一台全新的服务器废话不多说直接开始操作步骤了
可以先设置一下服务器的安全,阅读我这篇文章
https://blog.csdn.net/jomexiaotao/article/details/83339445
安装docker
yum -y install docker
查看是否安装成功
docker -v
接着将docker后台启动
systemctl start docker.service
设置开机启动
systemctl enable docker
通过ps -ef | grep docker我们可以看到docker已经启动了
4,镜像加速
鉴于国内网络问题,后续拉取Docker镜像十分缓慢,我们可以需要配置加速器来解决,我使用的阿里的镜像
没什么好说的阿里都已经告诉你怎么使用了粘贴进去就好了然后重启
5,安装jdk,mysql,redis,nginx直接拉即可但是我们需要加载自己的配置所以我们先创建docker-config目录我存放的目录是
6,目录新建好了后,我们先把镜像拉下来我们先通过docker images查看当前镜像现在是一个都还没有
7,我这里使用的是jdk8,mysql:5.7.19。不是所有东西都是最新的才是最好的所以我这里选择了版本其他最新的没啥影响
docker pull java:8
docker pull mysql:5.7.19
docker pull redis
docker pull nginx
docker pull jenkins/jenkins
我们再输入docker images就可以看到拉下来的镜像了
8,我们通过docker ps -a查看当前运行的镜像现在是一个都还没有我们先把mysql跑起来
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.19
9,我们将容器里的配置文件都复制到服务器里面下面是代码ID是你的容器ID
docker cp ID:/etc/mysql/my.cnf /app/soft/docker-config/mysql/conf/
redis默认是没有配置的,需要我们手动新增我们先进入redis / conf目录添加redis.conf具体配置如下具体字段都有说明
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的域名
#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目录执行
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.7.19
启动Redis的
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的目录
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
docker run -d -u 0 -p 9090:8080 --name jenkins --restart=always \
-v /app/soft/docker-config/jenkins:/var/jenkins_home --name docker-jenkins jenkins/jenkins
我们需要把阿里的防火墙打开才能让外部访问
jenkins自动化部署 这个东西搞了我很久我还是没摸透 只能搞我会的方式了
访问http://ip:9090可以访问jenkins
进入这个地址获取密码 因为我这里是docker启动jenkins 所以容器里面做了挂载
如果你的没找到 那就进入jenkins容器里面去找 容器里面肯定会有的
选择默认安装
全都安装完毕我们进入jenkins
然后保存
系统管理 插件管理 安装ssh和maven
等它重启完毕
进入系统设置
可以点击下面的测试 看看是否链接成功
新建一个任务
保存构建看看 下面是build的脚本是网上抄下来的
#操作/项目路径(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
可以看到成功的部署了 如果有哪里跑不动 仔细看我的环境目录和你的环境目录结构或者百度查询错误是什么原因引起的
部署情况大概主要内容就这些了
解决MySQL 登录Access denied for user 'root'@'localhost' (using password: YES)
https://blog.csdn.net/cartoon_/article/details/80344637
更多推荐
所有评论(0)