使用 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自动部署代码时会出现各种权限问题,很蛋疼的 ...
随机推荐
- PMP 笔记
项目: 为创造独特的产品.服务或结果而进行的临时性工作. 项目特征: 独特性:Unique.临时性:Temporary.渐进明细. 渐进明细:预算越来越精细.比如三峡工程中,预算从10亿级的误差到1亿 ...
- [shell]用shell脚本将本地文件夹与ftp上的文件夹同步
需求说明 最近在AIX上做开发,开发机器在office网段,测试机器在lab网段,不能互相通讯,只能通过特定的ftp来传文件. 每次上传的机器都要做:登录ftp,进入我的目录,上传:下载的机器都要做: ...
- yii2.0 如何按需加载并管理CSS样式及JS脚本
链接:http://www.yiichina.com/tutorial/399 (注:以下为Yii2.0高级应用测试) Yii2.0对于CSS/JS 管理,使用AssetBundle资源包类. 视图如 ...
- Golang学习-第二篇 搭建一个简单的Go Web服务器
序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...
- Oracle安装部署之RAC安装环境配置脚本
#!/bin/bash#Usage:Log on as the superuser('root'),and then execute the command:#./1preusers.sh group ...
- pymysql executemany
Cursor Objects — PyMySQL 0.7.2 documentation https://pymysql.readthedocs.io/en/latest/modules/cursor ...
- javascript 知道这20个正则表达式,能让你少写1,000行代码
正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑.熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升. 正则表达式经常被用于 ...
- HDFS中的读写数据流
1.文件的读取 在客户端执行读取操作时,客户端和HDFS交互过程以及NameNode和各DataNode之间的数据流是怎样的?下面将围绕图1进行具体讲解. 图 1 客户端从HDFS中读取数据 1)客户 ...
- marathon-lb-什么是服务发现?(转)
摘要: 将容器应用部署到集群时,其服务地址,即IP和端口, 是由集群系统动态分配的.那么,当我们需要访问这个服务时,如何确定它的地址呢?这时,就需要服务发现(Service Discovery)了.本 ...
- log4j2动态修改日志级别及拓展性使用
一.供参考的完整日志配置 <?xml version="1.0" encoding="UTF-8"?> <!-- 配置LoggerConfig ...