ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

博客搭建(基于hexo)

2022-01-09 22:31:21  阅读:310  来源: 互联网

标签:git Hexo hexo 主题 博客 theme 文件夹 搭建


准备工作

  • 博客框架:Hexo
    • 博客主题:Fluid, Ayer, butterfly
  • 主机:阿里云轻量级应用服务器
    • 配置:2核2G 60GB
  • 图床:阿里云OSS
    • 软件:oss-browser(阿里云OSS适配)
  • 写作工具:Typora
    • 图床软件:PicGo
  • 博客备份:Github,Gitee,Onedrive

博客框架选择

  • 我采用的是Hexo作为我的博客框架,理由是:响应快速、内存占用小、文章格式统一(都使用markdown格式)、迁移能力强

image-20211210001116683

image-20211210003013846

博客主题选择

butterfly

  • butterfly是一款功能齐全的hexo主题,界面优美,更新频率比其他主题更多,并且对手机端浏览较为友好
  • 缺点是在服务器上生成页面速度相对于其他主题很慢,并且在web上打开页面也比其他主题稍慢,但是可以接受

image-20211212004527099

image-20211212004708018

其他主题介绍

Fluid
  • Fluid是一款响应速度很快的主题,界面简洁美观,支持文章自动摘要(这部分做的很不错),博客应有的基础功能都具备了

image-20211210001443531

image-20211210002224502

image-20211210003126170

Ayer
  • Ayer 是一款简洁的主题,响应速度快,但不如Fluid,选择该主题的原因是:界面优雅,菜单栏设计在侧面,主题配置十分简单,很快就能配置好文件,博客所需的基本都具备

image-20211210003534928

image-20211210004003823

image-20211210004232211

主题对比
  • 两个主题都有共同的优点,那就是响应速度快,简洁明了,配置简单
  • Fluid缺点:使用移动端进行网页浏览时,菜单栏点击展开后会占据半个屏幕,让人很不适应;没有Gitee的镜像,对于大陆内地的用户不是很友好
  • Ayer缺点:主题有一段时间没有更新了,对于文章的摘要过于简单,只有自动摘要只能截取标题
Bamboo

image-20211210005805743

  • 优点:美观,速度快,具有很多可以使用的功能,可定制程度较高,具有Gitee镜像,最近一直在更新(现在是2021-12-10)

hexo-theme-bamboo: hexo博客主题--bamboo https://yuang01.gitee.io

image-20211210010233209

  • 缺点:与其他hexo主题相比十分臃肿,尽管作者对主题的配置有了很详细的说明和解释,但是复杂的主题配置文件需要花费很长时间去定制,并且由于主题迭代速度快,导致了主题配置文件需要根据不同版本进行细微的调整,另外,使用该主题文件上传hexo博客文件夹到GitHub时,仓库可能会提示代码危险,可能是主题的作者代码不规范,毕竟这只是一个人维护的主题
  • 建议:这个主题有他自己的优点,主要取决于使用者是否喜欢花里胡哨的界面,因此我不推荐使用该主题,毕竟没必要将大量的时间浪费到博客主题的配置上,除非你想向你的好友炫耀你的主题

服务器

这里不给相关链接,因为不想被理解是打广告的,服务器可以买,也可以不买,不买的话使用 Github page 或者Gitee page 都可搭建自己的博客,这里不再多述

  • 我使用的是阿里云的轻量级应用服务器,打折后3年内99元每年,2核 2G内存使用起来是绰绰有余的,无论是使用hexo还是wordpress

image-20211210011640954

  • 轻量级应用服务器的特点是可以很便捷的搭建应用,就像我可以很方便的在上面搭建主题,因为阿里云提供了相关软件的安装

image-20211210012248797

开始搭建

镜像选择

  • 在轻量级应用服务器上安装 Node.js ,最好一开始购买机器初始化时就选择这个镜像,否则重置系统后再次安装,可能会无法通过阿里云网页服务器控制平台查看到内存的使用情况,按照阿里云的文档重新下载内存监视软件可能会不成功

