使用Hexo在本地构建博客,然后通过Git,将构建好的页面同步到VPS。VPS中利用Git的Hook,自动将Git收到的内容部署到Nginx中配置的根目录。此时访问域名或IP就能看到之前构建好的页面了。
此处选用Nginx 主要是考虑资源占用。一般情况下Nginx的比Apache的要低一些。安装Nginx:
1 | sudo yum install epel-release |
其中epel-release为企业版Linux附加软件包的release版(EPEL for Extra Packages for Enterprise Linux)。
Nginx安装好之后需要一些配置。Nginx的原理大致是监听对服务器某个端口的访问,然后将其重新关联到其他的位置。此处需要配置Nginx监听80端口(HTTP端口),将其定为到访问VPS中的Hexo目录,从而实现访问IP或域名时,展示的是博客页面。
首先在/var/www位置下新增一个目录,用于存放构建好的、访问用的Hexo页面:
1 | sudo mkdir /var/www/hexo_blog |
然后找到Nginx的配置文件:
1 | /etc/nginx/nginx.conf |
使用VIM编辑。如果没有VIM可以使用VI。另外记得用sudo或root权限编辑。
1 | sudo vim /etc/nginx/nginx.conf |
修改其中的server部分,让其监听80端口,然后转发到新建的hexo_blog目录:
1 | server { |
Nginx配置好后,就可以启动了:
1 | sudo nginx |
到此Nginx已经配置好(够用)。如果想要测试话,可以在/var/www/hexo_blog目录中新增一个index.html文件,然后访问IP或域名测试一下。
Hexo提供了很多种方式来部署博客,因为比较熟悉Git故使用Git来操作。
首先需要安装Git:
1 | sudo yum install git |
安装好后需要新建一个目录,用于接收远程提交过来的页面。此处选择在当前用户(非root)的Home目录新建。有些教程中会要求新建一个Git用户,不过该步骤非必须。
安装好Git后需要新增一个Git目录,作为Hexo部署时的Git Repository:
1 | cd ~ |
接下来配置Git的Hook,使用其中的post-receive方式,使得Git在收到远程的推送、接收文件后,自动执行post-receive 中定义的操作。此处我们配置,使其自动将文件同步到/var/www/hexo_blog。
首先找到post-receive的位置:
1 | ~/hexo_blog.git/post-receive |
如果没有可以新增一个。不过以下的流程也会自动创建(通过VIM)。
使用VIM编辑其中的配置:
1 | vim ~/hexo_blog.git/post-receive |
此处有一个小坑。如果当前这样配置的话,届时post-receive会用登录时的用户(非root)来执行。而此前我们在/var/www/目录中创建hexo_blog时使用了sudo,hexo_blog的owner是root:root。这种情况下用户(非root)调用post-receive会失败。故需要修改/var/www/hexo_blog的owner为当前用户:
1 | sudo chown {$USER}:{$USER} /var/www/hexo_blog |
至此Git的安装配置也已经完成。
以下使用macOS环境。
首先安装Node.js。macOS环境下可以使用Homebrew来安装。
在终端中操作:
1 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
在终端中操作:
1 | brew install node |
在终端中操作:
1 | npm install hexo-cli -g |
此处已经完成了Hexo的安装,接下来就是相关的配置了。
首先新建一个Hexo的目录结构。在选定的目录下执行:
1 | hexo init hexo_blog |
目录建好之后,编辑其中的配置,使用其中的Deploy(部署)配置来将生成的博客页面推到之前配置好的VPS中:
1 | vim hexo_blog/_config.yml |
此处有三个坑:
如果直接这样配置,然后终端中执行hexo d,会报错。原因是没有安装Hexo执行Git部署的工具hexo-deployer-git。在终端中执行以下命令即可:
1 | npm install hexo-deployer-git --save |
如果你的VPS的SSH端口为非22的端口,那么在配置repo的Git Repository信息时,可以使用ssh的方式来设置端口号:
1 | repo: ssh://用户名@VPS的IP地址:端口号/~/hexo_blog.git |
如果当前这样配置,每次执行部署时,需要输入VPS SSH登录的密码。想要不在每次都输密码,解决方式是使用证书登录。本地生成公钥放到VPS中,此后访问VPS时会自动判断远端的公钥和本地的私钥是否匹配,如果匹配就不需要密码直接登录了。这种方式的前提是本地得有私钥,安全问题可以放心(实际上比密码方式可能更安全一些)。接下来就是终端操作了:
1 | ssh-keygen -t rsa -c "此处输入注释,用于区分多个证书的情况" |
执行完后在终端中查看~/.ssh目录,可以看到一组私钥和公钥id_rsa和id_rsa.pud,其中id_rsa.pud即是公钥。
接下来需要将该公钥上传到VPS中。此处有一个简单的命令可以执行这个动作:
1 | ssh-copy-id ~/.ssh/id_ras.pub 用户名@VPS地址 -P VPS的SSH端口 |
以上完成后,所有的安装、部署配置就已经完成了。接下来就可以测试一下了。
进入本地的Hexo目录后,执行以下命令:
1 | hexo d |
此时Hexo会自动执行hexo g(enerate),生成网页,并通过配置好的deploy配置,推送到远端的VPS中。如果之前已经生成过,可以先执行hexo clean,然后再操作一次。