Skip to content
solo 独立部署和tomcat部署自动检测更新
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.mvn/wrapper
src
.editorconfig
.gitignore
LICENSE
README.adoc
mvnw
mvnw.cmd
pom.xml
soloauto.iml

README.adoc

Solo-auto

vert.x 3.6.3 purple

solo 博客独立部署方式自动检测更新。

功能:自动检测版本,自动下载更新,自动解压,自动复制配置文件以及其他的文件。目前仅支持 linux 版本。

配置在线生成地址: solo-auto-ui

在这之前

  • 仅支持 linux 系统下的 独立部署tomcat 部署

  • 建议您先备份数据库以及配置文件,虽然不对数据库进行任何操作,但是定时备份是好习惯。

  • 为避免不必要的错误,请务必使用 root 用户运行。

  • 独立部署仅支持系统命令,不能使用别名定义的命令。

  • 独立部署请检查 pkill -9 -f org.b3log.solo.Starter 命令是否能够杀死你的 solo 进程。

更新记录/使用记录/我的配置

使用

获取最新版本的 release

配置

配置在线生成地址: solo-auto-ui

solo-auto-ui

注意,你的配置将会完全覆盖默认配置!

Table 1. config.json
属性名 类型 默认值 描述

latestUrl

String

https://api.github.com/repos/b3log/solo/releases/latest

最新版本 solo 的 github restful 接口地址

homeDir

String

/root/

解压后的文件夹路径,结尾必须有文件分隔符 /,当前版本以及新版本都会存放在此目录

deploy

String

solo

部署方式,可选 tomcat,其他值无效

tomcatDir

String

solo

tomcat 部署在 webapps 目录下的 solo 的文件名称

interval

Number

6

几小时检测一次版本更新

version

String

v3.2.0

当前已经部署的版本号,格式必须与 github 上相同

timeOut

Number

30

Event Bus 等待时间

otherFiles

Array

[]

其他的需要移动的文件名称

debug

Boolean

false

简单打印方法信息,方便排错

startCommand

Stirng

