部署 docker-solo 博客每日自动升级

Published on with 0 views and 0 comments

docker-solo 自动升级脚本-最终

记得给脚本添加可执行权限: chmod +x solo.sh

  • 特性:
  1. 检测 solo 版本是否有新版本;
  2. 可自动删除更新后的 solo、Lute 镜像包;
  3. 自动检测 solo 是否安装部署成功,不成功则再次 pull 镜像
  4. 检测 lute-http 是否正常运行
  5. 修复有 Lute 更新包更新后时往往因为 solo 进程占用 Lute 进程,原镜像无法删除
#!/bin/bash
# Solo docker 升级脚本&删除旧的镜像脚本
# Author:cuijianzhe
[ -f /etc/init.d/functions ] && . /etc/init.d/functions

start_time=`date +'%Y-%m-%d %H:%M:%S'`
solo(){
    echo "-----------------solo upgrading------------------------------"
    docker pull b3log/solo
    docker stop solo
    docker run --detach --name solo --network=host \
    --env RUNTIME_DB="MYSQL" \
    --env JDBC_USERNAME="solo" \
    --env JDBC_PASSWORD="b3blogsolo" \
    --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
    --env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
    --rm \
    b3log/solo --listen_port=8080 --server_scheme=https --lute_http=http://127.0.0.1:8249  --server_host=www.cjzshilong.cn --server_port=
  
}
#--------------------------删除无用镜像image包--------------------------#
del(){
    num=`docker images |grep none |wc -l`
    echo "当前存在无用镜像包$num 个."
    for ((i=1;i<=$num;i++))
    do  
        images=`docker images |grep none | awk '{print $3}'`
        docker rmi $images
	if [[ $? == 0 ]];
           then
               echo -e "------------------$end_time 删除镜像id:$images 成功-----------------------"
	   else
               echo -e "-----------------$end_time 删除镜像id:$images 失败 -----------------------"
        fi
    done
}

#---------------------------lute安装脚本--------------------------------
lute(){
    docker pull b3log/lute-http
    docker stop solo
    docker stop lute-http
    docker rm lute-http
    docker run --detach --name lute-http  --network=host b3log/lute-http
}

solo_time(){
    end_time=`date +'%Y-%m-%d %H:%M:%S'`
    start_seconds=$(date --date="$start_time" +%s);
    end_seconds=$(date --date="$end_time" +%s);
    echo "脚本运行所用时间为:"$((end_seconds-start_seconds))"s"
    echo "开始时间为: $start_time ,结束时间为:$end_time"
    echo " "

}
#----------------------------判断solo是否有新版本-------------------------------------

upgrade_solo(){
    isUpgrad=$(docker pull b3log/solo|grep "Downloaded")
    if [[ -z  $isUpgrad ]] 
    then 
        echo $start_time :Detection solo version is the latest version
    else
        solo
    fi
}
#---------------------------判断lute是否有新版本----------------------------------
upgrade_lute(){
    isUpgrad=$(docker pull b3log/lute-http|grep "Downloaded")
    if [[ -z  $isUpgrad ]]
    then
        echo $start_time :Detection lute version is the latest version
    else
        lute
    fi
}
#---------------------判断docker镜像是否正常运行---------------------------
Server_test(){
    server=`docker ps | grep b3log/solo`
    if [ -z "$server" ]; then  #如果查询结果为空,则停留5秒继续pull镜像
        sleep 5
        echo '----------docker-solo状态异常,重新安装------------'
        solo
    fi
    lute_http=` docker ps  | grep lute-http`
    if [ -z "$lute_http" ]; then
       sleep 3
       lute
    fi
}

main(){
    upgrade_lute
    upgrade_solo
    Server_test
    solo_time
    del
}
main
#--------------------------------------------------------------------------
  • 定时任务:
00 03 * * * /shell/solo.sh >>/var/log/solo.log

1.1 版本

