之前在https://ryanc.cc/archives/halo-run里面讲了如何在服务器中部署Halo,但是那种方式略显麻烦,因为更新的时候必须下载更新包然后上传到服务器,再解压运行。这次我将介绍一种新的方式,这种方式是群里的一位大佬(@雨季不再来)告诉我的,非常方便就可以部署,更新的时候同样非常方便,也就是只要Github上面有更新,我们就可以直接在服务器上pull下来自己打包运行。

5月25号更新

现在最新的版本加入了自动构建脚本,以后只需要在Halo根目录执行sh deploy.sh就可以完成打包,运行。

8月16号更新

现在已经不需要手动配置Java和Maven环境了,直接一行命令完成安装(仅限centos)

# 安装Halo
yum install -y wget && wget http://static.ryanc.cc/halo-cli.sh && sh halo-cli.sh 1
# 更新Halo
sh halo-cli.sh 2

配置Java环境

因为这种方式必须使用Maven打包,所以必须安装Oracle JDK,亲测CentOS自带的Open JDK不可用,打包的时候会报错。所以我们必须先查看服务器是否自带有Open JDK,如果有,先卸载掉,然后安装Oracle JDK,具体操作如下(注意,我这里是使用的CentOS,其他Linux发行版可能不太一样)。

卸载Open JDK

首先,我们先查看服务器是否已经安装了Open JDK。

java -version

如果显示了JDK的版本号,则代表已经是自带了Open JDK的,我们需要先将其卸载掉。

[root@Ddhjas3ij4k]# rpm -qa|grep java
tzdata-java-2012j-1.el6.noarch
java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.i686
java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.i686

输入rpm -qa|grep java之后,可能会看到多个JDK版本,我们只需要依次将它们卸载就行了,如:

[root@Ddhjas3ij4k]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.i686

卸载完成之后再使用java -version查看一下还有没有输出版本号,如没有则卸载完成。

安装Oracle JDK

首先,我们需要去Oracle官网下载系统对应版本的JDK1.8以上,然后上传到服务器解压。

tar -xzvf jdk-xxx-linux-x64.tar.gz

然后我们把解压好的JDK移动到/usr/local/jvm(不限定)里面,如果没有这个目录,使用mkdir新建就行。

mv jdk1.8.0_xxx /usr/local/jvm

移动完成之后,只需要配置一下环境变量就可以使用了。

# 首先使用vim打开/etc下的profile
vim /etc/profile

# 然后将下面三行加到最后面,注意文件夹名,如果不熟悉vim的话,可以百度百度
export JAVA_HOME=/usr/local/jvm/jdk1.8.0_xxx
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

# 最后刷新一下profile
source /etc/profile

到这里Oracle JDK就安装完成了。

安装Maven

其实Maven的安装和安装JDK是一毛一样的,就是先下载maven,然后再配置环境变量就行了,和上面安装JDK的步骤是一样的。

同样的,首先我们先去maven官网下载最新的Maven 3.x版本,然后上传到服务器解压。

tar -xzvf apache-maven-3.5.3-bin.tar.gz

然后我们把解压好的Maven移动到/usr/local(不限定)里面。

mv apache-maven-3.5.3 /usr/local/maven3

然后配置环境变量。

# 使用vim打开/etc下的profile
vim /etc/profile

# 然后将下面两行行加到最后面,注意文件夹名。
export M2_HOME=/usr/local/maven3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

# 最后刷新一下profile
source /etc/profile

测试一下环境变量是否配置正确。

# 如果有显示maven的版本号,那么就安装完成了
mvn -v

最后为了打包的时候下载依赖更快,我建议将maven的默认镜像源改成阿里的maven镜像源。

# 首先我们进入maven的安装目录
cd /usr/local/maven3

# 然后进入conf目录
cd conf

# 使用vim打开settings.xml
vim settings.xml

# 将下面的xml复制到<mirrors></mirrors>节点下
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

安装Git

因为我们需要将Github上面的Halo源码拉下来进行打包,所以我们必须安装好Git,安装Git是非常简单的,只需要一行命令就可以搞定。

yum install git -y

克隆Halo源码到服务器

首先我们先创建一个文件夹用来存放Halo的源码,比如/www/wwwroot

mkdir /www/wwwroot

然后进入到/www/wwwroot下面,我们就可以克隆源码了。

cd /www/wwwroot
git clone https://github.com/ruibaby/halo

克隆完成之后,在/www/wwwroot/halo下面就是Halo的完整源代码了,我们就可以使用maven来进行打包,不过在打包之前,我们先修改一下配置文件/src/main/resources/application.yaml,同样我们使用vim打开即可配置,需要配置的地方在这里就不在赘述了,详情请看我之前发布的部署教程

修改完application.yaml之后,我们就可以回到halo根目录进行打包了。

# 后面的-Pprod一定要加上!后面的-Pprod一定要加上!后面的-Pprod一定要加上!
mvn package -Pprod

第一次打包的时候会下载一些依赖,请耐心等待,看到打包完成之后,我们就可以运行Halo啦!

# 进入生成目录下
cd target/dist/halo

# 运行halo
sh halo.sh start

好了,整个运行Halo的部分已经介绍完了,那么如果有更新怎么更新呢?这时候就需要用到git pull命令了。开发者将最新的代码同步到了Github之后,我们只需要进入Halo的源码目录执行git pull就可以拉取最新的代码了,然后再执行mvn package -Pprod就可以进行打包,最后我们只需要再进入到target/dist/halo生成目录下执行sh halo.sh restart就可以完成整个更新。简而言之,需要更新Halo就只需要下面几个步骤。

  1. 进入到Halo源码目录
  2. 使用git pull拉取最新的源码
  3. 执行mvn package -Pprod重新打包最新的Halo
  4. 进入到target/dist/halo执行sh halo.sh restart
  5. 执行sh deploy.sh
  6. Enjoy!

再也不需要先下载更新包,然后上传到服务器解压更新了,是不是略爽?而且你几乎可以用到最新的Halo,只要你愿意更新。

需要注意的地方

  1. 最好修改源码的application.yaml,因为只需要修改一次,以后更新的时候就不需要修改了,git pull的时候不会将application.yaml给覆盖掉。
  2. 不要学我手贱(习惯)执行mvn clean,不然你上传的附件和添加的主题就没了,当然数据库的东西还在。
  3. 重新打包之后,之前生成目录新增的东西并不会被删掉,如上传的附件和主题,所以并不需要担心更新之后东西没了。
  4. 这篇教程只讲了运行Halo的部分,绑定域名等操作请看Halo-博客部署教程