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.