在服务器部署 Halo 博客系统

一、在 Linux 服务器部署 Halo

1.环境配置

centos 7.0 x64

512MB内存及以上

2.服务器配置

2.1 更新软件包

请确保服务器的软件包已经是最新的。

yum update -y

2.2 安装 Java 运行环境

  • 若已经存在 Java 11 运行环境的可略过这一步,但路径要相同。

yum安装 openjdk11

yum install -y java-11-openjdk

安装位置默认为/usr/lib/jvm/,修改目录名

mv -v java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64 jdk11

修改配置文件

vim /etc/profile

将光标移动到最后,在后面添加

export JAVA_HOME=/usr/lib/jvm/jdk11
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

立即生效

source /etc/profile

检测是否安装成功

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 下载运行包

创建存放运行包的目录

mkdir ~/app && cd ~/app

下载运行包

wget https://dl.halo.run/release/halo-1.4.11.jar -O halo.jar

创建工作目录

mkdir ~/.halo && cd ~/.halo

下载示例配置文件到工作目录

wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml

3.2 运行 Halo

Halo 的整个应用程序只有一个 Jar 包,且不包含用户的任何配置,它放在任何目录都是可行的。需要注意的是,Halo 的整个额外文件全部存放在 ~/.halo 目录下,包括 application.yaml(用户配置文件)template/themes(主题目录)upload(附件上传目录)halo.db.mv(数据库文件)。一定要保证 ~/.halo 的存在,你博客的所有资料可都存在里面。所以你完全不需要担心安装包的安危,它仅仅是个服务而已。

启动测试

cd ~/app && java -jar halo.jar

如看到以下日志输出,则代表启动成功.

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!
  • 打开 http://ip:端口号 即可看到安装引导界面。

提示

以上的启动仅仅为测试 Halo 是否可以正常运行,如果我们关闭 ssh 连接,Halo 也将被关闭。要想一直处于运行状态,请继续看下面的教程。

3.3 进阶配置

上面我们已经完成了 Halo 的整个配置和安装过程,接下来我们对其进行更完善的配置,比如:需要开机自启?更简单的启动方式?

实现以上功能我们只需要新增一个配置文件即可,也就是使用 Systemd 来完成这些工作。

下载 Halo 官方的 halo.service 模板

curl -o /etc/systemd/system/halo.service --create-dirs https://dl.halo.run/config/halo.service

下载完成之后,我们还需要对其进行修改。

修改 halo.service

vim /etc/systemd/system/halo.service

打开之后我们需要进行修改以下三处

[Unit]
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target

[Service]
User=USER        #删去此行
Type=simple
ExecStart=/usr/lib/jvm/jdk11/bin/java -server -Xms128m -Xmx128m -jar /root/app/halo.jar     # 修改此行
ExecStop=/usr/lib/jvm/jdk11/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 安装包的绝对路径,例如 /root/app/halo.jar
  • USER:运行 Halo 的系统用户,如果有创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 User=USER

提示:

  1. 如果你不是按照上面的方法安装的 JDK,请确保 /usr/bin/java 的路径是正确无误的,类似/usr/lib/jvm/jdk11/bin/java
  2. systemd 中的所有路径均要写为绝对路径,另外,~ 在 systemd 中也是无法被识别的,所以你不能写成类似 ~/halo.jar 这种路径。

修改 service 文件之后需要刷新 Systemd

systemctl daemon-reload

运行服务

systemctl start halo

在系统启动时启动服务

systemctl enable halo

查看 Halo 的运行状态

service halo status

完成以上操作即可通过 IP:端口 访问了。不过在此之前,最好先完成后续操作,我们还需要让域名也可以访问到 Halo,请继续看配置域名访问

3.4 更新 Halo

备份数据

cp -r ~/.halo ~/.halo.bak

备份旧的安装包

mv halo.jar halo.jar.bak

下载最新的 Halo 安装包

wget https://dl.halo.run/release/halo-版本号.jar -O halo.jar

测试是否能够正常启动

java -jar halo.jar

重启应用

service halo restart

二、配置域名访问

1.使用 Nginx 进行反向代理

1.1 安装 Nginx

添加 Nginx 源

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装 Nginx

sudo yum install -y nginx

启动 Nginx

sudo systemctl start nginx.service

设置开机自启 Nginx

sudo systemctl enable nginx.service
  • 注:如果出现Nginx启动失败,并显示80端口占用,运行以下代码释放80端口
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 配置模板

curl -o /etc/nginx/conf.d/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf

下载完成之后,我们还需要对其进行修改

使用 vim 编辑 halo.conf

vim /etc/nginx/conf.d/halo.conf

打开之后我们可以进行修改

server {
    listen 80;
   
    #强制转发https
	rewrite ^(.*)$ https://${server_name}$1 permanent;
    server_name example.com;

    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://127.0.0.1:8090/;
    }
}
#开启ssl
server {
  listen 443 ssl;
  server_name example.com;
  client_max_body_size 1024m;
    #添加证书
  ssl_certificate "/home/cert/www/cert.pem";
  ssl_certificate_key "/home/cert/www/cert.key";
  
  ssl_session_timeout 10m;
  
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  
  ssl_ciphers HIGH:!aNULL:!MD5;
  
  # charset utf-8;
  
  location / {
    proxy_pass http://127.0.0.1:8090/;
    
    proxy_redirect     off;

    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

注意:请把 example.com 改为自己的域名。

pemkey证书上传至/home/cert/www/目录下

修改完成之后

检查配置是否有误

sudo nginx -t

重载 Nginx 配置

sudo nginx -s reload

到这里,关于 Nginx 的配置也就完成了,现在你可以访问一下自己的域名,并进行 Halo 的初始化了。

在设置了反向代理之后,请一定记得去 Halo 的管理端设置一下正确的博客地址,否则可能会造成资源获取不成功。

三、其他事项

申请SSL证书

在宝塔面板添加域名,申请ssl证书,选择DNS验证(支持通配符)选择DNS接口,申请证书

在DNS解析添加记录

类型: TXT 
域名: _acme-challenge.example.com
记录值: ZLuAPKLq5_****************XonwSHwivY

版权声明:本文为qq_54188791原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。