Hexo搭建个人博客

Posted jrmaker的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hexo搭建个人博客相关的知识,希望对你有一定的参考价值。

写这篇的主要目的是记录自己在 windows 下使用 Hexo + next 搭建博客的一个过程,简便搭建小教程。

本文使用环境(win10、node.js、git、next 5.1.4、阿里云Centos7、阿里云购买的域名、nginx

站点配置

站点搭建

使用 Hexo ,需要安装 node.js(官方建议 10.0 版本以上)Git 程序 ,本文环境为 windows + 阿里云Centos7

npm install -g hexo-cli
hexo init <folder>
cd <folder>
npm install

folder 为站点文件夹,Hexo 的根目录

设置中文

站点根目录下的 **_config.yml** 文件,设置

language: zh-Hans

更改主题

使用如下命令安装 next 主题,需要其他主题可以参考 Hexo官网主题

cd your-hexo-site
git clone https://github.com/iissnan/hexo-theme-next themes/next

站点根目录下的 **_config.yml** 文件,修改你需要的主题

theme: next

本地搜索

站点根目录执行如下命令,安装 hexo-generator-searchdb

npm install hexo-generator-searchdb --save

安装后,至 **themes/next/_config.yml** 文件中修改 enable: true,即开启本地搜索功能(默认为关闭状态)

local_search:
  enable: true
  # if auto, trigger search by changing input
  # if manual, trigger search by pressing enter key or search button
  trigger: auto
  # show top n results per article, show all results by setting to -1
  top_n_per_article: 1

博文压缩

站点根目录下,执行如下命令安装 hexo-neat

npm install hexo-neat --save

安装成功后,在站点的 **_config.yml** 文件中添加如下配置(自行选择需要压缩的文件),后续执行 hexo g 将会对博文进行压缩,优化上传和访问的加载速度

# hexo-neat
# 博文压缩
neat_enable: true
# 压缩html
neat_html:
  enable: true
  exclude:
# 压缩css  
neat_css:
  enable: true
  exclude:
    - '**/*.min.css'
# 压缩js
neat_js:
  enable: true
  mangle: true
  output:
  compress:
  exclude:
    - '**/*.min.js'
    - '**/jquery.fancybox.pack.js'
    - '**/index.js'  

主题配置

本站使用 next.Gemini,配置过程中可使用可在站点根目录下使用 hexo s --dubug 进行测试(大部分免重启服务即可查看效果)

设置菜单

**themes/next/_config.yml** 文件中开启需要的配置,相应的中文描述在 themes/next/languages/zh-Hans.yml 文件中可修改

menu:
  home: /
  archives: /archives
  #about: /about
  categories: /categories
  tags: /tags
  #commonweal: /404.html

设置头像

**themes/next/_config.yml** 文件中修改 avatar 的属性值,将其改成头像的具体路径,可以是完整的URL,也可以放在主题的 image 文件夹下面

avatar: /images/avatar.jpg

右侧边栏

**themes/next/_config.yml** 文件中修改(我比较习惯侧边栏在右边)

sidebar:
  # Sidebar Position, available value: left | right (only for Pisces | Gemini).
  #position: left
  position: right

浏览进度

**themes/next/_config.yml** 文件中开启(置顶按钮在右下角)

# Scroll percent label in b2t button.
  scrollpercent: true

如需要吸附侧边栏,需要做继续在 **themes/next/_config.yml** 中修改,开启 b2t

b2t: true

顶部进度条

**themes/next/_config.yml** 文件中开启

pace: true

去除强力驱动

进入 **themes/next/layout/_partials/footer.swig** 文件中,删除如下

{% if theme.footer.powered and theme.footer.theme.enable %}
  <span class="post-meta-divider">|</span>
{% endif %}

{% if theme.footer.theme.enable %}
  <div class="theme-info">{#
  #}{{ __('footer.theme') }} &mdash; {#
  #}<a class="theme-link" target="_blank" href="https://github.com/iissnan/hexo-theme-next">{#
    #}NexT.{{ theme.scheme }}{#
  #}</a>{% if theme.footer.theme.version %} v{{ theme.version }}{% endif %}{#
#}</div>
{% endif %}

如果网站已备案,则可以再此处将其替换成你的备案号

<div class="BbeiAn-info">
    {{ __('某ICP备')}} -
    <a target="_blank"  href="http://beian.miit.gov.cn/">xxxxxxxx号</a>
</div>

代码复制

在 **themes/next/layout/_third-party** 文件夹下创建名为 copy-code.swig 的文件,并在文件中添加如下代码

  <style>
    .copy-btn {
      display: inline-block;
      padding: 6px 12px;
      font-size: 13px;
      font-weight: 700;
      line-height: 20px;
      color: #333;
      white-space: nowrap;
      vertical-align: middle;
      cursor: pointer;
      background-color: #eee;
      background-image: linear-gradient(#fcfcfc, #eee);
      border: 1px solid #d5d5d5;
      border-radius: 3px;
      user-select: none;
      outline: 0;
    }
 
    .highlight-wrap .copy-btn {
      transition: opacity .3s ease-in-out;
      opacity: 0;
      padding: 2px 6px;
      position: absolute;
      right: 4px;
      top: 8px;
    }
 
    .highlight-wrap:hover .copy-btn,
    .highlight-wrap .copy-btn:focus {
      opacity: 1
    }
 
    .highlight-wrap {
      position: relative;
    }
  </style>
 
  <script>
    $('.highlight').each(function (i, e) {
      var $wrap = $('<div>').addClass('highlight-wrap')
      $(e).after($wrap)
      $wrap.append($('<button>').addClass('copy-btn').append('复制').on('click', function (e) {
        var code = $(this).parent().find('.code').find('.line').map(function (i, e) {
          return $(e).text()
        }).toArray().join('\n')
        var ta = document.createElement('textarea')
        document.body.appendChild(ta)
        ta.style.position = 'absolute'
        ta.style.top = '0px'
        ta.style.left = '0px'
        ta.value = code
        ta.select()
        ta.focus()
        var result = document.execCommand('copy')
        document.body.removeChild(ta)
 
        if(result)$(this).text('复制成功')
        else $(this).text('复制失败')
 
        $(this).blur()
      })).on('mouseleave', function (e) {
        var $b = $(this).find('.copy-btn')
        setTimeout(function () {
          $b.text('复制')
        }, 300)
      }).append(e)
    })
  </script>

返回上一层文件夹,即 themes/next/layout 下,打开 **_layout.swig** 文件,在 body 闭合标签上方添加

{% include '_third-party/copy-code.swig' %}

主页文章缩略

即首页文章不显示全文,只显示预览部分

**themes/next/_config.yml** 文件中打开配置,可自行修改需要显示的字数长度

auto_excerpt:
  enable: true
  length: 150

底部版权

在 **themes/next/_config.yml** 文件中直接开启即可

post_copyright:
  enable: true
  license: CC BY-NC-SA 3.0
  license_url: https://creativecommons.org/licenses/by-nc-sa/3.0/

评论系统

站点使用 Valine 评论系统,官方入口,在 LeanCloud 上注册一个账号,登陆并访问控制台,创建免费应用,选择开发版本,之后在应用设置里面有个 应用 Keys 选项,进入复制 AppIDAppKey,并在 **themes/next/_config.yml** 文件中开启 Valine

valine:
  enable: true
  appid:  # 应用生成的 AppID
  appkey: # 应用生成的 AppKey
  notify: false # 邮件通知 , https://github.com/xCss/Valine/wiki
  verify: false # 评论是否需要验证码,建议关闭
  placeholder: 请在此处输入你的留言信息 # comment box placeholder
  avatar: mm # gravatar style
  guest_info: nick,mail,link # custom comment header
  pageSize: 10 # pagination size

服务器配置

开放服务器端口

服务器默认没有配置安全组规则,需要自行配置需要开放的端口信息,具体:进入云实例的安全组,开放 80 443 端口,具体请看 阿里云安全组配置

Git安装与配置

git 安装

yum install git

创建一个 git 账户

adduser git

添加账户权限,编辑 sudoers,找到 root ALL=(ALL) ALL 并在下方添加 git ALL=(ALL) ALL 并保存退出

chmod 740 /etc/sudoers
vim /etc/sudoers

## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
git      ALL=(ALL)     ALL

改回权限

chmod 400 /etc/sudoers

为 git 用户设置密码

sudo passwd git

windows 生成密钥,密钥文件保存至 C:\Users\youname\.ssh 文件夹下面

ssh-keygen

切换git用户,创建 ~/.ssh/authorized_keys 文件,文件中保存 windows 中的 id_rsa.pub 文件内容,并赋予权限

su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys      # 将 windows 下的 id_rsa.pub 文件内容复制于此
chmod 600 /home/git/.ssh/authorzied_keys
chmod 700 /home/git/.ssh

重启 ssh 服务

service sshd restart

重启后,进入 windows 命令窗口,免密登陆 git 账户测试

ssh -v git@youIpAddress

使用 root 账户创建目录

mkdir /var/repo                      # git仓库
chown -R git:git /var/repo
chmod -R 755 /var/repo
mkdir /var/www/hexo             # 网站根目录
chown -R git:git /var/www/hexo
chmod -R 755 /var/www/hexo
复制代码z

创建 git 仓库

su git
cd var/repo
git init --bare myblog.git

创建 git 钩子文件 post-receive,用于自动部署在 /var/repo/myblog.git 下

vim /var/repo/myblog.git/hooks/post-receive

post-receive 文件中添加以下内容

git --work-tree=/var/www/hexo --git-dir=/var/repo/myblog.git checkout -f

root 用户下修改文件所属用户,授予可执行权限

chown -R git:git /var/repo/hexoBlog.git/hooks/post-receive
chmod +x /var/repo/hexoBlog.git/hooks/post-receive

自此,仓库已创建完成

Nginx安装与配置

安装 nginx

yum install -y nginx

启动 nginx 服务器

systemctl start nginx

设置开机启动

systemctl enable nginx

进入/etc/nginx 文件下,将 nginx.conf 复制一份配置文件到 conf.d 下进行修改(也可以直接用在我的配置上进行修改),该配置文件用你的域名命名(容易识别)

cd /etc/nginx
cp nginx.conf conf.d/jrmaker.cn.conf

我的完整配置如下(含Hppts),阿里云上可免费申请 SSL 证书(控制台-域名-管理-开启SSL证书-申请免费证书)

server {
    listen      80;
    server_name jrmaker.cn;
    return 301 https://www.jrmaker.cn$request_uri;
}
server {
    listen      443;
    server_name jrmaker.cn;
    return 301 https://www.jrmaker.cn$request_uri;
}

# 有ssl证书的,没有可以忽略如下配置,需要将 root /var/www/hexo 添加到上方的 server 中
server {
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    server_name  www.jrmaker.cn;
    root         /var/www/hexo;

    ssl_certificate "/var/ssl/blog/3427693_www.jrmaker.cn.pem";
    ssl_certificate_key "/var/ssl/blog/3427693_www.jrmaker.cn.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
    }

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

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

平滑重启 nginx

nginx -s reload

问题解决

URL Cannot GET /%20/

至 **themes/hexo/_config.yml** 文件下,找到下面位置,将 || 前面的 空格去掉

menu:? home: /|| home? 
#about: /about/ || user? 
tags: /tags/|| tags? 
categories: /categories/|| th? 
archives: /archives/|| archive? 
#schedule: /schedule/ || calendar? 
#sitemap: /sitemap.xml || sitemap? 
#commonweal: /404/ || heartbeat

没有标签分类

使用如下命令创建一次即可

hexo new page tags
hexo new page categories

hexo d 后 ERROR Deployer not found: git

站点根目录下执行命令安装

npm install --save hexo-deployer-git

以上是关于Hexo搭建个人博客的主要内容,如果未能解决你的问题,请参考以下文章

使用Node.js+Hexo+Github搭建个人博客(续)

hexo+github个人博客搭建

基于 Hexo 从零开始搭建个人博客

hexo+github pages搭建个人博客

Hexo+Github搭建个人博客

Hexo+gitte个人博客搭建教程