サーバ更新を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でのデプロイを検証します。
About the author and the blog
Masayuki Ariki is a Hobby Programmer and an not enthusiastic blogger, curious about any Python modules, Deep learning, and the web. More...