因为之前的 WordPress 博客域名被墙,加上 Hexo 正好满足于简单的书写要求,所以更换为 Hexo。

主要还是记录了自己的搭建过程,因为对 Linux 不太熟悉,以备忘为主。

后面换到了Coding Pages 上搭建,主要是简单方便省心,自带了 https,速度也凑合。

方法一:

本地搭建

安装 node.js

1
$ brew install node

安装 Hexo

先cd进入创建好的hexo目录:

1
2
3
4
5
$ sudo npm install -g hexo-cli
$ hexo init
$ npm install
$ hexo d -fg
$ hexo serve

打开http://localhost:4000如果看到hexo的初始页面证明安装成功。

ssh 秘钥

一路回车生成公钥和私钥:

1
$ ssh-keygen -t rsa -C "email@example.com"

之后在本地目录 ~/.ssh/ 下可以看到私钥 id_rsa 和公钥 id_rsa.pub 已经生成。

安装 ssh-copy-id 等会用,方便上传公钥。

1
$ brew install ssh-copy-id

VPS 端搭建

更新与安装(centOS)

1
2
3
$ yum update
$ yum install nginx -y
$ yum install git-core

创建 git 用户及设置 ssh 免密码登陆

1
2
3
4
5
6
$ adduser git
$ passwd git
$ chmod 740 /etc/sudoers
$ vim /etc/sudoers
(提示没有安装vim的可以用vi命令,或安装vim:)
$ yum -y install vim*

在编辑器中找到以下内容并添加一行:

1
2
3
## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
git     ALL=(ALL)     ALL (这行是添加的)

保存退出并执行:

1
$ chmod 440 /etc/sudoers

接下来切到本地的终端,上传公钥:

1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@123.123.123.123

测试一下,如果 $ ssh git@VPS的IP地址 ,能够免密码登录的话,则表示成功。

回到 VPS,创建 git 仓库:

1
2
3
4
$ su git
$ cd ~
$ mkdir hexo.git && cd hexo.git
$ git init --bare

创建网站目录并赋予 git 对网站目录的所有权

1
2
3
4
$ su root
$ cd /var/www
$ mkdir hexo
$ chown git:git -R /var/www/hexo

配置 git hooks

1
2
3
$ su git
$ cd /home/git/hexo.git/hooks
$ vim post-receive

写入以下内容:

1
2
3
4
5
6
7
8
#!/bin/bash
GIT_REPO=/home/git/hexo.git #git仓库
TMP_GIT_CLONE=/tmp/hexo
PUBLIC_WWW=/var/www/hexo #网站目录
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

然后赋予脚本的执行权限

1
$ chmod +x post-receive

配置 Nginx

启动 nginX:

1
2
3
4
5
6
7
8
systemctl status nginx.service      // 查看服务当前状态
systemctl start nginx.service       // 启动nginx服务
systemctl restart nginx.service     // 重新启动服务

systemctl enable nginx.service      // 设置开机自启动
systemctl disable nginx.service     // 停止开机自启动

systemctl list-units --type=service // 查看所有已启动的服务

然后:

1
$ vim /etc/nginx/conf.d/hexo.conf

插入如下代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
    listen         80 ;
    root /var/www/hexo;//这里可以改成你的网站目录地址,我将网站放在/var/www/hexo
    server_name example.com www.example.com;//这里输入你的域名或IP地址
    access_log  /var/log/nginx/hexo_access.log;
    error_log   /var/log/nginx/hexo_error.log;
    location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
            root /var/www/hexo;
            access_log   off;
            expires      1d;
    }
    location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
        root /var/www/hexo;
        access_log   off;
        expires      10m;
    }
    location / {
        root /var/www/hexo;//这里可以改成你的网站目录地址,我将网站放在/var/www/hexo
        if (-f $request_filename) {
            rewrite ^/(.*)$  /$1 break;
        }
    }
}

