一、在 Linux 服务器部署 Halo
1.环境配置
centos 7.0 x64
512MB内存及以上
2.服务器配置
2.1 更新软件包
请确保服务器的软件包已经是最新的。
1 | yum update -y |
2.2 安装 Java 运行环境
- 若已经存在 Java 11 运行环境的可略过这一步,但路径要相同。
yum安装 openjdk11
1 | yum install -y java-11-openjdk |
安装位置默认为 /usr/lib/jvm/
,修改目录名
1 | mv -v java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64 jdk11 |
修改配置文件
1 | vim /etc/profile |
将光标移动到最后,在后面添加
1 | export JAVA_HOME=/usr/lib/jvm/jdk11 |
立即生效
1 | source /etc/profile |
检测是否安装成功
1 | java -version |
openjdk version “11.0.12” 2021-07-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7-LTS, mixed mode, sharing)
3.安装 Halo
3.1 下载运行包
创建存放运行包的目录
1 | mkdir ~/app && cd ~/app |
下载运行包
1 | wget https://dl.halo.run/release/halo-1.4.11.jar -O halo.jar |
创建工作目录
1 | mkdir ~/.halo && cd ~/.halo |
下载示例配置文件到工作目录
1 | wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml |
3.2 修改配置文件
完成上一步操作,我们就可以自己配置 Halo
的运行端口,以及数据库相关的配置了。
使用 Vim 工具修改配置文件
1 | vim ~/.halo/application.yaml |
打开之后我们可以看到
1 | server: |
- 如果需要自定义端口,修改
server
节点下的port
即可。 - 默认使用的是
H2 Database
数据库,这是一种嵌入式的数据库,使用起来非常方便。需要注意的是,默认的用户名和密码为admin
和123456
,这个是自定义的,最好将其修改,并妥善保存。 - 如果需要使用
MySQL
数据库,需要将H2 Database
的所有相关配置都注释掉,并取消MySQL
的相关配置。另外,MySQL
的默认数据库名为halodb
,请自行配置MySQL
并创建数据库,以及修改配置文件中的用户名和密码。 h2
节点为H2 Database
的控制台配置,默认是关闭的,如需使用请将h2.console.settings.web-allow-others
和h2.console.enabled
设置为true
。控制台地址即为域名/h2-console
。注意:非紧急情况,不建议开启该配置。server.compression.enabled
为Gzip
功能配置,如有需要请设置为true
,需要注意的是,如果你使用Nginx
或者Caddy
进行反向代理的话,默认是有开启Gzip
的,所以这里可以保持默认。halo.admin-path
为后台管理的根路径,默认为admin
,如果你害怕别人猜出来默认的admin
(就算猜出来,对方什么都做不了),请自行设置。仅支持一级,且前后不带/
。halo.cache
为系统缓存形式的配置,可选memory
和level
,默认为memory
,将数据缓存到内存,使用该方式的话,重启应用会导致缓存清空。如果选择level
,则会将数据缓存到磁盘,重启不会清空缓存。如不知道如何选择,建议默认。
注意
使用 MySQL 之前,必须要先新建一个 halodb
数据库,MySQL 版本需 5.7 以上。
1 | create database halodb character set utf8mb4 collate utf8mb4_bin; |
3.3 运行 Halo
Halo 的整个应用程序只有一个 Jar 包,且不包含用户的任何配置,它放在任何目录都是可行的。需要注意的是,Halo 的整个额外文件全部存放在 ~/.halo
目录下,包括 application.yaml(用户配置文件)
,template/themes(主题目录)
,upload(附件上传目录)
,halo.db.mv(数据库文件)
。一定要保证 ~/.halo
的存在,你博客的所有资料可都存在里面。所以你完全不需要担心安装包的安危,它仅仅是个服务而已。
启动测试
1 | cd ~/app && java -jar halo.jar |
如看到以下日志输出,则代表启动成功.
1 | run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090 |
- 打开
http://ip:端口号
即可看到安装引导界面。
提示
以上的启动仅仅为测试 Halo 是否可以正常运行,如果我们关闭 ssh 连接,Halo 也将被关闭。要想一直处于运行状态,请继续看下面的教程。
3.4 进阶配置
上面我们已经完成了 Halo 的整个配置和安装过程,接下来我们对其进行更完善的配置,比如:需要开机自启?
,更简单的启动方式?
实现以上功能我们只需要新增一个配置文件即可,也就是使用 Systemd
来完成这些工作。
下载 Halo 官方的 halo.service 模板
1 | curl -o /etc/systemd/system/halo.service --create-dirs https://dl.halo.run/config/halo.service |
下载完成之后,我们还需要对其进行修改。
修改 halo.service
1 | vim /etc/systemd/system/halo.service |
打开之后我们需要进行修改以下三处
1 | [Unit] |
参数:
- -Xms256m:为 JVM 启动时分配的内存,请按照服务器的内存做适当调整,512 M 内存的服务器推荐设置为 128,1G 内存的服务器推荐设置为 256,默认为 256。
- -Xmx256m:为 JVM 运行过程中分配的最大内存,配置同上。
- YOUR_JAR_PATH:Halo 安装包的绝对路径,例如
/root/app/halo.jar
。 - USER:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除
User=USER
。
提示:
- 如果你不是按照上面的方法安装的 JDK,请确保
/usr/bin/java
的路径是正确无误的,类似/usr/lib/jvm/jdk11/bin/java
。 - systemd 中的所有路径均要写为绝对路径,另外,
~
在 systemd 中也是无法被识别的,所以你不能写成类似~/halo.jar
这种路径。 - 如何检验是否修改正确:把 ExecStart 中的命令拿出来执行一遍。
修改 service 文件之后需要刷新 Systemd
1 | systemctl daemon-reload |
运行服务
1 | systemctl start halo |
在系统启动时启动服务
1 | systemctl enable halo |
查看 Halo 的运行状态
1 | service halo status |
完成以上操作即可通过 IP:端口
访问了。不过在此之前,最好先完成后续操作,我们还需要让域名也可以访问到 Halo,请继续看配置域名访问。
3.5 更新 Halo
备份数据
1 | cp -r ~/.halo ~/.halo.bak |
备份旧的安装包
1 | mv halo.jar halo.jar.bak |
下载最新的 Halo 安装包
1 | wget https://dl.halo.run/release/halo-版本号.jar -O halo.jar |
测试是否能够正常启动
1 | java -jar halo.jar |
重启应用
1 | service halo restart |
二、配置域名访问
1.使用 Nginx 进行反向代理
1.1 安装 Nginx
添加 Nginx 源
1 | sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm |
安装 Nginx
1 | sudo yum install -y nginx |
启动 Nginx
1 | sudo systemctl start nginx.service |
设置开机自启 Nginx
1 | sudo systemctl enable nginx.service |
- 注:如果出现Nginx启动失败,并显示80端口占用,运行以下代码释放80端口
1 | CMD=`lsof -i:"80" | awk '{print $1}' | grep -v "COMMAND" | sort -u` && systemctl disable ${CMD} && systemctl stop ${CMD} && killall -9 ${CMD} |
1.2 配置 Nginx
下载 Halo 官方的 Nginx 配置模板
1 | curl -o /etc/nginx/conf.d/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf |
下载完成之后,我们还需要对其进行修改
使用 vim 编辑 halo.conf
1 | vim /etc/nginx/conf.d/halo.conf |
打开之后我们可以看到
1 | server { |
注意:请把
example.com
改为自己的域名。
pem
、key
证书上传至/home/cert/www/
目录下
修改完成之后
检查配置是否有误
1 | sudo nginx -t |
重载 Nginx 配置
1 | sudo nginx -s reload |
到这里,关于 Nginx 的配置也就完成了,现在你可以访问一下自己的域名,并进行 Halo 的初始化了。
在设置了反向代理之后,请一定记得去 Halo 的管理端设置一下正确的博客地址,否则可能会造成资源获取不成功。
三、其他事项
申请SSL证书
在宝塔面板添加域名,申请ssl证书,选择DNS验证(支持通配符)
选择DNS接口,申请证书
在DNS解析添加记录
1 | 类型: TXT |