solo升级以及自动化更新的方法
使用solo过程总涉及到更新问题,所以就在这里把solo更新的方法总结一下。希望能给小伙伴们一些帮助。如何选择更新方法主要是跟你的部署方式有关,如果你是通过 docker
方式进行部署,那么你可以还可以通过docker
方式来进行更新,这也是官方比较推荐的部署方式。如果是通过jar
包或者war
包来进行部署,那么更新时同样需要通过该方式来进行。好了闲话少叙进入正题。
使用docker更新
第一步: 获取最新镜像:
docker pull b3log/solo:latest
执行结果如下:
如果有新版本,该命令会自动拉取新镜像,也就是会上边下载的界面。自动更新镜像。
如果当前版本已是最新则会出现下边情况,此时也就不用更新。
第二步: 删除原来的容器
第一步虽然获取了最新的镜像,但是我们当前部署的容器却是旧的,需要我们删除之后重新进行部署。
执行docker ps
查看当前容器的运行情况
此处我部署的solo的容器名称是www_solo
,所以你在下边删除容器时要更改成自己的solo容器名称
docker stop www_solo
docker rm www_solo
执行结果如下:
第三步: 重新部署solo容器
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--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=localhost
--env JDBC_PASSWORD="123456"
: 需要将123456
更改成自己的mysql密码--server_host=localhost
: 需要将localhost
更改成自己的域名
执行结果如下:
至此solo更新完成
通过jar包或者war包更新
此种方式一般都是通过源码来进行部署的,需要重新导入新的solo源码,配置相关信息,然后重新导出。具体的方法可以参考官方给的文档,此处不再详说。
通过脚本定期更新
首先,官方给了一个脚本用于更新或者重启,内容如下:
#!/bin/bash
#
# Solo docker 更新重启脚本
#
# 1. 请注意修改参数
# 2. 可将该脚本加入 crontab,每日凌晨运行来实现自动更新
#
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="123456" \
--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=localhost
上述脚本说实话用于重启容器可以,但是用于定期更新脚本稍微有点不足,因为定期更新的脚本正常应该检查当前部署的版本是否是最新版本,如果不是才更新。而上边的脚本每次执行都会重新部署,显得开销优点大。下边我们对该脚本进行优化,使其更加合理。
因为docker没有命令直接来获取当前下载的镜像是否是最新版本,但是当我们通过pull
一个镜像时我们会发现:如果当前本地镜像是最新镜像那么docker就不会从云端下载镜像,运行之后会出现如下结果:
如果当前镜像不是新的会出现如下运行结果:
因此我们可以借助grep
,来实现一个更新脚本``
#!/bin/bash
#
# Solo docker 更新脚本
#
# 1. 请注意修改参数
# 2. 可将该脚本加入 crontab,每日凌晨运行来实现自动更新
#
isUpdate=$(docker pull b3log/solo|grep "Downloaded")
#如果有新版本或者没有安装才会进行更新
if [[ -z $isUpdate ]]
then
echo This is the latest version
else
docker stop solo
docker rm solo
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--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=localhost
fi
使用方法:
sudo ./docker-update.sh
如果是最新版会出现如下运行结果:
如果不是最新版会执行容器删除重启等命令,出现如下运行结果:
关于这一点我也想官方发起了Pull request
希望组织能接受吧。
当然如果希望一劳永逸的解决该问题,我们可以通过crontab
实现定时更新
首先将docker-update.sh
文件放到root
目录(当然其他目录)也可以下:
其次执行crontab -e
进入编辑界面添加如下内容(每天早上1点整执行更新任务):
0 1 * * * bash /root/docker-update.sh
通过crontab -l
查看例行任务是否添加成功。
整个过程的执行结果如下图所示:
后记
当然可能个人水平有限,中间难免会出现一些错误,如若发现恳请指出,不胜赐教。如果大家有更好的更新方法或者上边有任何疑问都欢迎大家在留言区提出,谢谢!
solo升级以及自动化更新的方法的更多相关文章
- npm升级所有可更新包
使用npm管理node的包,可以使用npm update <name>对单个包升级,对于npm的版本大于 2.6.1,可以使用命令: npm install -g 升级全局的本地包. 对于 ...
- iOS 15 Beta升级卡死在更新进程,无法启动怎么办?
2021苹果全球开发者大会结束后,大批果粉迫不及待的尝试升级iOS 15测试版本,想第一时间体验新功能. 但是许多用户反馈升级一直卡死在"准备更新"."验证更新" ...
- 书写 sql 中关于 update 多表联合更新的方法
SQL Update多表联合更新的方法(1) sqlite 多表更新方法//----------------------------------update t1 set col1=t2.col1fr ...
- 170823、SQL Update多表联合更新的方法
SQL Update多表联合更新的方法 (1) sqlite 多表更新方法 update t1 set col1=t2.col1 from table1 t1 inner join table2 t2 ...
- win10禁止更新的方法
Windows10强制更新苦恼了很多人,下面提供三种禁止Windows10更新的方法. 禁止Windows update服务 启动任务管理器->选择服务->打开服务. 找到Windows ...
- win10卸载更新+关闭自动更新的方法
卸载更新方法: 左下角->设置->更新和安全->windows更新->高级选项->查看更新历史记录->卸载更新 关闭自动更新的方法:win+r 输入service ...
- 【02】sass更新的方法
[02]更新的方法 gem install sass **
- SQL Update多表联合更新的方法
SQL Update多表联合更新的方法 (1) sqlite 多表更新方法 update t1 set col1=t2.col1 from table1 t1 inner join table2 t2 ...
- MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.
mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...
随机推荐
- vue 各种打包坑
1,报错 Refused to load the image 'http://localhost:8080/favicon.ico' because it violates the following ...
- 使用 RMI 实现方法的远程调用
RMI 介绍 RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此 ...
- 微信小程序 buton清除默认样式
相信很多小伙伴在开发小程序的时候都会碰到小程序Button默认样式的困扰,在重设样式的时候需要一次次的设置 分享一个自己在开发中的小方法: CSS all 简写属性 将除 unicode-bidi 与 ...
- MyBatis系列(四) MyBatis 增删改
前言 通过前几张的博文已经知道MyBatis是如何查询数据库中的数据,现在来介绍增(insert)删(delete)改(update) 增加 接口绑定文件定义一个增加方法,方法的返回值为long,在M ...
- Django 09
目录 多对多三种创建方式 全自动 纯手撸 半自动(推荐) form组件 校验数据 渲染标签 展示错误信息 validators校验器 钩子函数 补充 多对多三种创建方式 全自动 ManyToManyF ...
- Unity5优秀插件分享
转载请标明原文地址:http://www.cnblogs.com/zhangyukof/p/6836001.html 天空盒:1.SkyboxesUnity4中自带的天空盒,经常用到.不知道为什么U ...
- 一个简单的示例在spring boot中实现国际化
最近在网上找了一个有关账单管理的spring boot项目,其中有一部分是涉及显示国际化信息的,即将页面上的中英文进行转换.因为在这之前这部分内容没有接触过,所以在这记录下过程. 中文效果图如下所示: ...
- 两个div,都设置未inline-block,可是在IE出现错位问题
[实现要求] 红色的和黄色的内容撑开,蓝色包住红黄,不定框居中显示 [遇到问题] chrome显示正常,但是在IE上红黄框会出现错位的问题 [如何解决] 给红色框添加一个overflow:hidde ...
- Python基础-day01-7
程序执行原理(科普) 目标 计算机中的 三大件 程序执行的原理 程序的作用 01. 计算机中的三大件 计算机中包含有较多的硬件,但是一个程序要运行,有 三个 核心的硬件,分别是: CPU 中央处理器, ...
- Python之利用Whoosh搭建轻量级搜索
本文将简单介绍Python中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码. Whoosh简介 Whoosh由Matt Chaput创建,它一开始是一个为Houdini 3D动画软 ...