Halo 是一款现代化的个人独立博客系统,给习惯写博客的同学多一个选择。
Halo [ˈheɪloʊ],意为光环。当然,您也可以当成拼音读(哈喽)。
一个优秀的开源博客发布应用,值得一试。

前提

  • 具备一定的 Linux 基础。
  • 请先保证已经正确解析域名,以及确认服务器是否需要备案。
  • 请先确保 Halo 的运行端口已经打开。
  • 如果您使用了类似 宝塔面板 之类的 Linux 管理面板,可能还需要在面板里放行端口。

环境要求

  • Linux Server(本文用的是 CentOS 7.7)
  • 512 MB 以上内存(本文用的是 2GiB)
  • Nginx 或者 Caddy(本文用的是 Nginx)

部署 Halo 博客系统

参见 Halo 的官方部署文档:https://halo.run/archives/install-with-linux.html

官方部署文档写的很详细,您只需要在 SSH终端 复制粘贴命令即可完成部署,如需修改配置文件请下载 Halo 官方的公共配置文件进行修改。Halo 博客系统默认使用的是8090端口,请在安全组规则中放行8090端口(如已修改端口则放行自己修改的端口),由于接下来还要配置HTTPS,所以我们顺便放行443端口。
在这里插入图片描述
由于笔者使用的是 宝塔面板(自带防火墙),所以还需在 宝塔面板 上放行 8090 与 443 端口。
在这里插入图片描述
至此,访问您的 服务器ip:8090 应该可以看到Halo博客的安装页面了!
在这里插入图片描述

配置域名访问

  1. 假设您已经成功配置并运行好了 Halo,且不是使用 80 端口运行。
  2. 请确保域名已经成功解析到服务器 IP,并确认服务器是否需要备案。
  3. 请检查服务器的 80 和 443 端口是否开放。
  4. 如 3 所述,如果您使用了类似 宝塔面板 之类的 Linux 管理面板,可能还需要在面板里设置端口。
  5. 并不一定要求按照下列教程操作,这里仅仅以供参考。
  6. 如 2 所述,您需要做的仅仅是反向代理 Halo 运行端口,并配置 SSL 证书而已,所以并不要求配置方式。

使用 Nginx 进行反向代理

安装 Nginx

由于笔者之前安装了 宝塔面板 ,所以直接在 宝塔面板 安装 Nginx 。

当然您也可以使用其他方式安装。
在这里插入图片描述

配置 Nginx

由 Nginx 的默认配置文件(nginx.conf)可看到站点配置文件公共存放路径为 /www/server/panel/vhost/nginx/ 。
在这里插入图片描述

# 下载 Halo 官方的 Nginx 配置模板到上一步的 /www/server/panel/vhost/nginx/ 目录下。
# 当然您可以下载到其他目录,然后自己导入到 nginx.conf 里面。
curl -o /www/server/panel/vhost/nginx/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf

在这里插入图片描述
下载完成之后,我们还需要对其进行修改

# 使用 vim 编辑 halo.conf
vim /www/server/panel/vhost/nginx/halo.conf

打开之后我们可以看到

server {
    listen 80;

    server_name example.com www.example.com;

    client_max_body_size 1024m;

    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/;
    }
}

注意:请把server_name后的 example.comwww.example.com 处改为自己的域名。
在这里插入图片描述
修改完成之后

# 检查配置是否有误
sudo nginx -t

# 重载 Nginx 配置
sudo nginx -s reload

至此,您应该可以通过域名访问 Halo 博客了。
在这里插入图片描述
在这里插入图片描述

配置 HTTP 连接

Halo 官方文档演示的是使用 certbot 自动申请证书,笔者自己准备得有证书,所以下面将使用自己的证书进行配置。

如果您是阿里云或者其他云的服务器,基本上都可以申请到免费的一年HTTPS证书,到期了可以再次申请。

申请免费SSL证书的方式很多,请自行百度。

证书申请成功后请下载对应服务器类型的证书文件,本文使用的是 Nginx 服务器。
在这里插入图片描述
下载好后解压证书文件我们会看到里面有 .key 与 .pem 后缀的两个文件。
在这里插入图片描述
我们将其证书文件通过宝塔上传至服务器的目录下面,建议在 Nginx 的根目录里创建 cert 目录(当然您也可以上传到其他目录里),然后将其文件上传到 cert 里面。
在这里插入图片描述
当然,如果您没有使用宝塔面板的话可以使用其他 FTP 工具进行文件上传。

# 编辑从 Halo 官方下载的 Nginx 配置模板(注意文件存放路径)
sudo vim /www/server/panel/vhost/nginx/halo.conf
## 配置http转发到https

server {
    listen 80;

    # 将demo.uanin.com改为您自己的域名
    server_name demo.uanin.com;
    # 上传文件大小的限制
	client_max_body_size 1024m;
    # 将所有http请求通过rewrite重定向到https。
    rewrite ^(.*)$ https://$host$1 permanent;

}

## 配置demo.uanin.com的ssl
server {
    listen 443 ssl;

    # 将demo.uanin.com改为您自己的域名
    server_name demo.uanin.com;
    # 上传文件大小的限制
	client_max_body_size 1024m;
    # 将证书文件存放路径和证书的密钥文件名替换成自己存放路径与证书的密钥文件名。
    ssl_certificate /www/server/nginx/cert/3977015_demo.uanin.com.pem;
    ssl_certificate_key /www/server/nginx/cert/3977015_demo.uanin.com.key;

    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    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;

        # 下面8090是您配置Halo的端口号,笔者这里使用默认端口。
        proxy_pass http://127.0.0.1:8090/;
    }
}

修改完成之后

# 检查配置是否有误
sudo nginx -t

# 重载 Nginx 配置
sudo nginx -s reload

在这里插入图片描述

此时用域名访问网站就已经成功跳转 https 了,但您会发现 css 样式没加载出来。
在这里插入图片描述

遇到这种情况不要慌,这是因为您设置了反向代理之后,没有去 Halo 的管理端设置正确的博客地址,造成资源获取不成功。

解决方法:将博客地址改为带 https 即可。
在这里插入图片描述
注意:在设置了反向代理之后,请一定记得去 Halo 的管理端设置一下正确的博客地址,否则可能会造成资源获取不成功。

再次访问就正常显示了
在这里插入图片描述
在这里插入图片描述
教程到此结束!

Q.E.D.


Keep going, believe in yourself, and never give up.