特性:自动升级 solo 博客版本,打印升级所用时间,是否报错等信息
定于每周三的早上 5 点准时升级 solo,有那么一段时间发现 pull 一个 solo 镜像用了好长时间,打算打印一下时间计算下 pull 一个镜像到底又做猛?

#!/bin/bash
#
# Solo docker 升级并且重启脚本
# 参考solo指南 https://hacpai.com/article/1492881378588
#
echo "-----------------升级前------------------------------------"
start_time=`date +'%Y-%m-%d %H:%M:%S'`
docker pull b3log/solo
docker stop solo
docker rm solo
docker run --detach --name solo --network=host \
    --env RUNTIME_DB="MYSQL" \
    --env JDBC_USERNAME="root" \
    --env JDBC_PASSWORD="xxxxxxxxxxx" \
    --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
    --env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
    b3log/solo --listen_port=8080 --server_scheme=http  --server_host=www.cjzshilong.cn

if [[ $? == 0 ]];
   then
        echo -e ""$start_time 拉取镜像完成并且安装成功!!!""
   else
        echo -e "solo docker 升级有报错,请检查!!!  " 

fi
end_time=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$start_time" +%s);
end_seconds=$(date --date="$end_time" +%s);
echo "升级所用时间为:"$((end_seconds-start_seconds))"s"
echo "开始时间为: $start_time ,结束时间为:$end_time"

echo "----------------升级完毕!!!!-----------------------------"

下次升级看下打印的日志,安排一下啊,大哥,不想本地测试了!下周三的

1.2 版本

新增特性:自动删除下载的 docker images,因为每次升级,原有的 images 不会删除,升级后自动删除特性增加

#!/bin/bash  
  
#  
# Solo docker 升级脚本&删除旧的镜像脚本  
#  
echo "-----------------------------------------------------------"  
echo "-----------------升级前------------------------------------"  
start_time=`date +'%Y-%m-%d %H:%M:%S'`  
docker pull b3log/solo  
docker stop solo  
docker rm solo  
docker run --detach --name solo --network=host \  
 --env RUNTIME_DB="MYSQL" \  
 --env JDBC_USERNAME="solo" \  
 --env JDBC_PASSWORD="b3blogsolo" \  
 --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \  
 --env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \  
 --volume /dockerdata/solo/skins/:/opt/solo/skins/ \  
 --rm \  
 b3log/solo --listen_port=8080 --server_scheme=https --lute_http=  --server_host=www.cjzshilong.cn --server_port=  
if [[ $? == 0 ]];  
 then  
 echo -e ""$start_time 拉取镜像完成并且安装成功!!!""  
 else  
 echo -e "solo docker 升级有报错,请检查!!!  "   
  
fi  
end_time=`date +'%Y-%m-%d %H:%M:%S'`  
start_seconds=$(date --date="$start_time" +%s);  
end_seconds=$(date --date="$end_time" +%s);  
echo "升级所用时间为:"$((end_seconds-start_seconds))"s"  
echo "开始时间为: $start_time ,结束时间为:$end_time"  
  
echo "----------------升级完毕!!!!-----------------------------"  
echo "                                                             "  
  
#安装lute_http  
#docker pull b3log/lute-http  
# docker run --detach --name lute-http  --rm --network=host b3log/lute-http  
  
sleep 5  
#删除docker镜像脚本:  
echo -e "##############################尝试删除旧镜像,如下############################################"  
docker images  
num=`docker images |grep b3log/solo|wc -l`  
#echo $num  
  
if [ "$num" -gt 1 ]; then  
 images=`docker images |grep b3log/solo | awk 'NR==2{print $3}'`  
 echo $images  
 docker rmi $images  
 docker images  
 echo -e "#############################$end_time 删除镜像id:$images ####################################"  
  
else  
 echo -e "####################$end_time 没有旧的镜像可删除 ####################################"  
fi  
echo -e "

标题:部署 docker-solo 博客每日自动升级
作者:cuijianzhe
地址:https://cuijianzhe.github.io/articles/2019/04/10/1554909820806.html