开始之前

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页(hexo官网文档)。

GitHub是世界上最大的代码托管平台,它也提供了GitHub Pages服务来帮助我们架设一个静态网站,这样我们就不用在单独租借一台服务器来搭建博客了。

GitHub Pages允许每个用户创建一个”yourname”.github.io的存储库,会自动为这个存储库分配一个github.io的二级域名。当然,如果你想使用自定义域名,也是可以的。

准备工作

安装Git

进入Git官网,点击Download 2.25.0 for Windows下载Git,安装的时候一路next就行了。

安装node.js

进入node.js官网,选择一个版本下载(这两个版本都可以,只是旧的比较稳定),安装的时候也是一直next就可以了(记住安装的目录,等会会用到)。

安装完成后,打开CMDcd到刚才安装node.js的目录,输入node -v然后回车,如果出现版本号,就说明安装成功了。

开始部署

部署到本地

由于我已经搭建好了,下面的教程都是使用win10自带的沙盒(Sandbox)进行演示。

打开我的电脑,随便在哪个盘符下面右键,选择Git bash,打开Git命令窗口。

在命令窗口输入npm install -g hexo-cli,安装有点慢,耐心等一下,出现下面的界面就说明安装成功了(安装hexo@3.1.0成功,耗时54.938秒)。

输入hexo init name (name这里换成你想新建的文件夹名字 我以blog为例),新建一个存放博客文件的目录并初始化,时间有点久,稍微等一下。

初始化完成之后,文件夹里面应该会有这几个文件,如果没有的话就说明初始化失败了。

cd到刚才新建的文件夹目录,输入命令npm install并回车,会报警告,不用管。出现found 0 vulnerabilities就说明没问题。

输入hexo clean && hexo g && hexo s并回车,弹出防火墙警告选择允许访问。

打开浏览器,在地址栏输入http://localhost:4000并回车即可访问hexo在本地部署好的网页文件。

只要能正常访问,就说明hexo在本地已经搭建好了,下一步我们借用GitHub Pages把hexo放到网上去,让更多人访问。

部署到GitHub

打开Github官网(没有账号的先注册登录一下),点击Create repository新建一个存储库。

这个存储库名称必须为yourname.github.io(yourneme是你的用户名),我的用户名是xiaoxiaoxin那么我的存储库名字就是xiaoxiaoxin.github.io,勾选public公开这个存储库,并在下面的方框打勾,然后点击Create repository创建。

创建完成后点击Settings打开设置,找到GitHub Pages,确认你的界面和下图的一样,如果不一样就在source下面选择master


在浏览器地址栏输入你的存储库名字并回车,如果网页上出现了你的存储库名字,就说明GitHub Pages已经生效了,可以继续下一步。

链接GitHub和git

打开你博客在本地的目录,右键单击选择Git bash
输入git config --global user.name "你的用户名"并回车,我的用户名是xiaoxiaoxin那么我就输入git config --global user.name "xiaoxiaoxin"
再输入git config --global user.email "你的注册邮箱"并回车,我的注册邮箱是2775714150@qq.com那么我就输入git config --global user.email "2775714150@qq.com"

1
2
git config --global user.name "你的用户名"   #验证用户名
git config --global user.email "你的邮箱" #验证邮箱

输入ssh-keygen -t rsa -C "你的注册邮箱"并回车 生成一个密钥文件,我的注册邮箱是2775714150@qq.com那么我就输入ssh-keygen -t rsa -C "2775714150@qq.com"注意:这里的C为大写)。回车之后再连跟三个回车,红框那里表示密钥文件所在的目录。

打开密钥文件所在的目录,用记事本打开id_rsa.pub这个文件,然后全选所有内容并复制。

回到GitHub点击Setting,找到Deploy keys,点击右上角的Add Deploy keys添加密钥。

Title这个名称随便写,留空也可以。下面的key文本框里面填入你的密钥,勾选下面的Allow write access,然后点击Add key添加。

回到Git bash,输入ssh git@github.com并回车,可能会要你输入yes或者no,输入yse,出现You've successfully authenticated就代表成功了。

打开你hexo的本地文件夹,找到_config.yml这个文件,用记事本打开,在文本最后面修改

1
2
3
4
deploy:
type: git
repo: https://github.com/yourname/yourname.github.io.git # "yourname"这里输入你自己的用户名
branch: master

冒号必须为小写,而且后面必须跟空格,修改之后记得保存了再关闭

安装Git部署插件,这个插件会把hexo生成的静态网页推到GitHub上面去,在Git bash中输入下面的命令

1
npm install hexo-deployer-git --save

安装完成过后接着输入下面的命令,可能会弹出窗口来要你登录,输入账号密码登录就行了。出现INFO Deploy done: git就说明推送成功。

1
hexo clean && hexo g && hexo d

打开你的浏览器,在地址栏输你GitHub存储库的名字,然后回车。不出意外的话,已经可以访问到你的博客了。

Hexo常用命令

1
2
3
4
5
hexo clean       #清除生成的静态网页文件
hexo g #生成静态网页文件 地址在"你的文件夹"/public
hexo s #在本地部署服务器,通过localhost:4000访问
hexo d #将生成的静态网页文件推送到云平台上面
ctrl+c #取消本地部署或者撤销上一步操作