;nohup java -cp WEB-INF/lib/*:WEB-INF/classes org.b3log.solo.Starter >/dev/null 2>&1 &

启动命令,前面必须加英文符分号 ;

运行

请注意:建议以 root 身份运行,否则可能会出现权限问题无法执行命令的情况。

  • 前台运行,假设配置文件与 jar 包位于同一目录且名称为 solo-auto.json

java -jar soloauto-1.0.0-SNAPSHOT-fat.jar -conf solo-auto.json

  • 后台运行,假设配置文件与 jar 包位于同一目录且名称为 solo-auto.json

nohup java -jar soloauto-1.0.0-SNAPSHOT-fat.jar -conf solo-auto.json >/dev/null 2>&1 &

建议,先前台运行,检查控制台输出中的配置文件是否有配置错误,确认无误且不报错后,再后台运行。

独立部署注意事项

  1. 正在运行的 solo 的文件夹的目录名称必须类似为 solo-v3.1.0 形式。

  2. 建议以 root 方式运行。

tomcat 部署注意事项

  1. 请注意填写以下属性

属性 注意

homeDir

tomcatwebapps 目录

deploy

tomcat

tomcatDir

tomcatwebapps 下的部署 solo 的文件夹名称

其它

Q: 为什么会写这个?

A: 从 V2.8.0 开始用 solo,至今到了 V3.2.0,以前除了部署应用的时候上一下服务器,其他时候都用不上,hexo 这些博客基本很少更新。现在每次更新都要上去重复一边操作,实在太麻烦了。但是又特别喜欢 solo 这样活跃的博客与社区,所以遇到问题当然是想自己解决下问题。

Q: 为什么不用 docker

A: 服务器资源有限,除了 solo 还运行者其他的应用,运行 docker 就会有一些资源被占用,并且想自己 DIY 部分主题比较麻烦,每次都要进服务器,再进容器里面改,为了运行 solo 直接上 docker 觉得没必要。如果后面还有应用使用 docker 会换,或者 D 大说的会重写 Docker 镜像构建的时候可能会换。

Q: 为什么不用 tomcat

A: tomcat 跑着其它应用,没做负载均衡,并且担心访问速度,所以直接用 独立容器 + nginx 部署了。v1.1.0 版本已经可以使用tomcat

示例

独立部署

  • 运行在指定端口:请修改 startCommand, 前面一定要加分号 ;

{
  "startCommand":";nohup java -cp 'WEB-INF/lib/*:WEB-INF/classes' org.b3log.solo.Starter -lp 8765 >/dev/null 2>&1 &"
}
  • 如果你需要复制其它文件,可以采用这个配置:请修改 otherFiles

{
  "homeDir": "/root/",
  "version": "v3.2.0",
  "otherFiles": [
    "favicon.ico",
    "favicon.png",
    "background.jpg"
  ]
}

解释如下:

Table 2. config.json
属性名   解释

homeDir

/home/echocow/

解压后的文件夹路径,结尾必须有文件分隔符,当前版本以及新版本都会存放在此目录

version

v3.2.0

当前已经启动且部署好的 solo 版本

otherFiles

["favicon.ico", "favicon.png", "background.jpg"]

其它需要复制的文件,一旦填写,就会覆盖默认的,所以这里要加上默认的,然后多加了 background.jpg

  • 如果你不需要复制其它文件,可以采用这个配置

{
  "homeDir": "/home/echocow",
  "version": "v3.2.0"
}

解释如下:

Table 3. config.json
属性名   解释

homeDir

/home/echocow/

解压后的文件夹路径,结尾必须有文件分隔符,当前版本以及新版本都会存放在此目录,默认 /root/

version

v3.2.0

当前已经启动且部署好的 solo 版本

tomcat 部署

  • 假设我现在已经部署好了 solo,并且路径为 /home/echo/Other/apache-tomcat-9.0.16/webapps/solo,配置文件如下:

{
  "homeDir": "/home/echo/Other/apache-tomcat-9.0.16/webapps/",
  "deploy": "tomcat",
  "tomcatDir": "solo",
  "version": "v3.2.0",
  "otherFiles": [
    "favicon.ico",
    "favicon.png",
    "background.jpg"
  ]
}

其中 deploytomcatDir 必填

说明

使用 vertx 事件驱动,使用 Event Bus 点对点消息模式,MainVerticle 获取默认配置,再获取用户配置以覆盖默认配置。然后分别部署两个 Verticle

  • WebClientVerticle 定时检测版本

  • FileVerticle 处理文件下载、移动操作


独立部署

  1. WebClientVerticle 检测当前最新版是否与配置中的版本匹配,如果不匹配,携带请求的部分信息通知 FileVerticle

  2. FileVerticle 使用类名注册一个处理器以接受请求,收到通知以后,获取最新版本。

  3. 下载最新版本的 war 包,解压,然后移动用户自定义的文件(配置文件中 otherFiles)。

  4. 移动 solo 配置文件:local.propertieslatke.propertiessolo.properties.

  5. 复制完毕后,使用 pkill -9 -f org.b3log.solo.Starter 杀死以前的 solo 进程,

  6. 使用 cd 解压后的路径;nohup java -cp WEB-INF/lib/*:WEB-INF/classes org.b3log.solo.Starter >/dev/null 2>&1 & 命令启动 solo,后面的启动命令用户可以自定义,请注意:自定义启动命令前请务必加上分号!

  7. FileVerticle 执行完毕,回复 WebClientVerticleWebClientVerticle 收到回复日志记录。

tomcat

这个过程不会重启 tomcat。

  • 0-3 同上

  • 修改原来版本的 solo 的文件夹名称为 tomcatDir配置的名称+当前时间

  • 修改新下载的 solo 的文件夹名称为 tomcatDir 所配置的参数

  • FileVerticle 执行完毕,回复 WebClientVerticleWebClientVerticle 收到回复日志记录。

未来

  1. 目前没有写 windows 的打算。

  2. 打算加入邮件或者短信通知,以能够更好的感知博客更新变化。

  3. 考虑是否加入 web 页面,但是觉得没必要。

  4. 想过做成 solo 插件,但是文档太少,并且感觉局限性比较大且自己水平有限,所以放弃了。

构建

测试:

./mvnw clean test

打包

./mvnw clean package

运行

./mvnw clean exec:java
You can’t perform that action at this time.