使用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升级以及自动化更新的方法的更多相关文章

  1. npm升级所有可更新包

    使用npm管理node的包,可以使用npm update <name>对单个包升级,对于npm的版本大于 2.6.1,可以使用命令: npm install -g 升级全局的本地包. 对于 ...

  2. iOS 15 Beta升级卡死在更新进程,无法启动怎么办?

    2021苹果全球开发者大会结束后,大批果粉迫不及待的尝试升级iOS 15测试版本,想第一时间体验新功能. 但是许多用户反馈升级一直卡死在"准备更新"."验证更新" ...

  3. 书写 sql 中关于 update 多表联合更新的方法

    SQL Update多表联合更新的方法(1) sqlite 多表更新方法//----------------------------------update t1 set col1=t2.col1fr ...

  4. 170823、SQL Update多表联合更新的方法

    SQL Update多表联合更新的方法 (1) sqlite 多表更新方法 update t1 set col1=t2.col1 from table1 t1 inner join table2 t2 ...

  5. win10禁止更新的方法

    Windows10强制更新苦恼了很多人,下面提供三种禁止Windows10更新的方法. 禁止Windows update服务 启动任务管理器->选择服务->打开服务. 找到Windows ...

  6. win10卸载更新+关闭自动更新的方法

    卸载更新方法:  左下角->设置->更新和安全->windows更新->高级选项->查看更新历史记录->卸载更新 关闭自动更新的方法:win+r 输入service ...

  7. 【02】sass更新的方法

    [02]更新的方法   gem install sass         **

  8. SQL Update多表联合更新的方法

    SQL Update多表联合更新的方法 (1) sqlite 多表更新方法 update t1 set col1=t2.col1 from table1 t1 inner join table2 t2 ...

  9. MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.

    mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...

随机推荐

  1. Spring Security OAuth2 Demo —— 隐式授权模式(Implicit)

    本文可以转载,但请注明出处https://www.cnblogs.com/hellxz/p/oauth2_impilit_pattern.html 写在前面 在文章OAuth 2.0 概念及授权流程梳 ...

  2. 本土化App名稱和icon

    本土化app名稱這個容易 第一步配置工程需要本土化的語言. 第二步,新建本土化文件,文件名稱是有要求的,文件名字命名为InfoPlist,且必须是这个名字.這樣系統會自動去讀取該文件中的內容 對新建的 ...

  3. react-native android/ios 手动/自动 修改版本号

    目录 一 手动操作 1.Android 2.IOS 二 自动从配置文件读取并写入相应的地方 1.package.json配置版本 2.Android: 3.IOS 添加sell代码 当版本迭代时候要修 ...

  4. Table表格滑过当前项[当前行][当前列]对应高亮

    效果演示图: JS 代码如下: function TableHover($table){       $table.mouseenter(function(event) {            va ...

  5. 【JS】327- javascript 的 api 设计原则

    点击上方"前端自习课"关注,学习起来~ 前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博 ...

  6. 【Web技术】286- 自定义错误及扩展错误

    英文:Ilya Kantor  译文:LeviDing https://zh.javascript.info/custom-errors 当我们在进行开发的时候,通常需要属于我们自己的错误类来反映任务 ...

  7. 【eclipse】Editor does not contain a main type

    问题现象: eclipse运行java程序的时候弹出对话框:Editor does not contain a main type. 解决方法: 右击 src路径 → Build Path → Use ...

  8. 2.成产出现 max(vachar2)取值问题

    uat 测试结果正确max(9)>max(8),结果生产出现 max(9)>max(12) 原因:字符类型,默认比较第一个字符的ASCII码. 解决方式: max(to_number(va ...

  9. 【Html JS】使用问题记录

    [Html JS]使用问题记录 ================================================================ 1.td 文字换行 2.正则表达式 = ...

  10. 【Java Web开发学习】Spring配置数据源

    Spring配置数据源 转载:https://www.cnblogs.com/yangchongxing/p/10027495.html =============================== ...