持续化部署你的blog
上一周把自己的博客搬到新买的腾讯云上了,为了节省部署的时间,所以我的博客使用了持续化部署,其中踩了许多坑,写个教程总结记录一下。
大概的过程:
首先在你的服务器上安装Git,搭建Git服务器,并使用免密登陆SSH
在服务器上创建仓库用来存放TravisCI生成的博客静态文件
把你的博客项目放在GitHub上,其中博客静态文件放在主分支(master)上,其他文件(博客项目)放在其他分支上(本文为hexo分支)
配置TravisCI,监听你的hexo分支,即你写完博客,push到GitHub上,TravisCI监听到hexo分支发生改变,自动帮你构建博客静态文件
TravisCI帮你构建完静态文件后,通过git命令把博客静态文件push到博客仓库主分支上和你的服务器Git仓库中
配置服务器Git仓库钩子(GitHooks),使服务器仓库发现有push到仓库的动作后,自动把仓库中的静态文件部署到网站根目录
在VPS上搭建Git服务端
默认使用的操作系统为Centos7
安装Git服务
首先查看yum源仓库的Git信息
1 | yum info git |
版本是1.8.3.1,想使用最新版的Git,只能使用编译安装
下载Git:
Git下载地址. 提取码: ugu2
在Centos7中安装依赖库
1 | yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel |
卸载低版本Git
1 | yum remove git |
解压编译安装Git
移动到存放Git源码的目录,我的在/usr/local/git
git目录自己创建
解压编译安装
1 | tar -xzvf git-2.22.0.tar.gz |
添加到环境变量
1 | vim /etc/profile |
保存退出,使配置立即生效
1 | source /etc/profile |
将git设置为默认路径
1 | ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack |
创建一个git用户组和用户,用来运行git服务
1 | groupadd git |
在服务器上搭建Git仓库
创建仓库目录
我的仓库目录在/srv/gitrepo
1 | cd /srv/gitrepo # gitrepo目录自己创建 |
至此,一个服务器Git仓库就搭建好了,还没实现免密登陆,后面会讲到
使用TravisCI持续化部署
配置TravisCI
使用Github账号登陆TravisCI
TravisCi,注意网站地址结尾是org(公开的),com结尾的是私有的,是收费的
添加你的仓库
配置你的仓库
点击Setting
,设置选项
在Github添加Access Token
Setting
–>Developer setting
–>Personal access tokens
–>Generate new token
除了删库,其他的都打上勾
在TravisCI设置中添加token
name
自定义 ,value
为Github上的access Token
点击Add添加
在你的本地博客目录下添加.travis.yml
具体配置如下
1 | language: node_js |
到这一步你已经可以自动部署你的博客到Github Pages了
Travis免密登陆你的VPS
生成SSH密钥对
1 | 随便生成在哪都行,文件名也随意 |
把生成的公钥文件e.g. travis.key.pub
内容添加到VPS上的~/.ssh/authorized_keys
中
1 | vi ~/.ssh/authorized_keys #把公钥添加进去 |
使用Travis CI 加密工具加密私钥
这个步骤必须在Linux下执行!!!
这个步骤必须在Linux下执行!!!
这个步骤必须在Linux下执行!!! 重要的事情说三遍
安装加密工具
首先你要安装Ruby,具体安装,自己百度
1 | 安装加密工具 |
通过命令行登录 Travis 并加密文件:
1 | 交互式操作,使用 GitHub 账号密码登录 |
以上步骤建议在你的博客项目根目录进行
把你的博客项目push到刚才创建的VPS Git仓库中
为了能免密登陆自己的VPS服务器,把刚才的私钥也拷贝一份放到C:\Users\用户名\.ssh
目录下,然后push项目
然后在本地把加密操作后的项目从VPS Git仓库中clone下来
使用GitHooks自动部署你的静态文件
首先要在.travis.yml
文件中追加push到你的VPS Git仓库的命令
通过SSH的方式push
配置GitHooks
在你的VPS Git仓库中找到hooks目录,在里面创建post-receive
文件
1 | cd /srv/gitrepo/myblog.git/hooks |
文件内容
1 | !/bin/sh |
以上操作是在git用户下执行的
给脚本增加运行权限
1 | chmod +x post-receive |
创建完之后,运行一下看看有没有异常
1 | ./post-receive |
如果出现异常,请查看一下,网站根目录是否输入git用户,具体就是权限的问题
- 必须保证git用户的根目录的文件夹权限为 755
- 必须保证git用户的根目录下的.ssh文件夹权限为 700
- 必须保证git用户的根目录下的.ssh文件夹中的authorized_keys文件的权限为 600
大功告成!!!
此时,你就可以写好博客然后push到Git仓库,TravisCI检测到你的分支发生变动,自动帮你执行hexo g -d
的操作,然后把生成的文件提交Git仓库的master分支上,供Github Pages使用,还会提交一份到你的VPS Git仓库中,你的VPS Git仓库检测到有push行为,会触发Git Hooks,然后执行部署操作
有些地方描述的可能有些模糊,还请多去百度~~