是的,都 2019 年了我还在写自动部署这样的文章。
基于之前的文章 使用Travis CI持续部署Hexo博客 做一个补充。本次除了自动部署到 Github Pages 上还部署到 VPS 服务器上。
原因说简单点就是:我不想每次本地写完点东西后,还得手动生成静态页面,然后再利用 xshell 这样的工具把静态页面上传到我的 VPS 服务器上。这简直不要太麻烦,我想写完东西之后通过 Git push 到仓库之后,自动去部署到 Github Pages 也好还是 VPS 也好。总之不用我瞎操作一顿了,我的原则是博客越轻量越简洁好。
基于这样的原则,花了点时间搞了下自动部署到 VPS 上。
之前用 Travis CI 自动部署用的是 GitHub 的 Personal access tokens,配合 Travis 的环境变量配置就可以 push 操作了。这个 token 是可以拿到你 github 上所有仓库操作权限的,所以这次我打算不用这个 token 了,直接搞个部署密钥更加安全。
生成部署密钥
首先是先生成 ssh 密钥,在你电脑上随便哪个文件夹都行:
1 | ssh-keygen -f travis.key |
把生成的 travis.key.pub 公钥里的内容粘到你 Github 仓库的 Deploy Keys 以及 VPS 上的 ~/.ssh/authorized_keys
里。这样 Travis CI 结合私钥就能对 Github 和 VPS 进行访问了。
加密私钥
Travis CI 自动部署时,我们必须从仓库拿到上面生成的私钥。直接把私钥放仓库下肯定是不安全的,Travis 提供了私钥加密解密的方法。
首先,在 Linux 环境下安装 Travis 命令行工具 ,需先安装 ruby 环境:
1 | # 我的VPS装的是ubuntu,ubuntu安装ruby环境 |
加密私钥文件:
1 | # 交互式操作,使用 GitHub 账号密码登录 |
.travis.yml 配置
解密私钥文件:
将 travis.key.enc 放到仓库下,哪个位置随你喜欢,确保解密命令能访问到就成。$encrypted_383bc2ea2d21_key
及$encrypted_383bc2ea2d21_iv
请去travis ci仓库设置环境变量里找(Travis 会自动生成这两个环境变量)。在 .travis.yml 下添加如下命令:
1 | before_script: |
为了防止出现 ssh 登录要输入连接确认(总不至于在 travis ci 自动部署时去travis命令行确认下?),需在 .travis.yml 添加一个 ssh 信任列表(怎么简单怎么来):
1 | addons: |
那么,Travis CI 自动构建成功后怎么部署到 VPS 上呢?在 .travis.yml 中添加如下命令(这种方式暴露了端口号…但好像没别的好办法):
1 | after_success: |
配置文件放 Gist 上,仅供参考。
Logo
换了个 Logo,自己用 PS 做的,有点借鉴(抄袭 )PRIN 的灵感。
参考链接
主要是参考第一篇文章 (PRIN 原创) 折腾的 ┏ (゜ω゜)=☞。