RHEL 9中Hexo使用笔记

RHEL 9中安装Hexo

我的Hexo博客是运行在RHEL 9系统中,以下操作都是针对RHEL 9系统记录。文中路径使用了/var/www/html以举例说明,请自行更新该路径参数。

安装Node.js

Hexo需要使用Node.js,所以安装前需要预先安装这两个软件:

1
2
3
# RHEL 9
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo dnf install -y nodejs

安装Hexo:

1
sudo npm install -g hexo-cli

安装git(选装)

1
sudo dnf install git -y

初始化博客文件夹

选择一个目标文件夹,这里以/var/www/html为例

1
2
cd /var/www/html
hexo init blog #这将在当前路径下创立一个新的文件夹(/var/www/html/blog)

执行完init命令后,Hexo会在当前路径下创立一个新的文件夹(/var/www/html/blog)并添加如下文件或文件夹到此文件夹中

1
2
$ ls blog
_config.landscape.yml _config.yml node_modules package.json package-lock.json scaffolds source themes

_config.yml是博客的主配置文件,需要修改里面的url:

1
url: http://192.168.1.2  #换成你自己的domain

修改完后,就可以执行genrate命令来生成静态文件了:

1
2
cd blog  #此文件夹就会作为当前blog的根文件夹,所有资源都在此文件夹内
hexo g # 这将在当前路径下创建1个新的public文件夹(/var/www/html/blog/public)

到此为止,一个最简单的blog就创建完毕了,之后就可以设置Apache或者Nginx使它可以访问了。

配置Nginx指向public文件夹

1
2
3
4
5
6
7
8
9
10
11
12
sudo nano /etc/nginx/conf.d/your_blog.conf
# 添加如下最小server模块
server {
listen 80;
server_name your_blog_domain;

location / {
root /var/www/html/blog/public;
index index.html;
return $uri $uri/ =404;
}
}

配置tag和category

每篇文章里都可以在它的Front matter区域添加tags和categories属性来标识这篇文章。我使用的Fluid主题里已经包含了tags和categories页面,所以不需要额外手动创建这两个页面。每次使用hexo g命令生成网站内容时,Hexo会自动更新这两个页面内容。对于别的主题,如果没有包含这两个页面,则需要手动创建,进行如下操作:

1
hexo new page tags

在生成的md文件里,修改下面的部分, 添加type: “tags”到内容中,添加后是这样的:

1
2
3
4
5
---
title: 标签
date: ...
type: "tags"
---

类似操作,添加categories页面:

1
hexo new page categories

在生成的md文件里,修改下面的部分, 添加type: “categories”到内容中,添加后是这样的:

1
2
3
4
5
---
title: 分类
date: ...
type: "categories"
---

RHEL 9设置public文件夹访问权限设置以解决403/404错误

RHEL 9正在运行的SELinux默认会阻止web服务器(如Nginx)从非标准目录(如/home/user/)提供内容,所以仅仅更改上面blog的public文件夹的读写权限是不够的。还需要确保SELinux策略允许web服务器访问这些文件。如果不这样做,即使文件权限正确,web服务器也可能由于SELinux策略而无法访问这些文件,导致错误,如404 Not Found。

1
2
3
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html/blog/public(/.*)?"

sudo restorecon -Rv /var/www/html/blog/public

这两条命令的详细解释放在文末。第一次使用时需要运行上述两条命令,之后每次执行完hexo g之后只需运行第2条命令即可。

安装Fluid主题

默认的landscape主题很简单,网上搜索试用了一下,发现这个Fluid主题开发比较完备,界面美观,文档也比较全,因此我决定使用Fluid主题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd /var/www/html/blog/

# 从github下载该主题并保存到themes路径下的fluid文件夹,--depth=1 只拉取最近1次commit
git clone https://github.com/fluid-dev/hexo-theme-fluid.git themes/fluid --depth=1

# 复制fluid主题里的模版文件到根目录并重命名
cp themes/fluid/_config.yml _config.fluid.yml

