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

本贴最后更新于 1709 天前,其中的信息可能已经天翻地覆

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 "
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    943 引用 • 943 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1434 引用 • 10054 回帖 • 490 关注
2 操作
cuijianzhe 在 2019-10-12 17:24:35 更新了该帖
cuijianzhe 在 2019-10-12 13:36:11 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • xcchen

    谢谢你的代码,学到了许多东西

  • 其他回帖
  • 😍 you are so beautiful. 👌

  • someone
    作者

    代码再美,不如人之美

  • xcchen

    感谢楼主的代码,log 上面也很详细。Linux 命令不是很熟,脚本写完后也没测试,搞了几天发现没成功。今天突然想要测试一下,才发现需要给 solo.sh 配置可执行权限,无语。给和我一样的新手提醒下加个命令---chmod +x solo.sh

    1 回复
  • 查看全部回帖