本教程以 Linux CentOS 7.x 为例,配置部署并运行 Halo,其他 Linux 发行版大同小异。
写在前面
- 需要有一台服务器(可以去阿里云购买)。
- 具备一定的 Linux 基础。
环境要求
为了在使用过程中不出现意外的事故,给出以下推荐的服务器配置:
- CentOS 7.x
- 512 MB 以上内存
连接服务器
使用 SSH 方式连接到远程服务器,这里以阿里云服务器为例,如:
代码语言:javascript复制ssh root@39.106.37.193
提示如下信息,表示连接成功,同时我们可以用 ls -a
命令来查看服务器上的内容,如:
➜ ~ 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
更新软件包
请确保服务器的软件包已经是最新的。
代码语言:javascript复制sudo yum update -y
安装 Java 运行环境
代码语言:javascript复制# 安装 OpenJREsudo yum install java-1.8.0-openjdk -y # 检测是否安装成功java -version
当然,这只是其中一种比较简单的安装方式,你也可以用其他方式,并不是强制要求使用这种方式安装。
创建 Halo 用户
我们推荐创建一个低权限的用户运行 halo:
代码语言:javascript复制# 创建 halo 用户sudo useradd -m halo # 直接登录该用户sudo su halo
安装并运行 Halo
Halo 的整个应用程序只有一个 Jar 包,且不包含用户的任何配置,它放在任何目录都是可行的。需要注意的是,Halo 的整个额外文件全部存放在 ~/.halo
目录下,包括 application.yaml
(用户配置文件),template/themes
(主题目录),upload
(附件上传目录),halo.db.mv
(数据库文件)。一定要保证 ~/.halo
的存在,你博客的所有资料可都存在里面。所以你完全不需要担心安装包的安危,它仅仅是个服务而已。
# 安装 OpenJRE
sudo yum install java-1.8.0-openjdk -y
# 检测是否安装成功
java -version
如看到以下日志输出,则代表启动成功,如:
代码语言:javascript复制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 用户,进入一个拥有管理员权限的用户下:
代码语言:javascript复制# 查看当前登录用户
whoami
# 退出 halo 登录,进入一个有管理员权限的用户
su xxx 或者直接 exit
代码语言:javascript复制# 下载 Halo 官方的 halo.service 模板
sudo curl -o /etc/systemd/system/halo.service --create-dirs https://dl.halo.run/config/halo.service
下载完成之后,我们还需要对其进行修改。用 vim
命令打开 halo.service
文件,如:
# 修改 halo.service
sudo vim /etc/systemd/system/halo.service
打开之后,我们可以看到如下信息:
代码语言:javascript复制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
重新加载,如:
# 刷新 Systemd,重新加载 halo.service
sudo systemctl daemon-reload
# 使 Halo 开机自动启动
sudo systemctl enable halo
代码语言:javascript复制提示:Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。systemctl 命令是 Systemd 的主命令,用于管理系统。
# 启动 Halo
sudo service halo start
# 重启 Halo
sudo service halo restart
# 停止 Halo
sudo service halo stop
# 查看 Halo 的运行状态
sudo service halo status
完成以上操作后,即可通过 IP:端口
访问了。
更新 Halo
代码语言:javascript复制# 备份数据
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