使用 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自动部署代码时会出现各种权限问题,很蛋疼的 ...
随机推荐
- Android Thread Handler UIHandler demos
extends:http://blog.csdn.net/superjunjin/article/details/7540064 序效果:为了显示如何用message传值的简单例子 例1,点击按钮,持 ...
- gradle多项目 svn依赖
当svn有多个子项目且没有根项目的时候,用eclipse拷贝下来是容易出问题的,经常子项目之间的依赖会有问题,还是推荐用IDEA. 操作说明: 如果SVN有 A,B,C,D四个项目,A为web项目,B ...
- 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置
1. 无关Cookie跨域Ajax请求 客户端 以 Jquery 的 ajax 为例: $.ajax({ url : 'http://remote.domain.com/corsrequest', d ...
- 详探TextRange对象--查找与选择(转载)
TextRange对象是动态HTML(DHTML)的高级特性,使用它可以实现很多和文本有关的任务,例如搜索和选择文本.文本范围让您可以选择性的将字符.单词和句子从文档中挑选出来.TextRange对象 ...
- pta 习题集5-17 家谱处理
人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究.实验中,使用计算机处理家谱.为了实现这个目的,研究人员将家谱转换为文本文件.下面为家谱文本文件的实例: John Robert F ...
- Ora-1157 ora-1110错误解决案例一枚
1.数据库打开报错如下: SQL> alter database open; alter database open * ERROR at line 1: ORA-01157: cannot i ...
- Python开发【模块】:matplotlib 绘制折线图
matplotlib 1.安装matplotlib ① linux系统安装 # 安装matplotlib模块 $ sudo apt-get install python3-matplotlib # 如 ...
- 怎么应对 domino文档损坏然后损坏文档别删除导致数据丢失
对于domino 有个机制是同步 ..然后如果文档被损坏之后会通过同步或者压缩 之类的 然后将损坏文档删除 那么这样就有个风险..知识管理文档会被删除. 并且删除了之后管理员如果不仔细看日志的话也不会 ...
- List的三个子类ArrayList,LinkedList,Vector区别
一:List的三个子类的特点 ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高.Vector: 底层数据结构是数组,查询快,增删慢. 线程安全,效率低.Vector相对A ...
- 8.python中双冒号(::)的用法
s[i:j:k]是,根据该“片第从i到j与第k步”.何时i和j缺席,整个序列是和s[::k]意思是“每k个项目”. 示例 首先,让我们来初始化一个列表: >>> s = range( ...