image-20211210012946246

安装Hexo

  • 连接服务器,安装Hexo
  • 所有必备的应用程序安装完成后,即可使用 npm 安装 Hexo。
$ npm install -g hexo-cli
  • 安装以后,可以使用以下两种方式执行 Hexo:
    1. npx hexo <command>
    2. 将 Hexo 所在的目录下的 node_modules 添加到环境变量之中即可直接使用 hexo <command>
echo 'PATH="$PATH:./node_modules/.bin"' >> ~/.profile

创建文件夹

建立仓库

  • 安装完 Hexo 后,我们需要新建一个文件夹来容纳我们的博客所需的一切文件,在此之前,我们需要先建立一个GitHub或Gitee仓库,并且将其克隆到我们的服务器上

  • 克隆仓库到服务器上的目的是因为可以很方便的将我们的hexo整体给搬到仓库中,可以更好的备份以及以后的迁移,并且当我们可以将包含Hexo的仓库克隆到我们的计算机上,然后编辑里面的文件,结束后我们于服务器上同步内容

  • 如我的仓库:

image-20211210014541894-16390719449702

创建文件夹

  • 切换到已克隆的仓库内,使用如下命令创建文件夹:
hexo init <folder>  //folder为你所创建文件夹的名称,是博客的根文件夹,许多操作都是在这个文件夹中进行操作的
  • 创建文件夹的过程实际上是从GitHub上面克隆仓库并且重新命名的过程,所以加载速度会比较慢,网上有其他方法,通过切换源的方法来加速文件夹创建过程,这里不再多述
  • 文件夹建立后,在文件夹内生成了许多文件,在这里我将介绍几个比较重要的
    • _config.yml 是整个Hexo框架的配置文件
    • config.xxx.yml xxx代表了hexo主题的名称,这是主题的配置文件,在主题内部也有一个名为 _config.yml 的文件,他的功能和 _config.xxx.yml 文件一样,但是位于hexo根目录下的 _config.xxx.yml 文件 具有更高的优先级,当加载主题时会优先调用 _config.xxx.yml 文件
    • source 这个文件夹中包含了文章,分类,标签的页面和文件夹,当然最开始时这个文件夹中几乎是空的,在后来会慢慢变充实
    • themes 主题文件夹,里面存放了你下载的主题
    • public 这是生成的网页文件, nginx 指向的就是这个文件

主题(butterfly)

安装主题

  • 安装主题有两种方式
    • npm i hexo-theme-butterfly
      • 此方法只支持Hexo在5.0.0版本以上 通过 npm 安装并不会在 themes 里生成主题文件夹,而是在 node_modules 里生成 修改hexo根目录下(hexo init 命令所创建的文件夹下)的站点配置文件_config.yml
    • git 克隆主题到themes文件夹中,推荐使用这个方法,容易管理
  • 下图是我的主题文件夹内容:

image-20211210021620985

  • 为了集中管理主题,可以将主题的配置文件复制改名到博客的根目录下,改名为 _config.xxx.yml (xxx是主题名字),这样只需要配置博客根目录下的配置文件,而不用配置主题目录下的文件

主题配置

添加备案信息
  • 首先在主题的配置文件中找到 Footer Settings,并且添加如下信息
# Footer Settings
# --------------------------------------
footer:
  owner:
    enable: true
    since: 2021
  custom_text: you are my friend
  copyright: true # Copyright of theme and framework

ICP:
  enable: false  # 是否启用ICP
  url: http://www.beian.miit.gov.cn/  # 点击后的链接地址
  text: 某ICP备xxxx  # 备案号
  icon:    # 图标
NSP:
  enable: false   # 是否启用NSP
  url: http://www.beian.gov.cn/  # 点击后的链接地址
  text: 某公网安备 xxxxx号    # 公安备案号
  icon: https://blog.imashimaro.com/images/20200805012127.png  # 图标
  • 然后在博客根目录下打开 themes/butterfly/layout/includes/footer.pug 文件,修改成以下代码
