本教程以 Linux CentOS 7.x 为例,配置部署并运行 Halo,其他 Linux 发行版大同小异。
## 写在前面
1. 需要有一台服务器(可以去阿里云购买)。
2. 具备一定的 Linux 基础。
## 环境要求
为了在使用过程中不出现意外的事故,给出以下推荐的服务器配置:
- CentOS 7.x
- 512 MB 以上内存
## 连接服务器
使用 SSH 方式连接到远程服务器,这里以阿里云服务器为例,如:
```java
ssh root@39.106.37.193
```
提示如下信息,表示连接成功,同时我们可以用 `ls -a` 命令来查看服务器上的内容,如:
```java
➜ ~ ssh root@39.106.37.193
root@39.106.37.193's password:
Last login: Mon Aug 3 16:44:09 2020 from 27.18.213.222
Welcome to Alibaba Cloud Elastic Compute Service !
[root@pengzhenjin ~]# ls -a
. .bash_history .bash_profile .cache .cshrc .pip .pydistutils.cfg .tcshrc
.. .bash_logout .bashrc .config .halo .pki .ssh .viminfo
```
## 更新软件包
请确保服务器的软件包已经是最新的。
```java
sudo yum update -y
```
## 安装 Java 运行环境
```java
# 安装 OpenJRE
sudo yum install java-1.8.0-openjdk -y
# 检测是否安装成功
java -version
```
当然,这只是其中一种比较简单的安装方式,你也可以用其他方式,并不是强制要求使用这种方式安装。
## 创建 Halo 用户
我们推荐创建一个低权限的用户运行 halo:
```java
# 创建 halo 用户
sudo useradd -m halo
# 直接登录该用户
sudo su halo
```
## 安装并运行 Halo
Halo 的整个应用程序只有一个 Jar 包,且不包含用户的任何配置,它放在任何目录都是可行的。需要注意的是,Halo 的整个额外文件全部存放在 `~/.halo` 目录下,包括 `application.yaml`(用户配置文件),`template/themes`(主题目录),`upload`(附件上传目录),`halo.db.mv`(数据库文件)。一定要保证 `~/.halo` 的存在,你博客的所有资料可都存在里面。所以你完全不需要担心安装包的安危,它仅仅是个服务而已。
```java
# 下载最新的 Halo 安装包,{{version}} 为版本号,不带 v,更多下载地址请访问 https://halo.run/archives/download.html
wget https://dl.halo.run/release/halo-{{version}}.jar -O halo-latest.jar
# 启动测试
java -jar halo-latest.jar
```
如看到以下日志输出,则代表启动成功,如:
```java
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully!
```
> 提示:
>
> 以上的启动仅仅为测试 Halo 是否可以正常运行,如果我们关闭 ssh 连接,Halo 也将被关闭。要想一直处于运行状态,请继续看下面的教程。
## 进阶配置
上面我们已经完成了 Halo 的整个配置和安装过程,接下来我们对其进行更完善的配置,比如:`需要开机自启?`,`更简单的启动方式?`
实现以上功能我们只需要新增一个配置文件即可,也就是使用 `Systemd` 来完成这些工作。
如果当前用户为 halo 用户,则需要退出 halo 用户,进入一个拥有管理员权限的用户下:
```java
# 查看当前登录用户
whoami
# 退出 halo 登录,进入一个有管理员权限的用户
su xxx 或者直接 exit
```
```java
# 下载 Halo 官方的 halo.service 模板
sudo curl -o /etc/systemd/system/halo.service --create-dirs https://dl.halo.run/config/halo.service
```
下载完成之后,我们还需要对其进行修改。用 `vim` 命令打开 `halo.service` 文件,如:
```java
# 修改 halo.service
sudo vim /etc/systemd/system/halo.service
```
打开之后,我们可以看到如下信息:
```java
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar YOUR_JAR_PATH
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target
```
参数说明:
- -Xms256m:为 JVM 启动时分配的内存,请按照服务器的内存做适当调整,512 M 内存的服务器推荐设置为 128,1G 内存的服务器推荐设置为 256,默认为 256。
- -Xmx256m:为 JVM 运行过程中分配的最大内存,配置同上。
- YOUR_JAR_PATH:Halo 安装包的绝对路径,例如:`/home/halo/halo-latest.jar`。
## 管理服务(即:halo.service)
修改完 `halo.service` 文件之后,需要刷新 Systemd,让 `halo.service` 重新加载,如:
```java
# 刷新 Systemd,重新加载 halo.service
sudo systemctl daemon-reload
# 使 Halo 开机自动启动
sudo systemctl enable halo
```
> 提示:
> Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
> systemctl 命令是 Systemd 的主命令,用于管理系统。
```java
# 启动 Halo
sudo service halo start
# 重启 Halo
sudo service halo restart
# 停止 Halo
sudo service halo stop
# 查看 Halo 的运行状态
sudo service halo status
```
完成以上操作后,即可通过 `IP:端口` 访问了。
## 更新 Halo
```java
# 备份数据
cp -r ~/.halo ~/.halo.bak
# 备份旧的安装包
mv halo-latest.jar halo-latest.jar.bak
# 下载最新的 Halo 安装包,{{version}} 为版本号,不带 v,更多下载地址请访问 https://halo.run/archives/download.html
wget https://dl.halo.run/release/halo-{{version}}.jar -O halo-latest.jar
# 测试是否能够正常启动
java -jar halo-latest.jar
# 重启应用
service halo restart
```

博客搭建(二):服务器搭建及部署