使用 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自动部署代码时会出现各种权限问题,很蛋疼的 ...
随机推荐
- RMAN概述及其体系结构
1 Recovery Manager(RMAN)特性 是一种用于集备份(backup).还原(restore)和恢复(recover)数据库于一体的Oracle 工具,支持命令行及图形界面操作 能够备 ...
- javaWeb项目springMVC框架下利用ITextpdf 工具打印PDF文件的方法(打印表单、插入图片)
方法一:打印PDF表单以及在PDF中加入图片 需要的资料: jar包:iTextAsian.jar ,itext-2.1.7.jar: 源码: public static void main(Stri ...
- postgresql----字符串函数与操作符
函数 返回值类型 描述 示例 结果 string||string text 字符串连接 select 'Post'||'gresql'||' good!'; Postgresql good! stri ...
- C#6.0语法特性
1.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Na ...
- EasyUI +MVC +EF实现增删改查
OA项目的框架已经搭建好了,接下来就是在这个框架下完成相应的业务的编码,接下来实现UserInfo页面的增删改查. 1.首先先谈一下遇到的一个框架上的问题:提示EF版本不一致之类的问题,主要是解决方案 ...
- mybatis-spring-boot-autoconfigure
mybatis-spring-boot-autoconfigure – MyBatis Sring-BootStarter | Reference Documentation http://www.m ...
- MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具
mybatis – MyBatis 3 | 日志 http://www.mybatis.org/mybatis-3/zh/logging.html MyBatis 内置日志工厂基于运行时自省机制选择合 ...
- SpringCloud 进阶之分布式配置中心(SpringCloud Config)
1. SpringCloud Config SpringCLoud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用 的所有环境提供了一个中心化的外部配置; ...
- hive引入jar包--HIVE.AUX.JARS.PATH和hive.aux.jars.path
hive需要引入包时?该怎么引入? 一.hive-site.xml中的hive.aux.jars.path 此配置项对于hive server有效,但是是不会作用到hive shell.也就是说即使你 ...
- android的selector选择器
1. drawable/actionbar_compat_item.xml 2.drawable/actionbar_compat_item_pressed.xml 3.drawable/action ...