#footer-wrap
  if theme.footer.owner.enable
    - var now = new Date()
    - var nowYear = now.getFullYear()
    if theme.footer.owner.since && theme.footer.owner.since != nowYear
      .copyright!= `&copy;${theme.footer.owner.since} - ${nowYear} By ${config.author}`
    else
      .copyright!= `&copy;${nowYear} By ${config.author}`
  if theme.footer.copyright
    .framework-info
      span= _p('footer.framework') + ' '
      a(href='https://hexo.io')= 'Hexo'
      span.footer-separator |
      span= _p('footer.theme') + ' '
      a(href='https://github.com/jerryc127/hexo-theme-butterfly')= 'Butterfly'
  if theme.footer.custom_text
    .footer_custom_text!=`${theme.footer.custom_text}`
  if theme.ICP.enable
    .icp
      a(href=theme.ICP.url)
        if theme.ICP.icon
          img.icp-icon(src=url_for(theme.ICP.icon))
        span=theme.ICP.text
  if theme.NSP.enable
    .icp
      a(href=theme.NSP.url)
        if theme.NSP.icon
          img.icp-icon(src=url_for(theme.NSP.icon))
        span=theme.NSP.text
文章设置
写法 解释
title 【必需】文章标题
date 【必需】文章创建日期
updated 【可选】文章更新日期
tags 【可选】文章标籤
categories 【可选】文章分类
keywords 【可选】文章关键字
description 【可选】文章描述
top_img 【可选】文章顶部图片
cover 【可选】文章缩略图(如果没有设置top_img,文章页顶部将显示缩略图,可设为false/图片地址/留空)
comments 【可选】显示文章评论模块(默认 true)
toc 【可选】显示文章TOC(默认为设置中toc的enable配置)
toc_number 【可选】显示toc_number(默认为设置中toc的number配置)
copyright 【可选】显示文章版权模块(默认为设置中post_copyright的enable配置)
copyright_author 【可选】文章版权模块的文章作者
copyright_author_href 【可选】文章版权模块的文章作者链接
copyright_url 【可选】文章版权模块的文章连结链接
copyright_info 【可选】文章版权模块的版权声明文字
mathjax 【可选】显示mathjax(当设置mathjax的per_page: false时,才需要配置,默认 false)
katex 【可选】显示katex(当设置katex的per_page: false时,才需要配置,默认 false)
aplayer 【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置
highlight_shrink 【可选】配置代码框是否展开(true/false)(默认为设置中highlight_shrink的配置)
aside 【可选】显示侧边栏 (默认 true)
  • 常用文章设置
---
title:
date:
tags:
categories:
top_img:
cover:
---
  • 分类和标签

只有文章支持分类和标签,您可以在 Front-matter 中设置。在其他系统中,分类和标签听起来很接近,但是在 Hexo 中两者有着明显的差别:分类具有顺序性和层次性,也就是说 Foo, Bar 不等于 Bar, Foo;而标签没有顺序和层次。

categories:
- Diary
tags:
- PS3
- Games

分类方法的分歧

如果您有过使用 WordPress 的经验,就很容易误解 Hexo 的分类方式。WordPress 支持对一篇文章设置多个分类,而且这些分类可以是同级的,也可以是父子分类。但是 Hexo 不支持指定多个同级分类。下面的指定方法:

categories:
  - Diary
  - Life

会使分类Life成为Diary的子分类,而不是并列分类。因此,有必要为您的文章选择尽可能准确的分类。

如果你需要为文章添加多个分类,可以尝试以下 list 中的方法。

categories:
- [Diary, PlayStation]
- [Diary, Games]
- [Life]

此时这篇文章同时包括三个分类: PlayStationGames 分别都是父分类 Diary 的子分类,同时 Life 是一个没有子分类的分类。

配置 _config.yml

  • 接下来配置Hexo的配置文件 _config.yml ,这个文件在博客文件夹的根目录下
  • 修改语言为 zh_CN,修改主题名,注意,主题名一定要与themes文件夹中的主题名成一样,否则之后的操作会报错

