作为一个天天造BUG的人,必然要经常访问谷歌等网站,所以前些日子买了VPS自己搭了梯子。但如果只是用VPS来搭梯子那就太浪费了,所以又折腾了一天,把自己之前的Hexo博客也迁移了过来,但也是踩了不少坑。今天就跟大家分享一下,如何使用VPS搭建个人Hexo博客。
准备工作
-
VPS(我使用的是Vultr,系统是CentOS 7)
-
SSH工具(远程连接你的VPS,这里使用的是PuTTY)
-
域名(在阿里云购买的,有些活动域名首年仅1元)
-
本地搭建好的Hexo博客(这里不再赘述,网上教程一大把,当然也可以参考我之前写的Hexo+码云+git快速搭建免费的静态Blog,只看里面的第一步就好)
VPS搭建Hexo博客的原理
如果上来就干,不知其所以然,那很难成功的,即使出了bug也不知道该从哪里调试。我们先来看下VPS搭建Hexo博客的基本原理,一图以蔽之:

好了,我们来稍微分析一下:
-
本地计算机方面,本地Hexo在之前准备阶段已经安装好了,所以这一块我们无需多虑。
-
服务器方面,我们需要在服务器上搭建一个Git仓库。在本地Hexo执行deploy后,博客文件会被push到这个Git仓库,然后这个仓库又会通过一个git-hooks的功能把文件同步到VPS的网站根目录,经过Nginx代理服务把网站展现给用户。
整个搭建流程
-
服务器端安装配置Git、Nodejs、Nginx。
-
创建git用户,建立git裸库,配置git-hooks。
-
配置本地Hexo,完成git自动化部署。
服务器环境搭建
以下均需要通过SSH工具连接VPS进行操作
安装Git和Nodejs
# 安装git
yum install git
# 安装Nodejs
curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
使用git --version和node --version查看,显示版本号则安装成功,
安装Nginx
yum install nginx
使用nginx -v查看,显示版本号则安装成功

配置Nginx
找到Nginx目录下的conf配置文件,执行:
# 修改前先备份一下
cp nginx.conf nginx.conf.bak
# 修改配置文件
vim nginx.conf
修改配置文件中的server部分:
server {
# 默认80端口
listen 80 default_server;
listen [::]:80 default_server;
# 修改server_name为自己之前注册好的域名
server_name www.xksblog.top xksblog.top;
# 修改网站根目录,在这里存放你的Hexo静态文件,请自行选择或创建目录
root /var/www/blog;
# 下面保持默认
# 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 -t查看配置是否有错误。
查看运行状态:systemctl status nginx,显示running表示成功运行。

创建git用户
1.创建一个git用户,并根据提示设置密码,用来专门运行git服务:
adduser git
2.赋予git用户sudo权限
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
3.切换用户,配置SSH
使用su git切换到git用户,再执行下列操作:
# 切换到git用户目录
cd /home/git
# 创建.ssh文件夹
mkdir ~/.ssh
# 创建authorized_keys文件并编辑
vim ~/.ssh/authorized_keys
# 如果你还没有生成公钥,那么首先在本地电脑中执行 cat ~/.ssh/id_rsa.pub | pbcopy生成公钥
# 再将公钥复制粘贴到authorized_keys
# 保存关闭authorized_keys后,修改相应权限
chmod 600 ~/.ssh/authorzied_keys
chmod 700 ~/.ssh
然后可以通过本地Git Bash执行ssh命令测试是否可以免密登录
ssh -v git@服务器ip地址
这样git用户就添加好了。
建立git裸库
# 回到git目录
cd /home/git
# 使用git用户创建git裸仓库,以blog.git为例
git init --bare blog.git
检查用户组权限
我们的git裸仓库已经建立好了,离成功又近了一步。为了以防万一,我们要检查一下之前的blog.git、.ssh、blog目录的用户组权限是否都为git:git
# 还记得/var/www/吗?这是之前配置nginx时,我们自己选定的网站根目录,请依据你自己的设置更改
ll -a /var/www/
ll -a /home/git/

如果有哪个不是,执行下面相应的命令后再查看
sudo chown git:git -R /var/www/blog
sudo chown git:git -R /home/git/blog.git
使用git-hooks同步网站根目录
简单来说,我们使用一个钩子文件:post-receive,每当git仓库接收到内容的时候,就会自动调用这个钩子,把内容同步到网站根目录。
在git用户下执行:
# 新建一个post-receive文件并编辑
vim ~/blog.git/hooks/post-receive
在里面输入以下内容,注意修改为自己的设置:
#!/bin/bash
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/tmp/blog
PUBLIC_WWW=/var/www/blog
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
保存退出后,执行:chmod +x post-receive赋予这个文件可执行权限。
好了,以上就是服务器端需要配置的内容。我们还差最后一步就可以完成整个部署了!
配置本地Hexo的_config.yml
非常简单,只需要找到本地Hexo博客的站点配置文件_config.yml,找到以下内容并修改:
deploy:
type: git
repo: git@你的服务器IP:/home/git/blog.git
branch: master
保存后,剩下的就是Hexo的日常操作了,这里就不赘述了,写完文章后,在你的本地博客根目录执行以下命令:
hexo clean
hexo g -d
就可以实现线上博客的自动更新了!一切搞定!
一些注意点和小坑
很多时候我们没这么幸运,博客搭建过程中总会出现无数的坑。
CentOS和Ubuntu
如果你的VPS系统是Ubuntu,那么yum命令肯定要换成apt-get。
一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat、Centos、Fedora等 2.Debian系列:Debian、Ubuntu等 RedHat 系列 1 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参数” 2 包管理工具 yum 3 支持tar包 Debian系列 1 常见的安装包格式 deb包,安装deb包的命令是“dpkg -参数” 2 包管理工具 apt-get 3 支持tar包
vim: command not found
系统自带的vim未正确安装
输入rpm -qa|grep vim命令, 如果vim已经正确安裝,会返回下面的三行代码:
root@server1 [~]# rpm -qa|grep vim
vim-enhanced-7.0.109-7.el5
vim-minimal-7.0.109-7.el5
vim-common-7.0.109-7.el5
如果少了其中的某一条,比如vim-enhanced,就用命令yum -y install vim-enhanced来安裝缺少的那一个。
如果上面的三条一条都沒有返回, 那就直接用yum -y install vim*命令吧!
Permission denied
如果git用户出现类似权限不够被拒绝访问的问题,直接试试使用sudo权限吧!
例如:在创建文件夹的时候出现权限不够的问题,最简单的解决方法就是sudo mkdir 文件夹名
但还是具体问题具体分析,多多谷歌。
一切正常,但deploy后网页无法显示
首先要查看一下服务器网站根目录下是否有Hexo的静态文件。
如果没有,说明git配置出现问题,再仔细查找配置上的原因。
如果已经传入了静态文件,说明可能是服务器nginx等环境配置出现问题,这种情况排查起来比较困难,一个简单粗暴的办法就是试试一键安装LNMP(安装方法请自行百度+谷歌)。
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构 同样还有LAMP,它代表的是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python
后记
本人也是一个Linux小白,在使用VPS搭建Hexo博客的时候,着实出现了不少头疼的问题。一步步走下来,收获颇丰。解决问题的过程,就是学习提升的过程。如果博客搭建没那么顺利,解决不了那些头疼的问题,试着稍作休息,或许灵光一闪,思路也就有了。