基于Hexo实现一个静态的博客网站
原文首发:https://blog.liuzijian.com/post/8iu7g5e3r6y.html
1.初始化Hexo
Hexo是中国台湾开发者Charlie在2012年创建的一个开源项目,旨在提供一个简单、快速且易于扩展的静态博客生成器。
Hexo的设计理念是轻量级、易用和支持插件扩展,因此它非常适合那些有技术背景的用户,尤其是喜欢使用Markdown和Git进行内容管理的开发者。Hexo使用Node.js构建,并且支持通过主题和插件来扩展功能。
hexo基于Nodejs,所以首先要安装node和npm,最好连git一块安装上
1.全局安装hexo
npm install hexo -g
2.安装完成后,选择一个目录,执行以下命令,生成一个hexo脚手架
hexo init myblog
然后生成脚手架结构如下
myblog/
├── node_modules
├── scaffolds
│── scripts
├── source/
│ └── _posts
│ └── _drafts
├── themes
├── _config.landscape.yml
├── _config.yml
└── package.json
文件目录解释
node_modules不解释scaffolds存放博客内容模板的地方source资源文件夹,下面用来放建站需要的各种资源,包括markdown格式的博客原稿,图片,css,js,robots.txt等等source/_posts博客的"源码",里面放我们写作的markdown文件,会被hexo引擎按照一定规则转换成html页面source/_drafts草稿,不适合放在_posts里面打包发布的草稿就放在这里themes存放第三方主题_config.ymlhexo配置文件_config.landscape.yml默认主题landscape的配置文件package.json不解释
提前剧透:hexo使用过程中,还会经常用到两个文件夹
scriptshexo自定义脚本,在构建过程中执行,用于扩展hexo的功能或实现一些特殊需求public构建生成的静态网站,可以直接使用nginx root反代访问
3.启动调试服务器预览
修改_config.yml配置文件
# Site
title: '我的博客'
subtitle: '我的技术博客'
description: '分享一些实用的东西'
author: 'liuzijian'
language: zh-CN
timezone: 'Asia/Shanghai'
然后,运行package.json里面的目标npm run server
npm run server
直到输出提示"Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop."以后,访问127.0.0.1:4000进行预览,浏览器出现这个界面说明启动成功

4.打包部署
运行build目标后,根目录生成了一个public文件夹,就是构建成的静态网站文件,上传服务器并使用nginx代理,访问/index.html即可打开博客首页。也可以研究下Vercel,将整个源码上传GitHub,然后使用Vercel拉取,构建和部署。
npm run build
2.整合主题Fluid
hexo默认自带一个叫landscape的主题,比较简陋,也不美观,所以很多人选择美观且功能强大的第三方主题,在这里,我使用主题fluid来建站。
集成第三方主题到hexo中非常简单,只需要将主题解压放在theme文件夹,复制主题的配置文件到根目录下,然后到hexo配置文件内切换主题即可。
1.下载fluid
项目首页和文档地址: https://hexo.fluid-dev.com/
下载地址: https://github.com/fluid-dev/hexo-theme-fluid/releases
找到最新的1.9.8版本下载连接
https://github.com/fluid-dev/hexo-theme-fluid/archive/refs/tags/v1.9.8.zip
2.集成
将压缩包下载下来,解压,压缩包内文件夹名字叫hexo-theme-fluid-1.9.8,这个就是主题,不过要把解压后的文件夹重命名为fluid,并将这个文件夹放在主题文件夹themes内
myblog/
├── ... ...
├── themes
│ └── fluid
然后,打开themes/fluid文件夹,将其中的_config.yml文件复制到别处,重命名为_config.fluid.yml,然后粘贴到项目根目录下即可
注意: themes/fluid下的_config.yml是主题的配置,与脚手架生成在根目录的hexo配置文件_config.yml是不同的,要先复制到别处,改名成_config.fluid.yml,然后拷贝回根目录和hexo的配置文件_config.yml放在一起才能生效
myblog/
├── _config.fluid.yml
├── _config.yml
└── ... ...
修改_config.yml,找到以下配置
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: landscape
修改为以下,然后保存
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: fluid
再次启动npm run server,浏览器预览博客的效果已经变为主题的风格,即为集成主题成功

