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

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

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 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖
  • Solo

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

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

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

相关帖子

欢迎来到这里!

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

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