使用 Git Hook 自动部署 Hexo 到个人 VPS
安装 Hexo
既然我的标题都已经那样写了,当然这个小节就不是本篇文章的重点了。
关于 Hexo 的安装跟配置,其实网上已经有很多很多文章了,随便一搜一大把。这里就有一篇超详细的,大家可以参考一下。
但是,网上的教程大多数都是直接将 Hexo 部署到 Github Pages 上面的,虽说这种方法很方便,也很主流,但是用别人的东西难免会有各种各样的限制。再加上我已经有一个 VPS 了,当然希望直接使用自己的服务器来部署博客了。
要把 Hexo 部署到自己的 VPS 上面,最直观的做法就是,在本机上先 hexo generate
,然后再将生成的静态 HTML 文件通过 ftp
或者其它工具上传到服务器上。这种方法虽说很直观,但是操作起来其实很繁琐,比之前直接操作 wordpress 后台还要麻烦很多,而且也很容易出错,一不小心就心出于丢失文件等问题。当然,最重要的一点还是,这一点也不 geek。用了 hexo 这么酷的系统来写博客,却要那样来手动部署不是显得弱爆了么。
经过我的一番搜索,终于找到一种很方便的方法,那就是使用 git hooks 来实现自动化部署。
配置服务器远程 Git
大家都知道 Git 是分布式的版本控制系统,远程仓库跟本地仓库是没有什么不同的。
我的 VPS 系统是 Ubuntu 14.04 的,在 Ubuntu 上配置 Git 是相当简单的。
第一步
安装 git
:
1
|
$ sudo apt-get install git
|
第二步
创建一个 git
用户,用来运行 git
服务:
1
|
$ sudo adduser git
|
虽说现在的仓库只有我们自己在使用,新建一个
git
用户显得不是很有必要,但是为了安全起见,还是建议使用单独的git
用户来专门运行git
服务
第三步
创建证书登录,把自己电脑的公钥,也就是 ~/.ssh/id_rsa.pub
文件里的内容添加到服务器的 /home/git/.ssh/authorized_keys
文件中,添加公钥之后可以防止每次 push 都输入密码。
如果你之前没有生成过公钥,则可能就没有
id_rsa.pub
文件,具体的生成方法,可以参考这里。
第四步
初始化 Git 仓库,我是将其放在 /var/repo/blog.git
目录下的:
1
2
3
|
$ sudo mkdir /var/repo
$ cd /var/repo
$ sudo git init --bare blog.git
|
使用 --bare
参数,Git 就会创建一个裸仓库,裸仓库没有工作区,我们不会在裸仓库上进行操作,它只为共享而存在。
第五步
配置 git hooks,关于 hooks 的详情内容可以参考这里。
我们这里要使用的是 post-receive
的 hook,这个 hook 会在整个 git 操作过程完结以后被运行。
在 blog.git/hooks
目录下新建一个 post-receive
文件:
1
2
|
$ cd /var/repo/blog.git/hooks
$ vim post-receive
|
在 post-receive
文件中写入如下内容:
1
2
|
#!/bin/sh
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f
|
注意,/var/www/hexo
要换成你自己的部署目录,一般可能都是 /var/www/html
。上面那句 git 命令可以在我们每次 push 完之后,把部署目录更新到博客的最新生成状态。这样便可以完成达到自动部署的目的了。
不要忘记设置这个文件的可执行权限:
1
|
chmod +x post-receive
|
第六步
改变 blog.git
目录的拥有者为 git
用户:
1
|
$ sudo chown -R git:git blog.git
|
第七步
禁用 git
用户的 shell 登录权限。
出于安全考虑,我们要让 git
用户不能通过 shell 登录。可以编辑 /etc/passwd
来实现,在 /etc/passwd
中找到类似下面的一行:
1
|
git:x:1001:1001:,,,:/home/git:/bin/bash
|
将其改为:
1
|
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
|
这样 git
用户可以通过 ssh 正常使用 git,但是无法登录 sehll。
至此,服务器端的配置就完成了。
本地配置
配置你的 hexo 博客可以自动 deploy 到服务器上,再也不用 ftp 上传了。
修改 hexo 目录下的 _config.yml
文件,找到 [deploy] 条目,并修改为:
1
2
3
4
|
deploy:
type: git
repo: git@www.swiftyper.com:/var/repo/blog.git
branch: master
|
要注意切换成你自己的服务器地址,以及服务器端 git 仓库的目录。
本地配置就是如此地简单。至此,我们的 hexo 自动部署已经全部配置好了。
使(zhuang)用(bi)
从此以后,要发新博客的步骤不要太简单:
1
2
3
4
5
|
$ hexo new "new-post"
# bla..bla..bla..
$ hexo clean && hexo generate --deploy
|
有没有很酷很方便,一条命令就可以将博客自动部署到自己的 VPS 上了,开始快乐地写博客吧。
使用 Git Hook 自动部署 Hexo 到个人 VPS的更多相关文章
- git hook 自动部署
1. 当前虚拟站点根目录的 .git/ 权限 2. 当前项目裸仓库创建 hooks/post-receive 文件,并给予x 的权限 3. 复制如下内容 #!/bin/sh unset $(git r ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)
前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)
前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...
- 做了一个简易的git 代码自动部署脚本
做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08) 阅读(200 ...
- 使用Travis CI自动部署Hexo博客
自从使用GitHub Pages和Hexo来发布博客之后,不得不说方便了许多,只需要几个简单的命令博客就发布了.但在不断的使用中发现每次的发布操作也挺耗时的. 我一般的操作是将平时整理好的md文件放到 ...
- 使用Travis CI自动部署Hexo到GitHub
原文链接(转载请注明出处):使用Travis CI自动部署Hexo到GitHub 前言 使用 hexo + gitPages 搭建个人博客的人都知道,每当要发表一篇博文,第一步得手动使用 hexo g ...
- 用GitHub Actions自动部署Hexo
什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...
- 利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客
目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下. 下面是整个流程的示意图: 1. 准备工作,搭建LNMP ...
- 搭建git服务器及利用git hook自动布署代码
注意:服务器:Ubuntu Server 14.04,我的项目比较小,所有操作都使用root,建议最好新建一个用户(需要有管理员权限,否则在后面使用hooks自动部署代码时会出现各种权限问题,很蛋疼的 ...
随机推荐
- 如何设置Eclipse工作区默认编辑宽度
1)打开Window => Preferences窗口 2)打开Formatter属性页从Java => CodeStyle => Formatter 3) 单击New创建一个自己 ...
- java如何使用base64生成图片文件
import org.apache.commons.codec.binary.Base64; public static void decodeFile(String base64Str,File f ...
- 新增form表单,post提交.2
- LINQ中的连接(join)用法示例
Linq中连接主要有组连接.内连接.左外连接.交叉连接四种.各个用法如下. 1. 组连接 组连接是与分组查询是一样的.即根据分组得到结果. 如下例,根据publisther分组得到结果. 使用组连接的 ...
- 关于#ifndef以及#ifndef WIN32
一般用法是这样的: 这里可以定义如下: #define XXXXX #ifdef XXXXX 这里做一些操作,这些操作只有在XXXX已经被define的情况下才会执行到.一般还可能有else,如 #e ...
- Eclipse Tomcat插件的使用
目录 Eclipse Tomcat插件的使用 Eclipse Tomcat插件的使用 我使用的Eclipse版本是:4.6.3 Eclipse已经自带Tomcat插件,不需要再自己进行安装 1.新建T ...
- Meaning of “const” last in a C++ method declaration?
函数尾部的const是什么意思? 1 Answer by Jnick Bernnet A "const function", denoted with the keyword co ...
- oracle goldengate安装
1.ftp工具上传ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip分别到source和target服务器 [oracle@localhost mnt]$ ll ...
- rac数据库单连接报错ora-12537解决办法
1.现象如下: C:\Users\Administrator.DBA-PC>sqlplus sys/oracle@192.168.100.33:1521/orcl as sys dba SQL* ...
- 转载 io多路复用
作者:ZingpLiu 出处:http://www.cnblogs.com/zingp/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 回到 ...