主题更多玩法,在主题的官网都有文档说明,主题配置文件_config.fluid.yml内也有详细注释,这里不再详细一一介绍,集成其他主题的方式方法同理。
3.部署评论系统Waline
评论系统一般由主题提供支持,支持的评论系统有许许多多,这里我使用的是Waline,并且采用docker独立部署Waline
Waline的使用部署等可参考官网
1.拉取代码,然后构建镜像
git clone https://github.com/walinejs/waline.git
cd waline
docker build -t lizheming/waline -f packages/server/Dockerfile .
2.使用参数启动镜像,参数根据Waline指定的服务端运行参数而来
常见参数:
OAUTH_URL变量是因为oauth服务也是我自己私有部署的,如果使用waline公共的则不用这个变量IPQPSIP评论频次限制MYSQL_DB数据库名,使用MySQL部署,需要提前导入数据库脚本,详情查阅waline官网文档MYSQL_USER不解释MYSQL_PASSWORD不解释MYSQL_PORT不解释SERVER_URL访问waline系统时的地址前缀,因为docker部署由nginx反代,建议设置为反代后的地址COMMENT_AUDIT评论审核,布尔值SITE_NAME邮件中展示的网站名SITE_URL邮件中展示的网站地址AUTHOR_EMAIL发送者邮件地址SMTP_PASS邮件服务密码SMTP_USER邮件用户名SMTP_SERVICE邮件提供商,具体列表可见官方文档
启动命令示例
docker run -d \
-e OAUTH_URL=https://oauth.liuzijian.com \
-e IPQPS=10 \
-e MYSQL_DB=waline \
-e MYSQL_USER=****** \
-e MYSQL_PASSWORD=********** \
-e MYSQL_PORT=3306 \
-e SERVER_URL=https://waline.liuzijian.com \
-e COMMENT_AUDIT=true \
-e SITE_NAME="Liu Zijian's Blog" \
-e SITE_URL=https://blog.liuzijian.com \
-e SMTP_PASS=**************** \
-e AUTHOR_EMAIL=****@foxmail.com \
-e SMTP_USER=******@foxmail.com \
-e SMTP_SERVICE=QQ \
-p 8360:8360 \
--network=host \
lizheming/waline
怎样在fluid主题上使用waline评论,主题文档有说明,不再赘述。
基于Hexo实现一个静态的博客网站的更多相关文章
- 基于 Hexo + GitHub Pages 搭建个人博客(一)
前言:我的博客写作之路 15 年刚上大学,第一次接触公众号,就萌生了创建一个公众号写点东西,但最终不了了之. 很快到了 16 年,开始接触网上各大博客网站,接触最多的当属 CSDN,萌生了注册一个博客 ...
- 基于 Hexo + GitHub Pages 搭建个人博客(二)
在 基于 Hexo + GitHub Pages 搭建个人博客(一) 这篇文章中,我们已经知道如何使用 Hexo + GitHub Pages 搭建一个个人博客,GitHub 为我们提供了免费的域名和 ...
- 基于 Hexo + GitHub Pages 搭建个人博客(三)
一.添加扫描二维码关注功能 打开 themes 目录下的 next 主题配置文件,找到 Wechat Subscriber 标签,将该标签下的配置改成如下形式: # Wechat Subscriber ...
- 基于Hexo+Github Pages搭建的博客
概念 Github Pages可以被认为是用户编写的.托管在github上的静态网页.使用Github Pages可以为你提供一个免费的服务器,免去了自己搭建服务器和写数据库的麻烦.此外还可以绑定自己 ...
- 基于Hexo的GitHub Pages个人博客搭建
1.创建一个个人主页仓库 仓库命名最好为github账户名.github.io,这样可以通过https://github账户名.github.io访问 2.安装Hexo 此处采用局部安装: # npm ...
- 使用Hexo搭建一个简单的博客(一)
搭建好简洁的博客框架后,回看时发现,简洁之中透露着一丝丝简陋,好的,网上关于丰富hexo的文章也很多 记录一下自己的一些瞎操作. 在你的hexo目录下,你可以看到themes文件夹里有个默认的land ...
- 使用Hexo搭建一个简单的博客(二)
昨天想着用Hexo和github搭一个自己简单的博客,记录一下自己踩过的坑,具体的流程就不重复了,主要参考了一下几篇文章 GitHub+Hexo 搭建个人网站详细教程 使用Hexo+Github一步步 ...
- Python学习笔记23:Django构建一个简单的博客网站(一个)
在说如何下载和安装Django,本节将重点讨论如何使用Django站点. 一 新建project 命令:django-admin startproject mysite # 有的须要输入:django ...
- python基础[18]——使用django创建一个简易的博客网站
一.页面实现 index.html base.html post.html header.html footer.html <!-- index.html--> {% extends 'b ...
- 用html,CSS 写一个静态的博客网页
<!doctype html> <html> <br/><br/><br/> <head> <meta http-equi ...
随机推荐
- 4G模组PSM+超低功耗,手把手教你!
合宙4G-Cat.1模组支持三种功耗模式: 常规模式 低功耗模式 PSM+模式 用户可以根据不同的应用场景,按需选择不同的合宙4G-Cat.1模组功耗模式,以及三种功耗模式之间的相互转换. 合宙 ...
- SyntaxError: non-default argument follows default argument
有时候没注意就会犯一些低级错误 问题原因 把没有默认值的形参放到了带有默认值的形参后面 解决办法 问了一下chatgpt,果然一语道破.因为python在定义函数时,在不定长参数中,默认值参数不能放在 ...
- Java 网页浏览器组件介绍
王 凯迪, 软件工程师, Convergys 上海研发中心 简介: 使用 Java 开发客户端应用有时会需要使用到浏览器组件,本文将介绍在 Java 用户界面中使用浏览器的四种方法,并且比较它们各自的 ...
- python之pyexecjs
pyexecjs是一个用Python来执行JavaScript代码的工具库,该库支持多种JavaScript运行时环境,如Node.js.PhantomJS.SlimerJS等,允许开发者在Pytho ...
- 体验 DORIS 安装
1.概述 doris 是 百度提供一个MPP架构的分析性数据库. 下面介绍一下如何安装doris . 2.下载 我用的是centos 7.5 的虚拟器. https://doris.apache.or ...
- HTML5 多媒体
1.互联网上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件(比如 Flash)来播放的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定了在网页上嵌入音 ...
- 正也科技S2P 数字化推动医药信息传播多元化
在当今数字化迅猛发展的时代浪潮中,医药信息传播正经历着深刻而广泛的变革.这种变革犹如一场波澜壮阔的革命,席卷了医药领域的每一个角落,对医药行业的发展产生了深远且不可忽视的影响. 一.传播渠道的多元化拓 ...
- SEEDLab —— 环境变量与 Set-UID 实验
[软件安全]实验1--环境变量与 Set-UID 实验 Task 1:配置环境变量 使用printenv或env指令来打印环境变量: 如果只想打印特定的环境变量,如PWD变量,可以使用printe ...
- PPT保存报错:某些字体无法与演示文稿一起保存
WPS做的PPT,用的会员,高级的那种,很高大上很好看,但是用微软的PowerPoint编辑保存,报错:某些字体无法与演示文稿一起保存. 解决方案:移除嵌入的字体 打开演示文稿文件. 在"文 ...
- 反微服务架构(A Macro Services Framework)
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 反微服务架构(A Macro Services Frame ...