# 将fluid主题里的模版文件改名,不再使用它,所有配置都将通过修改上面的_config.fluid.yml文件实现
mv themes/fluid/_config.yml themes/fluid/_config.yml.old

# 修改根目录下的_config.yml以启用fluid 主题
nano /var/www/html/blog/_config.yml
# 修改下面这行,theme安装后默认是landscape
theme: fluid

# 保存,退出
hexo clean
hexo g # g = generate

定制Fluid主题

Fluid主题的定制将在另一篇博文定制Fluid主题里详细展开。

RHEL 9设置public文件夹访问权限设置以解决403/404错误

RHEL 9正在运行的SELinux默认会阻止web服务器(如Nginx)从非标准目录(如/home/user/)提供内容,所以仅仅更改上面blog的public文件夹的读写权限是不够的。还需要确保SELinux策略允许web服务器访问这些文件。如果不这样做,即使文件权限正确,web服务器也可能由于SELinux策略而无法访问这些文件,导致错误,如404 Not Found。

1
2
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html/blog/public(/.*)?"
sudo restorecon -Rv /var/www/html/blog/public

这里稍加解释上面第1条命令:

  • semanage: 这是SELinux策略管理工具的一部分,用于管理SELinux的配置。
  • fcontext: 这代表 “file context”,即文件上下文。这个选项告诉 semanage 您要管理的是文件或目录的安全上下文。
  • -a: 这个选项代表“添加”(add)。正在添加一个新的规则。
  • -t httpd_sys_content_t: 这里指定了要应用的SELinux类型。httpd_sys_content_t 是一个特定类型,允许web服务器(如Nginx)读取内容。这是确保Nginx可以正常访问并提供这些文件的关键部分。
  • “/var/www/html/blog/public(/.*)?”: 这是应用新上下文的文件或目录的路径。括号和问号构成了一个正则表达式,这意味着规则将应用于 /var/www/html/blog/public 目录及其下的所有文件和子目录。

第2条命令是用于修复或重置文件和目录的 SELinux 安全上下文的。这个命令非常有用,尤其是在更改了文件系统结构或复制了文件到新位置时,这时文件的SELinux上下文可能不再正确。以下是该命令各部分的详细解释:

  • restorecon: 这是一个SELinux工具,用于根据SELinux策略恢复或应用正确的安全上下文到文件和目录。它主要依据 /etc/selinux/targeted/contexts/files/file_contexts 中的规则来操作。

  • -R: 这个选项告诉 restorecon 递归地处理指定目录下的所有文件和子目录。没有这个选项,restorecon 仅作用于单个文件或目录。

  • -v: 这个“冗余”选项使命令输出更详细的信息,显示哪些文件的上下文被更改了。如果没有使用 -v 选项,restorecon 将静默执行,不显示任何输出。

  • /var/www/html/blog/public: 这是目标路径,restorecon 将会应用于此路径及其下所有文件和目录的正确的SELinux上下文。需根据实际情况替换成相应的路径。

这个命令通常在以下情况下使用:

  • 复制或移动文件:当你复制或移动文件到一个新位置时,这些文件保留了原来的SELinux上下文标签,这可能会导致访问控制问题。使用 restorecon 可以确保这些文件获得新位置所需的正确SELinux上下文。
  • 更改系统策略:当系统的SELinux策略发生更改时,可能需要更新系统文件的上下文以匹配新策略。
  • 解决SELinux引起的问题:如果你遇到由于SELinux上下文不正确导致的权限问题,比如服务无法读取配置文件,restorecon 可以用来尝试快速修复这些问题。

注意

  • 在执行 restorecon 命令前,确保你了解目标文件或目录的正确SELinux上下文。错误的SELinux策略可能导致系统服务无法正常工作。
  • 如果你不确定执行该命令的后果,可以先使用 -n 选项进行模拟运行。这个选项会显示哪些更改会被应用,但不实际执行它们:
    1
    restorecon -Rvn /var/www/html/blog/public

RHEL 9中Hexo使用笔记
https://pub.zangchuantao.com/20240325/RHEL9_Hexo_notes.html
作者
Chuantao
发布于
2024年3月25日
许可协议