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 批量更新共 ...
随机推荐
- 借 redis cluster 集群,聊一聊集群中数据分布算法
Redis Cluster 集群中涉及到了数据分布问题,因为 redis cluster 是多 master 的结构,每个 master 都是可以提供存储服务的,这就会涉及到数据分布的问题,在新的 r ...
- Xcode编译引用Framework
需要两步配置 1.在xcode工程的search path下设置要引用的Framework所在路径 2.将Framewoek拖入工程中时 不要选择copy,而选择引用模式.
- dubbo服务治理框架
Dubbo的概述 1.1. Dubbo的背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. ...
- mybatis错题
第一题 解析: MyBatis的动态SQL中没有else元素,when元素的test属性中直接书写表达式即可,即test=”表达式”. 第二题 解析: resource属性和url属性是必须的属性,但 ...
- CodeForces985F -- Isomorphic Strings
F. Isomorphic Strings time limit per test 3 seconds memory limit per test 256 megabytes input standa ...
- Qt5教程: (9) Qt多线程
目录 0. 创建工程 1. QThread 源码一览 2. QThread相关方法介绍 2.1 启动线程 2.2 关闭线程 2.3 阻塞线程 2.4线程状态判断 2.5 设置优先级 2.6 信号 3. ...
- 【CSS】381- 提升你的CSS选择器技巧
我已经使用CSS多年了,但直到最近我才深入研究了一下CSS选择器. 我为什么要这样做呢?我们都知道选择器,但麻烦的是随着时间的推移,很容易习惯于在每个项目中使用相同的可信任选择器来实现你需要做的事情. ...
- API接口访问频次限制 / 网站恶意爬虫限制 / 网站恶意访问限制 方案
API接口访问频次限制 / 网站恶意爬虫限制 / 网站恶意访问限制 方案 采用多级拦截,后置拦截的方式体系化解决 1 分层拦截 1.1 第一层 商业web应用防火墙(WAF) 直接用商业服务 传统的F ...
- 从多谐振荡器详细解析到555定时器基本电路(控制LED闪烁)
在学期末,笔者参加了学校的电工实习,前六天做都很快,但是今天要做一个关于555多谐振荡器的LED闪烁电路,由于笔者没有提前准备,导致今天就算把电路搭建出来也不懂具体原理,耗费了不少时间,所以我打算专门 ...
- 【Java Web开发学习】Spring MVC整合WebSocket通信
Spring MVC整合WebSocket通信 目录 ========================================================================= ...