image-20211210022926430

image-20211210023002784

  • 其他的可以按照个人喜好修改,如网站的标题,副标题等
  • 这里不教学Hexo+github page的使用,有兴趣的可以在网上搜索

安装 Nginx

  1. Nginx安装
yum install -y nginx
  1. 配置Nginx
nginx -t
  1. 使用vim打开nginx.conf文件
  • 注意:有时该配置文件会不同于下面显示的,请参考网上其他教程从官网下载
vim /etc/nginx/nginx.conf
  • 修改用户:

image-20211210114418269

  • 修改 http 部分(默认页面加载部分)

屏幕截图 2021-12-10 114501

  • 修改 https 部分 (需要先下载SSL证书)

屏幕截图 2021-12-10 115453

  • 以下是我的nginx配置文件
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  001.social;
        root         /root/story/blog/public;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            index index.html;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  001.social;
        root         /root/story/blog/public;

        ssl_certificate cert/6712194_001.social.pem;
        ssl_certificate_key cert/6712194_001.social.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers PROFILE=SYSTEM;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

  • 启动Nginx
systemctl start nginx.service
  • 重启Nginx
systemctl restart nginx.service
  • 注意,有时候加载网页发现出现nginx 404 not found 是因为:
    • 更改了nginx配置文件内容但是没有刷新,需要重启nginx
    • nginx配置文件使用了错误的网页页面文件夹地址,在hexo中,地址为博客根目录下的 public 文件夹位置
    • 给博客文件夹赋权 chmod 777 folder

生成网页

  • 在博客的根目录下执行命令
hexo clean	//该命令执行后清除public文件夹

hexo g -d  //该命令首先生成静态文件,然后立即部署
  • 如果想先预览一下网页,可以使用 hexo s 命令,默认访问端口是4000,这时候我们需要开启服务器的4000端口否则无法访问

  • 打开阿里云轻量级应用服务器,配置防火墙用来开放端口

image-20211210122039919

  • 注意:无论是使用 hexo g -d 还是 hexo s 首先都最好先执行hexo clean

其他配置要求

关于git

  • 在某些服务器中预先不会有git命令,或者重装系统后需要重新安装git命令

Git安装

  • 我使用的云主机是centos8系统的,之前也用过ubuntu18系统,但是感觉效果不怎的,可能试的次数比较少吧
  • 先检查是否有git
git --version
  • 没有则安装,旧的卸载重装
#卸载旧的git
yum remove git
# 安装依赖库
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
# 将git下载安装到/usr/local/src目录
cd /usr/local/src
wget http://ftp.ntu.edu.tw/software/scm/git/git-2.26.0.tar.gz
tar -zvxf git-2.26.0.tar.gz
# 进入目录
cd git-2.26.0
# 编译执行
make prefix=/usr/local/git all
# 安装 git 到 /usr/local/git 目录下
make prefix=/usr/local/git install

配置Git环境变量

  • 打开环境变量配置文件进行配置
vim /etc/profile

#添加以下内容
PATH=$PATH:/usr/local/git/bin   # git 的目录
export PATH

# 使配置的环境变量生效
source /etc/profile
  • 验证git安装成功
git --version

云主机与GitHub交换SSH密匙

  • Git初始化
# 设置github昵称
git config --global user.name 'mxrmiss'
# 设置github邮箱
git config --global user.email 'heroli520@outlook.com'
  • git status 无法显示中文
git config --global core.quotepath false
  • 创建ssh密匙
ssh-keygen -t rsa -C "GitHub 邮箱"
  • 输出 id_rsa.pub 内容并复制到GitHub中的setting页面上
cat id_rsa.pub

syONLT.jpg

  • ssh -T git@github.com 输入此命令,显示successful表示成功

博客与github page挂钩

  1. 在github上新建一个仓库,仓库名为自己的 github名.github.io

  2. 在自己的博客目录下的站点配置文件_config.yml中进行配置,在文件的末尾找到并进行修改:

    deploy:
    	type: git
    	repo: //填仓库地址
    	branch: master  //填写上传页面的分支
    
  3. 安装git部署插件

    npm install hexo-deployer-git --save
    

