· hugo fabric deploy

サーバ更新をsftpからrsyncに変えたら爆速

HUGOの更新を「Fabricを使ってサイト更新を自動化する」で、ワンクリックで出来るようにしました。しかし、sftpでのアップロードだったので、アップロードには十数秒掛かります。差分だけのアップができないため、毎回、すべてのファイルをアップロードしていたからです。

差分だけのアップをするためには、sftpではなく、rsyncを使う必要があります。fabfile.pyを変更します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from fabric.api import env, run, roles, cd
from fabric.contrib import project, console
from contextlib import closing
from fabric.contrib.project import rsync_project

env.hosts = ["hostname"]
env.user = 'account'
env.password = "password"
env.key_filename = ['~/.ssh/id_rsa']

def rsync():
    project_path = '/host_directory_path/'
    local_path = '/local_directory_path/'
    with cd(project_path):
        exclude = ['*.py','*.pyc', '*~', '.DS*', '*.swp', '.git', '.DS_Store']
        rsync_project(project_path, local_dir=local_path, exclude=exclude)

上記のファイルの実行では、サーバのアクセス時に毎回パスワードを尋ねられます。毎回パスワードを入力するのは、面倒なので、SSHで公開鍵認証を設定します。設定方法は、「Fssh + rsync でパスワードなし認証」が詳しいので参考になります。

SSHの公開鍵認証設定が完了したら、下記のコマンドでHUGOのコンパイルとサーバへのデプロイが一瞬で完了しました。数十秒かかっていたものが、約1秒になりました。

$ hugo --theme=Crisp && fab rsync

ただし、プロジェクトのソースは、Bitbucketで管理しているので、この後に、git pushします。正しいデプロイの順序で言えば、ソースをリポジトリにpushして問題なければ、公開だと思うので、CIサービスのwerckerでのデプロイを検証します。

  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket