公開 Deploy

Hugoには、サイトを生成する仕組みはありますが公開する仕組みは持っていません。そのため、Hugoで生成した生成物(HTML+CSS)を何らかの方法で、Webサーバに持っていってあげなければいけません。

必要なのは、どこに公開するかと、どうやって公開するかです。

どこで公開するか

Hugoで生成したサイトをどこに公開するかは、いくつか選択肢があります。例えば、以下のようなものです。

  • VPS(Virtual Private Server)
  • レンタルサーバ(ロリポップ)
  • Github Pages
  • Amazon S3

私は、さくらのVPS契約しています。自分で色々といじれるので楽しいです。

2017/03/19追記
さくらVPSを解約したので、Netlifyで公開するように変更しました。
Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する - SIS Lab

どうやって公開するか

やることは単純で、Hugoで生成したHTML+CSSを公開サーバにアップロードするだけのことです。とはいえ、毎回手動で配置するわけにはいかないため、スクリプトで自動化させます。

例えば、以下の方法です。

  • FTP
  • rsync
  • git push

私は、以下のようにRakeタスクとして定義しています。

rake deploy_to_sakuraと叩けば、さくらVPSにrsyncでファイルをアップロードしています。

require "rubygems"
require "bundler/setup"
require "stringex"

posts_dir       = "content/blog/"    # directory for blog files
new_post_ext    = "markdown"  # default new post file extension when using the new_post task

desc "deploy_to_sakura"
task :deploy_to_sakura do
  sh 'rm -r public'
  sh 'hugo -t hugo-zen'
  sh 'mv public/category public/blog'
  sh 'mv public/tags public/blog'
  sh 'mv public/en/category public/en/blog'
  sh 'mv public/en/tags public/en/blog'
  sh "rsync --iconv=UTF-8-MAC,UTF-8 -e \"ssh -p #{ENV['SSH_PORT']}\" -avz --delete public/ web@#{ENV['SAKURA_IP']}:/home/web/www/meganii.com"
end