然后重启nginx,此时刷新网页应该显示的是403。

本机的最后配置

位于 hexo 文件夹下,_config.yml,修改 deploy 选项,例如:

1
2
3
4
deploy:
  type: git
  message: update  # 这个可以不写,会默认生成update日期
  repo: git@123.123.123.123:hexo.git,master # 逗号后面写分支

部署到多个仓库可以这么写:

1
2
3
4
5
deploy: 
  - type: git
    repo: git@git.coding.net:Dvel/Dvel.git,master
  - type: git
    repo: git@github.com:iDvel/Dvel-Hexo.git,master

每次更新博客也可以让github上长点绿草了。。。

接下来安装 hexo-deployer-git ,否则部署时会报这个错”ERROR Deployer not found: git“。

1
$ npm install hexo-deployer-git --save

接着$ hexo g && hexo d,如果一切正常,静态文件已经被成功的push到了blog的仓库里。

期间我忘了还出了个什么错,删除hexo目录下的.deploy_git后再次hexo g && hexo d就可以了。

以上,博客已经完全建好了。

$ hexo generate是生成静态文件。

$ hexo deploy是部署,我们这里选择了Git,Hexo还支持其他部署形式。

所以每次写完文章,执行这两个命令后,就对网站完成了更新。

简化操作就是:$ hexo g && hexo d ,再简化就是$ hexo d -g,效果一样。

方法二,利用一键安装包

因为不太熟悉 Linux,所以我选择了一键安装包,多站点管理方便些。

我用的这个 -> OneinStack官网

步骤和上面差不多,但是很多路径要改一下,也可以很简单的搭建出Hexo。

方法三,Coding Pages

  1. coding 中创建项目

  2. 站点配置文件_config.ymldeploy 中写好 coding 项目的 git 地址

  3. push 上去:$ hexo d -g

  4. 在 coding 上你的项目,开启 Pages 服务:可以自定义分支,绑定域名,开启 https

  5. 大功告成

这个相对简单一些,Coding Pages 服务目前提供 100M 空间的支持,一般来说没有写文章的话,生成的 public 文件夹大约小于5M。

100M 基本够写很多年的博客,至于图片应该另寻图床,不要放到 coding 上,否则空间很快用完。

编写文章、更新博客

使用一款 MarkDown 编辑器写文章 ,写完后将文件以 *.md 的格式保存在本地 [网站目录]\source_posts 中。

Markdown 编辑器,强烈安利 Typora。

每篇 Blog 都有固定的参数必须填写,参数如下,注意每个参数的 : 后都有一个空格。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
title: title
date: yyyy-mm-dd
categories: category  
tags: tag
#多标签请这样写:  
#tags: [tag1,tag2,tag3]
#或者这样写: 
#tags:
#- tag1 
#- tag2  
#- tag3  
---  
正文  

或者使用 $ hexo new 命令,具体官网有详细说明。

编写完后,只需要在hexo文件夹下执行 hexo g && hexo d,博客即可更新。

遇到的坑

设置了 ssh 免密码登陆后,依然需要密码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
这整段是以前使用的方法,过时了。。。
设置ssh免密码登陆:
su git
cd ~
mkdir .ssh && cd .ssh
touch authorized_keys
vim authorized_keys  //在这个文件中粘贴进刚刚申请的key(在id_rsa.pub文件中)
设置权限:
chmod o-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

测试免密码登陆
ssh -vvT git@123.123.123.123   // 你的VPS的IP地址
发现依然需要密码,搜了好几天没找到解决办法,后来采用了ssh-copy-id,解决了这个问题。

如果过程中重新初始化过 VPS 的磁盘,ssh 连接 VPS 的时候可能会提示 Host key verification failed.
运行此命令即可:$ ssh-keygen -R 123.123.123.123,将 123.123.123.123 改成你的 VPS 的 IP。
或者简单粗暴直接删除 known_hosts 文件。

参考&感谢