VPS上用Hexo搭建博客

这篇文章记录了自己折腾VPS搭建Hexo的过程。之前的博客是由Jekyll搭建并托管在Github上的,而VPS只是用来科学上网。总想着把VPS的作用发挥起来,其中之一就是搭建网站。当初建博客时在Jekyll和Hexo之间犹豫过,因为Github Pages原生支持Jekyll网站生成,所以就选择了它。在决定把博客移到VPS上时,想过用Django等更复杂的语言从头编写,但对于我来说学习成本较高,没有这个必要。目前来看Hexo的效率似乎是比Jekyll更高,如果只是想简单建个写东西的地方,主题设置也更简单些。

基础配置

VPS

我选择的DigitalOcean,每月5美金的VPS,申请过程可以参照我之前的一篇博文,网上教程也很多。

如果不想用付费VPS,也可以选择Github Pages或者其他免费的代理服务。但我觉得很多时候还是付费的东西用着安心。

域名

这部分不是必须的,但作为VPS上博客的入口,有个像样的、个性化的域名还是很有必要的。不然每次都在浏览器输入IP地址。。。也不是不可以。
我是在Godaddy上注册的域名,再通过DNSpod设置绑定到VPS服务器上。可以参考
这篇中的进阶修改部分。

搭建过程

搭建过程分为两部分,一部分在本地电脑上配置,另一部分则在服务器端进行,大致需要完成的工作是在本机安装Hexo和Git ,并在 VPS 上安装 Nginx 服务器、配置 Git Hooks 以实现更新。

本地配置

安装Node.js

在 Node.js 官网下载最新版,一路默认安装。

安装 Git

下载Git for Windows ,一路默认安装。

创建网站目录

在任意位置创建一个文件夹,作为网站目录,并通过cmd中cd命令进入文件夹(或者在文件夹按shift+右键,在此打开命令窗口)。

本地安装 Hexo

国内通过npm安装速度较慢,可以先把安装源设置成taobao的镜像。

1
npm config set registry http://registry.npm.taobao.org
1
2
3
4
5
$npm install -g hexo-cli
$hexo init
$npm install
$hexo g
$hexo serve

打开 http://localhost:4000 即可看到你的站点(当然还没有发布到网络)。

本地 Git 配置

同样在cmd中进入该文件夹,之后执行

1
2
3
$git init
$git add .
$git commit -m "Initial commit"

修改**_config.yml**

在hexo文件夹下有配置文件**_config.yml**,找到[deploy]并修改

1
2
3
deploy:
type: git
repo: git@your_IP:/home/git/repos/example.com/,master

VPS

连接VPS ,Windows 用户可以使用cmd和ssh root@ip连接你的服务器,也可以使用 Putty(网上下载, 优点是可以使用右键粘贴)

1
2
3
4
5
6
7
8
9
$apt-get update && apt-get upgrade -y
$apt-get install git-core -y
$curl -sL https://deb.nodesource.com/setup | bash
$apt-get install nodejs -y
$apt-get install nginx -y
$cd /etc/nginx/sites-available
$rm -rf default
$touch example.com
$vi example.com

在其中输入如下内容(点击i进行编辑)并保存退出(先按Esc,再输 :wq),注意 IP 和 example 需替换

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 your_IP:80 ;
root /var/www/example.com;
server_name example.com;
access_log /var/log/nginx/example_access.log;
error_log /var/log/nginx/example_error.log;
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /var/www/example.com;
access_log off;
expires 1d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
root /var/www/example.com;
access_log off;
expires 10m;
}
location / {
root /var/www/example.com;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}
}

之后执行

1
$ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

创建git用户

这一步可能不是必要的,因为vps主要是个人使用,有个root账户也够用。主要是要把本地电脑的ssh公钥添加到服务器上,以防止将来每次deploy都需要输入密码。

1
$sudo adduser git -ingroup sudo

配置VPS端GIt

1
2
3
4
5
6
7
$cd ~
$mkdir repos && cd repos
$mkdir example.com.git && cd example.com.git
$git init --bare
$cd hooks
$touch post-receive
$vi post-receive

在其中输入如下内容并保存

1
2
3
4
5
6
7
8
#!/bin/bash -l
GIT_REPO=/home/git/repos/example.com.git
TMP_GIT_CLONE=/home/git/tmp/hexo_tmp
PUBLIC_HEXO=/var/www/example.com
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_HEXO}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_HEXO}

最后执行

1
2
3
$chmod +x post-receive
$cd ~
$service nginx restart

如果restart失败,可能需要转回root账户再试一次。

在本地博客目录下运行

1
hexo deploy

把本地的博客部署至服务器端。

至此,博客框架应该已经完成了,可以通过你的域名或者ip地址访问试试。