Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する

現在(2017/3月)、Hugoで生成した静的サイトをホストするためにさくらVPSを利用しています。 さくらVPSは2年近く使ってきましたが、そろそろ更新時期した(1年まとめて契約しているため)。 自分が契約したタイプはデイスクがHDDのままSSDに変更できないタイプだったので、新規契約し直すか、Conoha VPSに切り替えるか、それともVPS自体を契約しないとするか迷っています。

良い機会であるため、静的サイトのホスティングをVPSではなくクラウドサービスを利用しようと検討しました。

移行先検討

  • GitHub Pages
  • Netlify

自分の中ではGitHub PagesNetlifyの2択でした。 静的サイトのコンテンツはGitHubにコミットしているため、最初は、GitHub Pagesにしようとしていました。 しかし、現状HTTP/2に対応していないことからあまり気乗りしませんでした。 もともとVPSを利用していたときには、 Lets’s Encryptでブログの常時SSL化にチャレンジのように、常時SSLに対応したり、h2oをインストールしてなんとかHTTP/2に対応した経緯もあり、せっかくなら対応できると嬉しいです。

その点、Netlifyを試してみたら「これで決まり!」と思うぐらい良かったのでまずはNetlifyで運用してみます。

Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する

Netlify: All-in-one platform for automating modern web projects

Netlifyを気に入ったポイントは以下の点です。

  • 簡単に、独自ドメイン(Custom Domain)が設定できる
  • 簡単に、SSL対応できる
  • 簡単に、グローバルCDNを導入できる
  • HTTP/2サポート
  • Hugoビルドまで面倒みてくる
  • CIツールからの連携も可能

Netlifyとは

Write frontend code. Push it. We handle the rest.

Netlifyとは、「フロントエンドのコードを書いたら、Pushすれば後はお任せ」という通り、フロントエンドのデプロイ・ビルド・ホスティングを全て面倒をみてくれるプラットフォームです。

Deploy modern static websites with our automated platform. Add best practices like SSL, CDN distribution, caching and continuous deployment with a single click.

カスタムドメインの設定方法

Netlifyにデプロイ後のURLmeganii.netlify.comwww.meganii.comで運用したい場合の例です。

www.meganii.comにCNAMEを設定して、meganii.netlify.comに向けます。

お名前.comでの設定

Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する https://i.gyazo.com/eaf25edb2d5651e71390d1628ba251e7.png

Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する

Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する

app.netlify.comでの設定

Custom domainを設定して、その後、HTTPSを有効にします。

Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する

Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する

リダイレクト処理

カスタムドメインを設定しても、元々の*.netlify.comにはアクセスできてしまうので、Google的には重複コンテンツと見なされるのではないか?とちょっと心配になったので、以下の通りリダイレクトを_redirectsファイルに設定しました。

注意点は、publicフォルダ直下に配置しないといけない点です。(最初、rootに置けばよいだけど思っていましたが、よくよく考えればその通りですね)

_redirectsファイルにRedirect処理を書くことができます。

Go Static Without Losing Your Server | Netlify

However, if you’re 100% sure that you’ll always want to redirect, even when the URL matches a static file, you can append an exclamation mark to the rule:

/app/*  /app/index.html  200!
https://meganii.netlify.com/* https://www.meganii.com/:splat 301!
http://meganii.netlify.com/* https://www.meganii.com/:splat 301!

:splatは、ワイルドカードのように使うみたいです。

/news/*  /blog/:splat

上記の設定だと、以下の通りリダイレクトされます。

/news/2004/01/10/my-story to /blog/2004/01/10/my-story

NetlifyでHugoを使うときの注意点

デフォルトだと、HugoのVersionは1.7ですが、hugo_0.19というbuild commandを利用することで、1.9のバージョンを利用できます。

_headers

_headersは、無料プランでは利用できないみたいです。

2017/07/23 追記

HTTP/2 Server Push on Netlify | Netlify の提供によって、無料プランでもheadersが利用できるようになりました。

ビルドにNetlify以外のCIツールを利用する場合

NetlifyのAPIを利用することで、Manual Deployが可能なため、CIツールからデプロイ可能です。 CircleCIの場合は、以下の通りcircle.ymlに記載します。

deployment:
  master:
    branch: master
    commands:
      - npm install netlify-cli
      - hugo -t hugo-zen
      - node_modules/.bin/netlify deploy -t "$netlify_token"

参考

Backlinks

ブログサイトの移行履歴
2024年1月5日現在、 www.meganii.com はCloudflare Pagesでホストしている。 履歴 さくらVPSからConoha VPSへのお引越し Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する NetlifyからGitHub Pagesに移行した件 GitHub PagesからCloudflare Pagesへの移行
2024-01-05
静的サイトジェネレータHugo
Hugo入門 静的サイトジェネレータ「Hugo」でシンプルブログサイトを構築する 静的サイトジェネレータ「Hugo」インストール 静的サイトジェネレータ「Hugo」〜公開方法〜 サイト構築 Hugoのテーマでsubmoduleを使う方法 HugoでのシンタックスハイライトにPython Pygmentsが不要となった HugoのRelated Contentを利用して関連記事を表示する gulpで画像の最適化 Hugoソースコードリーディング〜Taxonomy〜 Render Hooks for Code Blocksを利用してコードブロックにファイル名を表示する Hugoでブログカードを作成する(resources.GetRemote利用) Templates 【Hugo】Partial Templateでは複数returnを記述する早期Returnを使えない 【Hugo】images.TextでOGP画像を生成する Shortcodes Hugo Shortcodesの作り方 HugoのShortcodesを利用してAmazon紹介リンクタグを作成 HugoでAMP対応のブログカードを作る AMP対応 AMP向けのミニマルCSSフレームワーク「1BX」をHugoに導入した AMPページの最適化〜ぼくのAMPサイトがこんなに遅い訳がない〜 AMP OptimizerによるAMPのさらなる最適化 AMP Service WorkerでPrefetch Linksを実現する Data Driven Content Hugoで人気記事を表示するためJSONを返すAPIサーバを作りData-driven Contentを試してみた Tailwind CSS HugoでTailwindCSSを利用しAMP Validなページを生成する ビルド npm-run-allでローカルAPI serverとHugo serverを同時に実行する GitHub Actionsのスケジューラ実行を利用して定期的にビルドする Circle CIでHugoのビルド・デプロイを実行する コンテンツ作成 Git pre-commitフックでFrontmatterの「更新日時」を自動更新する Hugoでブログ記事一覧ページ(ブログアーカイブページ)を作成する 移行 はてなダイアリーからはてなブログ経由で独自ドメインのブログに記事を移行しました JekyllからHugoへの移行ポイント Hugoで生成した静的サイトのホスト先をさくらVPSからNetlifyに変更する 書籍
2017-12-31
静的サイトジェネレータ「Hugo」〜公開方法〜
公開 Deploy Hugoには、サイトを生成する仕組みはありますが公開する仕組みは持っていません。そのため、Hugoで生成した生成物(HTML+CSS)を何らかの方法で、Webサーバに持っていってあげなければいけません。 必要なのは、どこに公開するかと、どうやって公開するかです。
2017-01-11