VPS Centos7安装Git服务器,部署Hexo静态博客

0. 写在前面

之前博客是放在共享主机上的,Hexo生成静态网页文件后,就用ftpsync同步到主机上。按说这种方式也挺方便的,配置好后就能很轻松的发布博客。

刚好最近入手了一个VPS,简直是一个超耐玩的玩具。为了学习使用git,不如就顺便装个git服务器用来同步文件,还能顺便挂上Hexo生成的文件。毕竟VPS还是比共享主机自由太多。

0.1. 当前环境

VPS装的是Centos7,已经安装了LAMP,虽然并不需要这么复杂。

本地的电脑用的是Win7,已经安装了Node.js和Hexo

1. 自己电脑上的配置

首先需要安装git,然后生成ssh密钥连接服务器,最后设置hexo的部署方式。

1.1. 安装git

git的官网下载git的Windows安装程序,一路默认安装。其中我选择了只在git bash中使用git,因为个人不太中意windows的cmd。

安装好后,在git bash中输入要使用的用户名和邮箱[[1]][^ref1]

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

1.2. 生成ssh密钥

进入C:\Users\用户名\.ssh文件夹,如果安装过github desktop的话,里面已经有github用的ssh密钥了。不过现在需要生成的是git连接到vps用的ssh密钥,如果没有.ssh文件夹就新建一个。在这个文件夹内右键选择Git Bash Here,在bash中输入:

ssh-keygen -t rsa -C "[email protected]"

根据提示可以自订文件名(默认生成id_rsa和id_rsa.pub),添加pass phrase,以免万一密钥被别人拿到后直接使用。

1.2.1. 配置config文件

由于ssh默认端口是22,每次连接vps都会看到几百次的登录失败记录。安全起见,我把ssh的端口改了,例如改成123。

但是这里git也会默认使用22端口连接vps,所以需要添加一个config文件引导git去改过的端口。

C:\Users\用户名\.ssh文件夹下,新建一个文件名为config,文件内输入:

host xx.xx.xx.xx
hostname xx.xx.xx.xx
port 123

这样后面测试git的时候就不会出现连不上的问题。

2. VPS的配置

首先需要安装web服务器,这台vps已经事先安装好lamp。
其次就是安装git,添加账户和仓库,然后就可以设置hooks使每次更新提取网页文件到站点目录里。

2.1. 在Centos7上安装git

yum install git

2.2. 添加git用户和设置权限

这里参考了Mcosx同学的方法给git用户设置权限[[2]][^ref2],首先用putty登录vps,输入:

useradd git
passwd git

然后给新加的用户git设置权限,编辑/etc/passwd将:

git:x:1003:1003:,,,:/home/git:/bin/bash

改成

git:x:1003:1003:,,,:/home/git:/usr/bin/git-shell

这样git就只能使用git-shell而不能使用bash。

2.3. git服务器打开RSA认证

vim /etc/ssh/sshd_config

在sshd_config中开启以下几项:

RSAAuthentication yes      
PubkeyAuthentication yes      
AuthorizedKeysFile  .ssh/authorized_keys

2.4. 上传公钥到vps

将本地生成的id_rsa.pub的内容复制到/home/git/.ssh/authorized_keys中。

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

2.5. 在vps上创建git仓库

把仓库放在刚才创建的git用户的文件夹下,并赋予权限:

cd /home/git
git init --bare hexo.git
chown -R git:git hexo.git

2.6. 使用hooks自动发布博客

有了这个仓库,每次从本地的电脑上写好博客后,就会发送到这个仓库里。接下来需要把仓库里的网页文件拿出来,放到站点文件夹下。这里需要使用到git的hooks中的post-receive。

新建一个文件vim /home/git/hexo.git/hooks/post-receive并添加以下代码:

#!/bin/bash -l
GIT_REPO=/home/git/hexo.git
TMP_GIT_CLONE=/tmp/blog
PUBLIC_WWW=/data/www/www.sthmicro.com/web
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/public/* ${PUBLIC_WWW}

代码的功能是每当仓库有更新后,会clone到清空过的临时文件夹,然后把临时文件夹下的网页文件(也就是public文件夹下的文件)复制到vps的站点文件夹下。

然后使之变成可执行文件,并对相应的文件夹赋予权限:

chmod +x /home/git/hexo.git/hooks/post-receive
chown -R git:git /data/www/www.sthmicro.com/web

3. 配置本地Hexo的部署方式

在hexo创建的博客文件夹下运行git bash安装hexo-deployer-git[[3]][^ref3]:

npm install hexo-deployer-git --save

在hexo创建的博客文件夹下,编辑_config.yml文件:

deploy:
  type: git
  repo:
    server: [email protected]:/home/git/hexo.git
  branch: master

之后写好博客后,就可以在git bash中运行:

hexo clean && hexo g && hexo d

本文参考了:
[^ref1]: #[1]
[1] 廖雪风的官方网站-git教程-git安装
[^ref2]: [2]
[2] hexo通过git自动部署到vps
[^ref3]: [3]
[3] 部署|Hexo

End.