关于node.js

  • 对于某些非轻量级应用服务器需要对node.js进行更详细的设置
  1. node.js下载
cd /opt
wget https://npm.taobao.org/mirrors/node/latest-v15.x/node-v15.0.1-linux-x64.tar.xz  # 下载二进制安装包
  1. node.js部署
cd /opt
tar xf node-v10.16.0-linux-x64.tar.xz 
ln -s node-v10.16.0-linux-x64 nodejs
nodejs -> node-v10.16.0-linux-x64
  1. 版本信息
cd /opt/nodejs/bin
./node -v
会看到 v10.16.0
  1. 创建软连接
ln -s /opt/nodejs/bin/node /usr/local/bin/node
ln -s /opt/nodejs/bin/npm  /usr/local/bin/npm

# 验证
node -v

关于 hexo

  • 有些服务器安装hexo需要进行更多的配置

安装hexo

npm install hexo-cli -g 
  • 采用软连接的方式将hexo添加入全局变量
ln -s /opt/nodejs/lib/node_modules/hexo-cli/bin/hexo /usr/local/bin/hexo

当安装hexo报错

  • 解决错误:

Missing write access to /usr/local/lib/node_modules是没有写权限, npm官方给出的解决方案是新建一个有权限的文件夹, 在这个新文件夹中安装npm包. 这个方法不适用于Microsoft Windows系统.
在用户的根目录创建文件夹(名字不一定要是.npm-global, 可以自己起):

mkdir ~/.npm-global
  • 设置npm全局包的安装路径:
npm config set prefix '~/.npm-global'
  • 在用户的根目录下查看有没有.profile文件, 如果没有就创建, 然后用文本编辑器打开, 加上以下一行, 保存:
export PATH=~/.npm-global/bin:$PATH
  • 回到终端运行以下命令, 让配置生效:
source /etc/profile
  • 然后全局安装npm包就可以了.

参考链接

  1. 将 Hexo 所在的目录下的 node_modules 添加到环境变量之中即可直接使用 hexo

    echo 'PATH="$PATH:./node_modules/.bin"' >> ~/.profile

一些错误解决

hexo发生error:spawn failed错误的解决方法

  • 原文链接
  • 问题原因:由于git进行push或者hexo d 的时候改变了一些 .deploy_git 文件下的内容
# 出现错误
error:spawn failed...
#解决方法
1. 删除blog文件夹中的 .deploy_git 文件夹
2. 输入 git config --global core.autocrlf false
3. 
	hexo clean
	hexo g
	hexo d

git add 博客文件提示博客主题是仓库

  • 当我们对博客进行同步的时候,我们会使用git add 命令来添加同步文件,但是会提示hexo主题文件是一个仓库,不允许仓库里面套仓库上传,除非将里面的仓库也一起同步
  • 解决办法:按照提示,清除缓存,但是不要将主题仓库设置为同步

加载网页只显示文字

  • 当我们加载网页的时候,我们可能会发现网页没有任何背景以及图片,只显示文字,这时候我们就应该在博客配置文件或者主题配置文件中关闭 强制使用HTTPS 这一选项,使用
  • GitHub page也是如此

相关链接(有用)

Hexo官网 hexo-theme-ayer: gitee
Hexo文档 hexo-theme-bamboo: gitee
Hexo主题 hexo-theme-fluid: gitee
Hexo 部署到 GitHub Pages hexo-theme-butterfly: gitee
hexo-theme-ayer: github
博客园,CSDN等平台利用Github绑定域名 hexo-theme-bamboo: github
typora+阿里云图床+印象笔记+OneDrive hexo-theme-fluid: github
图标网站:Font Awesome hexo-theme-butterfly:github

标签:git,Hexo,hexo,主题,博客,theme,文件夹,搭建
来源: https://www.cnblogs.com/soulblog/p/15782548.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有