前言
在日常的 blog 编写中,一直有一点非常的不爽。在使用 hexo generate && hexo deploy
之后,我还不得不登录到服务器 git pull
一下来更新。前一段时间和别人合作时看到了使用 travis 进行 auto deploy 的例子,感觉非常的方便。于是我在 google 中搜索了教程,虽然最后成功的完成了目标,但感觉教程只是把步骤记录了下来,没有讲解原理。这一篇文章中,我将把整个的部署过程记录下来,同时加入我对每一步在做什么的理解。
原理
通过 hexo deploy
可以把当前的 public 文件夹下的内容复制到 .deploy_git 文件夹下,然后 push 到设置的 repo 下。配合着 travis,我们可以选择在每次 push 之后通过 rsync
把当前 repo 的文件同步到服务器上,达到自动部署的目的。
具体步骤
生成 ssh-key
将服务器上的文件与当前 repo 同步,需要用 ssh 登录到服务器上,而现在用密码登录是不靠谱的,在生产环境中普遍使用 RSA 密钥来登录,所以我们需要为自动部署生成一个用来登录到服务器的 RSA 密钥。1
ssh-keygen -f ssh-key
为了方便,我们不设置 passphrase。
可以看到,我们生成了两个文件。ssh-key.pub
是 RSA 加密的公钥,ssh-key
是加密的密钥,我们需要把公钥的内容添加到服务器的 authorized_keys
里面。1
cat ssh-key.pub >> ~/.ssh/authorized_keys
travis 配置文件
travis 需要在 repo 下添加配置文件并命名为 travis.yml
。具体的配置方式在官网写的比较清楚。1
2
3
4
5
6
7branches:
only:
- master
addons:
ssh_known_hosts: your.server
script:
- rsync -az -vv --delete --exclude=.git -e 'ssh' ./ user@your.server:/where/the/folder
branches
代表我们只需要 master 分支。ssh_known_hosts
的作用是把 server 的地址加入到 known_hosts 里面,否则 ssh 登陆的时候会提示是否要添加。script
里面的命令代表我们要使用 rsync
同步 repo 内容到 server 里面,由于是生产环境,我们不需要 .git
文件夹,所以把它排除。
使用 travis 加密密钥
我们需要让 travis 使用密钥登陆服务器,但如果直接把密钥放到 repo 里面,任何人都可以登录到服务器了,所以我们需要使用 travis 的加密功能把密钥加密。
travis 的客户端需要使用 gem
安装,并且需要 2.0 以上的版本。所以注意确认是否安装了合适的环境,并且把密钥文件拷贝到 repo 里面。1
2
3
4
5
6
7
8# Install travis
gem install travis
# You should enter your github account
travis login
# Encrypt the key
travis encrypt-file ssh-key --add
# Remove the key
rm ssh-key
运行完以上命令之后,ssh-key
文件被加密成了 ssh-key.enc
,.travis.yml
文件里面多了 before_install 这个标签,里面的命令会在每次运行之前先用 openssl
把加密的密钥解密。默认的解密之后的输出目录是当前目录,记得把 -out
后面的目录改成 ~/.ssh/id_rsa
。
开启 travis
进入 travis 网站将你的 repo 添加进去。
这样,在你向 repo push 新的 commit 之后,travis 就会帮你自动部署啦。
结语
其实挺简单。