Hexo部署到GitHub就完成了,Hexo默认的主题啊还是挺不好看的emmmm,关于修改站点配置和主题呢在度娘和Google上面都有教程,只有你有时间有耐心,做出来一个精致的博客还是挺容易的。

部署到个人服务器

众所周知啊,GitHub在国外的访问速度很快但是在国内的访问速度是很慢的,并且时不时还会抽风,为了使我们博客在国内的访问速度也能快一点,我们可以把Hexo同时部署到国内的个人服务器上,加快国内访问速度。

  1. 首先通过SSH登录到你的服务器,推荐使用Xshell

  2. 服务器上安装Git

    1
    yum install -y git
  3. 创建Git用户并切换

    1
    2
    3
    useradd git                            #新建一个Git用户
    passwd git #创建密码
    su git #切换到Git用户

  4. 配置仓库

    1
    2
    3
    4
    5
    6
    cd /home/git/                   #回到git的首目录
    mkdir -p hexo/blog #项目所在的目录
    cd hexo
    git init --bare blogn.git #创建一个仓库
    cd blogn.git/hooks
    vim post-receive #创建hook钩子函数,输入下面的内容
    1
    2
    #!/bin/sh
    git --work-tree=/home/git/hexo/blog --git-dir=/home/git/hexo/blogn.git checkout -f

    vim编辑器不会用的点这里

    添加完成后修改权限

    1
    2
    3
    chmod +x post-receive
    exit #退出到root登录
    chown -R git:git /home/git/hexo/blogn.git #给git用户添加权限
  5. 测试git仓库是否可用,找一个空白文件夹。

    1
    git clone git@your_ip:/home/git/hexo/blogn.git     #"your_ip"这里输入你服务器的IP地址

    会要你输入密码,输入你git用户的密码,如果能拉下来一个.git的文件夹(记得打开显示隐藏文件),就说明成功了。

  6. 通过密钥建立ssh信任关系,用刚才绑定GitHub的密钥就可以了。在本地博客目录里面打开Git bash输入下面的命令。

    1
    2
    3
    ssh-copy-id -i C:/Users/yourname/.ssh/id_rsa.pub git@your_ip       # "yourname"输入你电脑本地的用户名,不知道的打开目录看一下。"your_ip"输入你服务器的IP地址

    ssh git@your_ip # 测试能否登录

    此时ssh登录git账户应该时不要密码的,如果需要密码,那么请重复4-6步。

安装Nginx

安装之前我们先安装Centos系统的各种依赖包,避免等会安装的时候报错。

1
2
3
4
yum -y install gcc         #安装gcc(c)编译器
yum install pcre pcre-devel #安装PCRE
yum install zlib zlib-devel #安装zlib
yum install openssl openssl-devel #安装OpenSSL
  1. 下载并安装nginx

    1
    2
    3
    4
    5
    6
    7
    8
    cd /usr/local/src
    wget http://nginx.org/download/nginx-1.15.2.tar.gz
    tar xzvf nginx-1.15.2.tar.gz
    cd nginx-1.15.2
    ./configure #如果后面还想要配置 SSL 协议,就执行后面一句!
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
    make && make install
    alias nginx='/usr/local/nginx/sbin/nginx' #为 nginx 取别名,后面可直接用

    如果执行make && make install报错No rule to make target build', needed by default'. Stop.那就说明之前的依赖包没装,请安装后重试。

  2. 修改nginx配置文件
    先启动看看是否安装成功,输入nginx回车,刚才已经取别名了,现在输入nginx就可以直接调用。

    1
    nginx     #浏览器地址栏输入你服务器的ip地址 默认端口为80 记得放行端口

    出现Welcome to nginx!就代表安装成功了。

    修改配置文件

    1
    2
    3
    4
    5
    6
    nginx -s stop // 先停止nginx
    cd /usr/local/nginx/conf
    vi nginx.conf
    修改 root 解析路径,改为blog文件所在的目录,如下图
    同时将 user 改为 root 如下图,不然nginx无法访问 /home/git/hexo/blog
    nginx -s reload #重启nginx


  3. 修改站点配置文件

    打开博客本地目录里面的_config.yml文件,拉到最下面,修改deploy
    照着下面写就行了,如果你没有部署到GitHub,那么github那一行你不用写。

    1
    2
    3
    4
    5
    6
    deploy:
    type: git
    repo:
    github: https://github.com/xiaoxiaoxin/xiaoxiaoxin.github.io.git #如果有部署到github上面,这里一定要换成你自己的用户名
    txyun: git@yourname:/home/git/hexo/blogn.git #yourname这里写入你自己的服务器ip地址 假如我的IP地址是1.1.1.1 那么我就写 git@1.1.1.1:/home/git/hexo/blogn.git
    branch: master
  4. 推送到云平台

    在本地博客目录下,单击右键打开Git bash,输入hexo clean && hexo g && hexo d,可以看到,hexo往Github和我们的云服务器都推送了网页文件。

    在浏览器地址栏输入你的ip地址并回车,应该就可以访问你的博客了。

最后

到现在呢,我们已经成功了搭建好了一个基于Hexo的个人博客,并且双线部署到了我们的GitHub和云服务器上。

关于自定义域名访问以及后续的主题美化,度娘和Google上面都有很多教程,绝大部分的坑都已经有人填过了。

本文部分教程转载自掘金 lawler61,感谢大佬。