Rocky Linux 9.7 + Nginx + Hexo 博客全栈搭建指南:从服务器初始化到上线运维
Rocky Linux 9.7 + Nginx + Hexo 博客全栈搭建指南:从服务器初始化到上线运维
一、核心组件介绍:
我们搭建的博客系统由三大核心组件构成,它们分工明确、协同工作,共同保障博客的稳定运行与优质体验:
1. Rocky Linux 9.7
Rocky Linux 是一款开源的企业级 Linux 发行版,由社区主导开发,旨在兼容 CentOS 生态。选择它作为服务器系统,核心优势有三点:一是稳定性极强,基于 RHEL 9 源码编译,经过严格测试,适合长期运行的服务器场景;二是安全性可靠,官方会提供长期的安全更新与补丁支持;三是生态完善,兼容绝大多数 Linux 软件与工具,运维成本低。本次选用 Minimal 最小安装版本,能最大程度减少系统冗余,提升服务器性能。
2. Node.js 18.x (LTS)
Hexo 是基于 Node.js 开发的静态博客框架,因此 Node.js 是整个博客系统的「运行引擎」。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,支持异步 I/O,处理高并发请求的能力出色。我们选择 18.x LTS 长期支持版本,既保证了功能的完整性,又具备稳定的运行表现,能为 Hexo 提供可靠的运行基础,同时 npm(Node.js 自带的包管理工具)还能方便我们安装和管理 Hexo 及相关插件。
3. Hexo 6.x
Hexo 是一款轻量级的静态博客生成框架,也是本次教程的核心。它的核心优势在于「静态生成」——通过 Markdown 文档生成纯 HTML/CSS/JS 静态文件,无需数据库支持。这带来两个关键好处:一是访问速度极快,静态文件直接由 Web 服务器响应,无需动态解析;二是安全性极高,没有数据库交互,减少了注入攻击等安全风险。此外,Hexo 还支持丰富的主题与插件,定制化能力强,且命令行操作简洁高效,非常适合技术人员使用。
4. Nginx 1.20+
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是目前最流行的 Web 服务器之一。我们用它来托管 Hexo 生成的静态文件,核心作用有两个:一是高效分发静态资源,Nginx 对静态文件的处理能力远超传统 Web 服务器,能以极低的资源占用实现高并发访问;二是提供访问控制,通过配置 Nginx 可以实现端口监听、域名绑定、缓存优化、日志记录等功能,还能有效拦截非法请求,保障博客安全。
5. Git
Git 是一款分布式版本控制系统,在我们的博客系统中主要用于两个场景:一是下载和更新 Hexo 主题(多数主题通过 Git 仓库托管);二是实现博客的版本管理与自动部署(可将博客源码同步到 GitHub/Gitee,后续通过命令一键部署)。Git 的分布式特性让我们可以灵活管理博客内容,避免数据丢失。
了解完各组件的作用,接下来我们就进入实操环节,从服务器初始化开始,一步步搭建完整的博客系统。
二、前置准备:明确环境与前提
在开始操作前,确保你已满足以下前置条件:
- 拥有一台 Rocky Linux 9.7 (x86_64) Minimal 版本的服务器(云服务器或本地虚拟机均可);
- 服务器具备公网 IP(若仅内网访问,需确保本地设备与服务器在同一内网);
- 拥有服务器的 root 权限,能执行 sudo 命令;
- 服务器已连接网络,能正常访问外网(用于下载软件与依赖)。
三、实操部署:从初始化到上线全流程
(一)服务器系统初始化与优化(基础保障)
刚安装好的 Minimal 版本服务器,需要先进行一系列优化配置,解决源速度慢、依赖缺失、权限拦截等问题,为后续部署铺路。
1.1 网络与 YUM 源优化(国内环境必做)
Rocky Linux 9 默认使用官方国外源,国内访问速度极慢,甚至可能下载失败。我们需要将其替换为阿里云镜像源,提升软件下载速度。
# 1. 创建备份目录,防止配置出错可回滚
sudo mkdir -p /etc/yum.repos.d/backup
sudo cp /etc/yum.repos.d/rocky*.repo /etc/yum.repos.d/backup/
# 2. 批量替换镜像源(核心命令,一键替换)
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g'
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g'
-i.bak
/etc/yum.repos.d/rocky*.repo
# 3. 清理旧缓存并重建元数据
sudo dnf clean all
sudo dnf makecache -y
# 4. 验证源是否生效(可选,查看是否有阿里云镜像地址)
grep -r "aliyun" /etc/yum.repos.d/rocky*.repo
1.2 安装基础依赖与运维工具
Minimal 版本缺少很多常用工具,我们需要安装编译环境、编辑器、网络工具等,为后续操作做准备。
# 1. 安装开发工具组(包含 gcc、make 等编译工具)
sudo dnf groupinstall -y "Development Tools"
# 2. 安装常用运维工具
sudo dnf install -y vim wget curl git net-tools bash-completion tree lsof
# 3. 验证安装(可选)
vim --version # 查看 vim 版本
git --version # 查看 git 版本
1.3 防火墙与 SELinux 配置(关键安全项)
防火墙和 SELinux 可能会拦截博客访问端口(如 80 端口)或 Nginx 对文件的访问权限,需要根据场景进行配置。
1.3.1 防火墙(firewalld)配置
云服务器优先选择方案 A(仅开放必要端口),本地测试可选择方案 B(临时关闭):
# 方案 A:云服务器(推荐)- 仅开放 80/22 端口(80 用于博客访问,22 用于 SSH 登录)
sudo systemctl enable firewalld --now # 启动并设置开机自启
sudo firewall-cmd --permanent --add-port=80/tcp # 开放 80 端口
sudo firewall-cmd --permanent --add-port=22/tcp # 开放 22 端口
sudo firewall-cmd --reload # 重载规则
sudo firewall-cmd --list-ports # 验证端口是否开放(应显示 80/tcp、22/tcp)
# 方案 B:本地/内网测试 - 临时关闭防火墙(测试完成后建议开启)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
1.3.2 SELinux 配置(避免权限拦截)
SELinux 是 Linux 的安全增强机制,新手操作时容易因权限问题导致服务异常,建议临时关闭(生产环境可后续精细配置):
# 临时关闭 SELinux(重启后失效)
sudo setenforce 0
# 永久关闭 SELinux(修改配置文件,需重启生效)
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 验证状态(输出 Permissive 或 Disabled 即为成功)
getenforce
四、运行环境安装:Node.js + Git 部署
Hexo 依赖 Node.js 运行,Git 用于主题下载与版本管理,这一步我们完成这两个工具的安装与配置。
2.1 安装 Node.js 18.x LTS(稳定版)
使用 NodeSource 官方仓库安装,确保版本稳定且适配 Hexo:
# 1. 导入 NodeSource GPG 密钥(验证仓库合法性)
curl -fsSL https://rpm.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/pki/rpm-gpg/RPM-GPG-KEY-nodesource
# 2. 添加 Node.js 18.x 仓库
echo "deb [signed-by=/etc/pki/rpm-gpg/RPM-GPG-KEY-nodesource] https://rpm.nodesource.com/pub_18.x/nodistro/ nodistro main" | sudo tee /etc/yum.repos.d/nodesource.repo
# 3. 安装 Node.js 和 npm(npm 随 Node.js 自带)
sudo dnf install -y nodejs
# 4. 验证安装(输出对应版本号即为成功)
node -v # 预期输出:v18.xx.x
npm -v # 预期输出:9.xx.x
2.2 配置 npm 国内镜像(加速下载)
默认 npm 源在国外,下载插件速度慢,甚至可能失败,替换为淘宝镜像(npmmirror):
# 1. 设置 npm 镜像源
npm config set registry https://registry.npmmirror.com
# 2. 验证配置(输出镜像地址即为成功)
npm config get registry # 预期输出:https://registry.npmmirror.com/
# 3. 可选:配置 npm 全局安装目录(避免权限问题)
mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
2.3 Git 配置(用户信息 + SSH 密钥)
Git 已通过基础工具安装,需配置全局用户信息(用于版本提交)和 SSH 密钥(用于免密访问 GitHub/Gitee 等平台):
# 1. 配置全局用户信息(替换为你的姓名和邮箱)
git config --global user.name "YourBlogName"
git config --global user.email "your-blog-email@example.com"
# 2. 验证配置
git config --list # 应显示 user.name 和 user.email 配置
# 3. 生成 SSH 密钥(用于免密访问 GitHub/Gitee,部署博客时用)
ssh-keygen -t rsa -b 4096 -C "your-blog-email@example.com"
# 执行后按 3 次回车:默认路径(~/.ssh/id_rsa)、无密码(服务器自动部署无需密码)
# 4. 查看公钥(后续需复制到 GitHub/Gitee 的 SSH Keys 中)
cat ~/.ssh/id_rsa.pub
# 输出示例:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... your-blog-email@example.com
五、Hexo 博客系统部署与初始化
运行环境就绪后,我们开始部署 Hexo 核心博客系统。
3.1 全局安装 Hexo CLI 工具
Hexo CLI 是 Hexo 的命令行工具,用于创建、管理博客项目:
# 全局安装 Hexo CLI(使用淘宝镜像加速)
sudo npm install -g hexo-cli
# 验证安装
hexo -v # 预期输出:hexo-cli: 4.3.0+,node: 18.xx.x
3.2 初始化 Hexo 博客项目
创建独立的博客目录,初始化项目并安装依赖:
# 1. 创建博客根目录(建议放在 /home 下,权限易管理)
mkdir -p /home/blog
cd /home/blog
# 2. 初始化 Hexo 项目(自动创建目录结构和默认文件)
hexo init
# 3. 安装项目依赖(初始化后必须执行)
npm install
# 4. 查看项目目录结构(验证初始化结果)
tree -L 2 /home/blog
# 预期输出包含:_config.yml、node_modules、source、themes、public 等目录
3.3 本地测试 Hexo 服务
启动 Hexo 内置服务器,验证博客是否能正常运行:
# 1. 生成静态文件(hexo generate 缩写)
hexo g
# 2. 启动本地服务(hexo server 缩写,默认端口 4000)
hexo s
# 此时终端会显示:INFO Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.
# 3. 测试访问(服务器本地验证)
curl http://localhost:4000
# 若输出 HTML 内容,说明服务正常;按 Ctrl+C 停止服务
六、Nginx 配置与生产环境部署
Hexo 内置服务器仅用于测试,生产环境需用 Nginx 托管静态文件,提升性能和稳定性。
4.1 安装并启动 Nginx
# 1. 安装 Nginx(Rocky Linux 9 官方源已包含)
sudo dnf install -y nginx
# 2. 设置开机自启并启动 Nginx
sudo systemctl enable nginx --now
# 3. 验证 Nginx 状态(输出 active (running) 即为成功)
sudo systemctl status nginx
# 4. 测试 Nginx 默认页面(访问服务器 IP,应显示 Nginx 欢迎页)
curl http://<你的服务器IP>
4.2 编写 Nginx 博客专属配置文件
创建独立的配置文件(避免修改默认配置),指向 Hexo 生成的静态文件目录:
# 1. 创建并编辑博客配置文件
sudo vim /etc/nginx/conf.d/blog.conf
将以下内容完整复制到配置文件中(注释已详细说明,替换 <你的服务器IP/域名> 为实际信息):
# Hexo 博客 Nginx 配置
server {
# 监听 80 端口(HTTP 协议)
listen 80;
listen [::]:80;
# 服务器名称:替换为你的域名(如 blog.example.com)或服务器公网 IP
server_name <你的服务器IP/域名>;
# 核心:Hexo 生成的静态文件目录(必须与实际路径一致)
root /home/blog/public;
# 默认首页文件
index index.html index.htm;
# 日志配置:便于排查问题
access_log /var/log/nginx/blog_access.log main;
error_log /var/log/nginx/blog_error.log warn;
# 主请求处理逻辑
location / {
# 尝试访问文件 → 目录 → 404(Hexo 静态博客核心规则)
try_files $uri $uri/ =404;
# 禁用缓存(开发阶段),生产阶段可注释
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
# 静态资源缓存优化(提升访问速度)
location ~* .(jpg|jpeg|png|gif|ico|svg|css|js|woff|woff2|ttf|eot)$ {
expires 365d; # 缓存 1 年
add_header Cache-Control "public, max-age=31536000, immutable";
add_header Access-Control-Allow-Origin *; # 允许跨域(可选)
}
# 禁止访问隐藏文件(如 .git、.htaccess)
location ~ /. {
deny all;
access_log off;
log_not_found off;
}
# 404 页面配置(可选,需先在 public 目录创建 404.html)
error_page 404 /404.html;
location = /404.html {
root /home/blog/public;
internal;
}
}
4.3 配置验证与权限调整
# 1. 验证 Nginx 配置语法(关键步骤,避免配置错误导致服务无法启动)
sudo nginx -t
# 预期输出:nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
# 2. 调整 Hexo 目录权限(Nginx 运行用户为 nginx,需赋予读取权限)
sudo chown -R root:nginx /home/blog
sudo chmod -R 755 /home/blog/public
# 3. 重启 Nginx 使配置生效
sudo systemctl restart nginx
# 4. 验证博客访问(浏览器访问服务器 IP,或服务器本地 curl)
curl http://<你的服务器IP>
# 预期输出 Hexo 默认博客页面的 HTML 内容
七、Hexo 深度定制与日常管理
博客上线后,我们需要学习如何定制博客样式、发布文章,以及日常维护。
5.1 核心配置文件修改(_config.yml)
/home/blog/_config.yml 是 Hexo 的核心配置文件,决定博客的基础信息,修改后需重新生成静态文件:
# 编辑配置文件
vim /home/blog/_config.yml
关键配置项修改示例(替换为你的信息):
# 站点信息
title: 我的技术博客 # 博客标题
subtitle: 专注技术分享与学习 # 副标题
description: 记录学习点滴 # 博客描述(SEO 用)
author: 张三 # 作者名
language: zh-CN # 语言(中文)
timezone: Asia/Shanghai # 时区(上海)
# URL 配置(核心,影响链接生成)
url: http://你的服务器IP # 博客公网地址
root: / # 根目录
permalink: :year/:month/:day/:title/ # 文章链接格式
permalink_defaults:
lang: zh-CN
# 主题配置(后续安装主题后修改)
theme: next # 默认是 landscape,安装 Next 主题后改为 next
# 部署配置(可选,部署到 GitHub/Gitee Pages 时用)
deploy:
type: git
repo: git@github.com:你的用户名/你的用户名.github.io.git
branch: main
5.2 安装并配置 NexT 主题(主流主题)
NexT 是 Hexo 最流行的主题,功能丰富、易定制:
# 1. 进入 themes 目录
cd /home/blog/themes
# 2. 克隆 NexT 主题(Gitee 镜像,速度更快)
git clone https://gitee.com/mirrors/hexo-theme-next.git next
# 3. 复制主题默认配置文件(便于定制,不修改原文件)
cp /home/blog/themes/next/_config.yml /home/blog/_config.next.yml
# 4. 启用主题(修改根目录 _config.yml)
sed -i 's/^theme: landscape/theme: next/' /home/blog/_config.yml
# 5. 重新生成静态文件并重启 Nginx(使主题生效)
cd /home/blog
hexo clean && hexo g
sudo systemctl reload nginx
5.3 日常写作与发布流程(核心操作)
5.3.1 创建新文章
# 进入博客根目录
cd /home/blog
# 创建新文章(标题为「Hexo 部署教程」,自动生成 markdown 文件)
hexo new "Hexo 部署教程"
# 新文章路径:/home/blog/source/_posts/Hexo-部署教程.md
# 编辑文章(使用 vim 或其他编辑器)
vim /home/blog/source/_posts/Hexo-部署教程.md
文章 markdown 模板示例:
---
title: Hexo 部署教程
date: 2026-01-07 10:00:00
tags:
- Hexo
- Nginx
- Rocky Linux
categories:
- 技术教程
---
# Hexo 部署教程
这是我的第一篇 Hexo 博客文章,记录 Rocky Linux 9 部署 Hexo 的过程。
## 一、环境准备
1. 安装 Node.js
2. 安装 Git
...
5.3.2 预览与发布
# 1. 本地预览(启动 Hexo 内置服务,端口 4000)
hexo clean && hexo g && hexo s -p 4000
# 浏览器访问 http://服务器IP:4000 预览效果
# 2. 生产环境发布(生成静态文件,Nginx 自动读取)
hexo clean && hexo g
# 无需重启 Nginx,直接访问服务器 IP 即可看到新文章
八、维护、监控与故障排查
博客上线后,日常维护与故障排查是保障稳定运行的关键,这里整理了常用命令和常见问题解决方案。
6.1 常用命令速查表
| 功能场景 | 命令 | 说明 |
|---|---|---|
| 清理旧静态文件 | hexo clean | 发布前建议执行 |
| 生成静态文件 | hexo generate(缩写 hexo g) | 核心发布命令 |
| 本地预览 | hexo server(缩写 hexo s) | 默认端口 4000,-p 改端口 |
| 部署到 Git 平台 | hexo deploy(缩写 hexo d) | 需配置 _config.yml 的 deploy |
| 查看 Nginx 状态 | sudo systemctl status nginx | 检查是否运行 |
| 重启 Nginx | sudo systemctl restart nginx | 配置修改后生效 |
| 查看 Nginx 错误日志 | sudo tail -f /var/log/nginx/blog_error.log | 实时监控错误 |
| 查看博客访问日志 | sudo tail -f /var/log/nginx/blog_access.log | 查看访问记录 |
6.2 常见故障解决方案
问题 1:访问服务器 IP 显示 403 Forbidden
- 原因:Nginx 运行用户(nginx)无 /home/blog/public 目录读取权限。
- 解决:
sudo chmod -R 755 /home/blog/public
sudo chown -R root:nginx /home/blog
问题 2:页面显示正常,但 CSS/JS/图片加载失败(样式丢失)
- 原因:_config.yml 中 url 配置错误,或 Nginx root 路径错误。
- 解决:
# 1. 检查 url 配置
grep "url:" /home/blog/_config.yml # 确保为服务器公网 IP/域名,无多余斜杠
# 2. 检查 Nginx 配置
grep "root" /etc/nginx/conf.d/blog.conf # 确保指向 /home/blog/public
# 3. 重新生成文件
hexo clean && hexo g
问题 3:hexo init 报错 git clone failed
- 原因:网络问题导致无法拉取 Hexo 模板。
- 解决:忽略报错(Hexo 会自动使用内置模板),或手动安装:
npm install hexo --save
问题 4:Nginx 启动失败,报错 invalid location modifier
- 原因:配置文件中使用了全角符号(如 ~* 而非 ~*)。
- 解决:用 vim 打开 blog.conf,替换所有全角符号为半角,重新执行 sudo nginx -t 验证。
6.3 日常维护建议
- 定期备份:备份 /home/blog 目录(包含配置、文章、主题)和 Nginx 配置文件。
# 备份博客目录
tar -zcvf /home/blog_backup_$(date +%Y%m%d).tar.gz /home/blog
# 备份 Nginx 配置
cp /etc/nginx/conf.d/blog.conf /home/blog_backup_$(date +%Y%m%d)/
- 更新组件:定期更新 Node.js、Hexo 和主题。
# 更新 Hexo
cd /home/blog
npm update hexo --save
# 更新 NexT 主题
cd /home/blog/themes/next
git pull
- 配置 HTTPS:生产环境建议用 Certbot 申请免费 SSL 证书,配置 HTTPS。
# 安装 Certbot
sudo dnf install -y certbot python3-certbot-nginx
# 申请并配置证书(替换为你的域名)
sudo certbot --nginx -d blog.example.com
九、总结:从零到一的博客搭建之旅
至此,我们已经完整完成了从服务器初始化到博客上线、定制、维护的全流程。这套基于 Rocky Linux 9.7 + Nginx + Hexo 的架构,核心优势在于「稳定、高速、易维护」:Rocky Linux 保障底层稳定,Nginx 保障访问高速,Hexo 让内容管理与定制变得简单。
回顾整个过程,关键在于理解各组件的作用与协同关系,同时注意配置文件的准确性和权限问题。后续你可以根据自己的需求,进一步优化博客:比如绑定自定义域名、配置 HTTPS、添加评论系统(如 Valine)、接入访问统计工具等。
希望这篇教程能帮助你顺利搭建属于自己的个人博客,开启你的技术分享之旅!如果在操作过程中有任何问题,欢迎在评论区交流~







