连卷毛狒狒都能看懂的Halo博客搭建教程

2021.04.14 10:40

其实Halo的部署官方文档说的已经很详细了,强烈建议动手前通读一遍。这篇文章只是记录下自己的搭建过程,方便和我一样的小白参考,很多地方都引用自官方文档,就不一一说明了。

原材料

  1. 域名 * 1

注册个自己喜欢的就好,建议在国外域名商处注册。

  1. vps * 1:

以下为官方推荐配置:

CPU无特别要求;
RAM议至少配置 1G ;
磁盘无特别要求;
外网畅通,否则会导致页面异常。

综上,建议选购国外的VPS,1核1G以上即可。

  1. 熟练使用Command+C、Command+V的小手 * 2

开始部署

示例环境 DigitalOcean的VPS:2 vCPUs / 2 GB Memory / 50 GB Disk / Debian 10 x64
Porkbun的域名:mmoe.moe
关于VPS的基础设置可以参考 ,这里就不细说了,默认你已创建名为halo的账户并SSH登录。

安装依赖

安装Halo运行依赖OpenJRE:

sudo apt-get install openjdk-11-jre -y

检查版本:

java -version

如果输出以下类似内容即代表成功:

openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode)

查看OpenJRE装到哪了:

which java

记下输出结果,后面要用到。

建立存放Halo运行包的目录

运行包:指 Halo 构建所产生的 Jar 包,后缀为 .jar。可能与其他网站应用有所区别的是,Halo 仅仅只有这一个文件。而且所有数据统一保存在下面所说的工作目录。

mkdir ~/app && cd ~/app

运行后,即在/home/你的用户名下新建app文件夹并进入。

下载Halo运行包

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

运行后,即将Halo运行包下载到当前目录,截止写作日最新版本为1.4.8,可至官方GitHub查看下载最新Release

建立Halo工作目录

工作目录:指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 .halo 的文件夹,绝对路径为 ~/.halo。由于这个工作目录是固定的,所以上面所说的 运行包不限制所存放的位置,里面通常包含下列目录或文件:
db:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录。
templates/themes:里面包含用户所下载的主题。
static:相当于网站的根目录。
logs:运行日志目录。
upload:附件目录。
application.yaml:配置文件。

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

运行后,即在/home/你的用户名下新建.halo隐藏文件夹并进入。

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

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

编辑配置文件

nano application.yaml

具体说明可以参照官方文档。一般来说,需要改动的地方只有usernamepassword,即H2数据库的用户名和密码,默认为admin123456
修改完成后,按Control+X退出编辑,输入Y确认后保存。

测试运行

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:端口号,IP为你VPS的公网IP,端口号为application.yaml文件里设置的端口号,默认为8090
即可看到安装引导界面。

如测试启动正常,请继续看作为服务运行部分,这一步骤仅仅作为测试。当你关闭 ssh 连接之后,服务会停止。你可使用 CTRL+C 停止运行测试进程。
如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 http://ip:端口号 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。

作为服务运行

切换为root账户

su root

输入密码后即切换为root用户。

下载 Halo 官方的halo.service模板

wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service

运行后即将官方halo.service模板下载至/etc/systemd/system目录。

修改halo.service

nano /etc/systemd/system/halo.service

YOUR_JAR_PATH:Halo 运行包的绝对路径,例如/home/halo/app/halo.jar,注意:此路径不支持 ~ 符号。
/usr/bin/java:OpenJRE的安装目录,如何上文which java的输出结果不一致,改为输出结果。
USER:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 User=USER

重新加载systemd

systemctl daemon-reload

运行服务

systemctl start halo

如果浏览器访问http://ip:端口号出现了设置网页,说明安装成功了。

在系统启动时启动服务

systemctl enable halo

以下命令可以查看服务日志检查启动状态:

journalctl -n 20 -u halo

反向代理

反向代理是官方文档里说的不太清楚的部分,所以详细讲讲怎么操作。

申请SSL证书

因为我用的Porkbun每个域名都会自动帮你申请SSL证书,所以就先挖个坑,以后再填(大概

安装Nginx

sudo apt install nginx

启动Nginx并设置开机自启

sudo systemctl start nginx.service
sudo systemctl enable nginx.service
sudo systemctl status nginx.service

上传SSL证书(可跳过)

从Porkbun下载SSL证书,通过SFTP上传至VPS的~/cert文件夹。

修改Nginx配置文件

nano /etc/nginx/nginx.conf

感谢Takagi提供的模版,我的配置文件为:

worker_processes 2;
events {
    worker_connections 1024;
}
http {
    include mime.types;
    sendfile on;
    keepalive_timeout 65;
    gzip on;
 server {
   listen 443 ssl;
   server_name mmoe.moe www.mmoe.moe;
   client_max_body_size 1024m;
   ssl_certificate "/home/richard/cert/domain.cert.pem";
   ssl_certificate_key "/home/richard/cert/private.key.pem";
   ssl_session_timeout 10m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers HIGH:!aNULL:!MD5;
   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;
   }
 }
 server {
   listen 80;
   server_name mmoe.moe www.mmoe.moe;
   return 301 https://$server_name$request_uri;
 }
}

检查配置文件是否有错误:

nginx -t -c /etc/nginx/nginx.conf

如果输出类似以下,则说明无错误:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

最后重载配置文件:

nginx -s reload

结语

对于个人博客来说,Halo不论是安装、配置还是使用都是非常非常简单的,我这样的小白对着文档一顿复制粘贴抖能很快搞定。其实如果使用宝塔面板等第三方工具会方便很多,奈何强迫症实在难以接受任何多余的东西。

Comments
Write a Comment