タイトルの通り、このブログを含めたいくつかのサイトをGehirn RS2 Plusに引っ越しました。同時にStatic Site Generator(静的サイトジェネレーター) Hugoを使って静的サイト化しています。

これまでは、「さくらのVPS」にインストールしたWordPress上で管理していました。 さくらのVPSを使うと、システムのすべてを自分で管理することになり、セキュリティアップデートなどのメンテナンスもすべて自分でやる必要がありました(もちろん、それは利点でもあります)。

 加えてWordPressは、最初にセットアップして以降、数度の更新を経て、初期にインストールしたプラグインが動いたり動かなかったりしていました。最初の頃にがんばってカスタムしたテーマも、今ではどこをどう変えたのか覚えていませんでした。

Gehirn RS2 Plusとは

 Gehirn RS2 Plus(以下、「RS2 Plus」)は、ゲヒルン株式会社が運営するホスティングサービスです。

 いまではVPSやクラウドなど、サーバーを利用するときに管理者権限が付いてくるサービスが一般的ですが、前述の通り、それらは自分でメンテナンスをする必要があります。

 一方、RS2 Plusは、利用するサーバーの管理者権限がないため、できることに限りはあるものの、代わりにシステムの保守運用はすべてゲヒルン株式会社がやってくれます。

 実は、RS2 Plusを利用するのは今回がはじめてではありません。 もともとは技術書典5で頒布する電子書籍の配信システムを構築するのに使い始めました。

 配信システムは、電子書籍の購入者がQRコードのURLにアクセスすると、URLに含まれているコードがデータベースにあるかを確認して、存在すればPDFを配信するという簡単な仕組みです。 サーバー上ではMySQLのデータベースと、データベースに接続するサーバーソフトウェア(Python+Flaskで開発)が動作しています。サーバーソフトウェアは、WSGIプロトコルでフロントエンドと通信します。

 静的サイトの配置はもっと簡単で、HTMLや画像などのリソース群を、RS2 Plusの管理画面に表示されるディレクトリにアップロードするだけです。

 なお、ぼくが利用しているのはスタンダードプランですが、各プランは利用するサーバーのスペックが違うだけで管理画面の使い勝手は同じという認識です。

良かった点

 RS2 Plusを使って良かったことをつらつらと書いていきます。

システムアップデートが不要

 定期的にSSHでログインしてsudo apt-get upgradeをする必要がありません。

 前述のとおり、システム周りはすべてRS2 Plusが面倒を見てくれるので、常にセキュアな状態であることが期待できます。 (WordPressなどをインストールすれば当然そちらの管理は必要になりますが、今回は静的サイト化したのでその必要もありません)

設定ファイルの書き換えが原則不要

 Apacheやnginxの設定ファイルを書き換える必要がありません。アドバンスモードに切り替えれば独自の設定ファイルも設定できますが、独自ドメインのサイトをHTTPS強制で公開する くらいのことなら通常の管理画面から行えます。

データベースの作成も管理画面から

 MySQLデータベースを作成はWeb画面から行います。

 ぼくはAndroidアプリの開発者なので、MySQLであっても、PostgreSQLであっても、データベースを作成するという作業を実行する頻度は高くありません。作成後のユーザー追加や認証の設定周りはいつも忘れて調べ直しているので、管理画面からお手軽にできるならその方がありがたいです。

感じるセキュリティ観

 運営がセキュリティで有名なゲヒルン株式会社だけあって、ところどころ「らしい」と感じる部分があります。

 管理画面へのサインインに2FA(Two-factor authentication: 2要素認証)が必須だったり、データベースのパスワードが表示されるのは作成時の一度きり(変更のみ可)だったり。 「安全に運用するならこうあるべき」というメッセージが感じられて、使っていて勉強になります。

Gehirn RS2 Plusに引っ越しした images/gehirn-signin.png
Gehirn RS2 Plusに引っ越しした images/gehirn-db_password.png

苦労した点

 RS2 Plusを使って苦労した点も、もちろんあります。

Let’s Encrypt対応

 HTTPS化するにあたり、証明書をLet’s Encryptで発行しようとしたところ、標準ツールのcertbotが、管理者権限を要求するので使えませんでした。

 管理者権限が要らないサードパーティのツールもあるようですが、ぼくの場合サーバー側で証明書を発行するのを諦めて、手元のコンピューターでcertbotを使い、DNS認証(DNSに指定された内容のTXTレコードを追加する)で証明書を発行しました。

Qiita - Let’s EncryptのSSL証明書をDNS認証で発行してみた。(DNSはお名前.com)

 もともとRS2 Plusの標準設定では、サーバー証明書は管理画面に入力する必要があります。サーバーで受けとってもローカルで受けとっても、その先で必要な操作(管理画面への入力)は同じです。

Gehirn RS2 Plusに引っ越しした images/rs2_plus_tls_certificate_file.png

 とは言え、管理画面への入力作業は自動化が難しいので、3ヶ月毎のrenewに一抹の不安が残ります。

 Let’s Encryptのサポートについては、11月に大阪で開催されたイベントで質問したところ「ゲヒルン株式会社は認証局でもあるので、ゲヒルンが証明書を発行していくことも考えている」という話があったので、今後に期待しています。

Gehirn RS2 Plusに引っ越しした images/gehirn_ca.png

8265 バリデーションエラー

 Let’s Encryptから取得した証明書を管理画面に入力すると、確定時に「 8265 バリデーションエラー 」と表示されて設定できない現象に遭遇しました。

Gehirn RS2 Plusに引っ越しした images/8265_validation_error.png

 結論から言うと、Let’s Encryptで取得した秘密鍵は、そのままではRS2 Plusの管理画面に貼り付けることができません。次のコマンドで変換する必要があります。

$ openssl rsa -in privkey.pem -out rsaprivkey.pem

 いろいろ試しても状況が変わらず、途方に暮れてサポートセンターに問い合わせたところ、先のコマンドを教えてもらいました。その節は本当にありがとうございました。

HTTPS強制

 サーバー証明書の設定が完了して、無事HTTPSで接続できるようになりました。 しかし、そのままではHTTPにも応答してしまいます。

 「HTTPS 強制」で検索すると「nginxの設定で301を返す」という手法が紹介されているので、設定をアドバンスモードにしてnginx.confに設定してみましたが上手く動作しません。

「困ったな。まぁ、HTTPSでつながってるんだからいいかー」と思いつつ、Twitter(Twitterはやっていない)でつぶやいたところ、isidaiさんからリプライをもらいました。

 Strict-Transport-Securityの存在を今日まで知りませんでした……。 教えてくださって本当にありがとうございます!

まとめ

 年越しも目前に「よしサイトを静的化して引っ越すぞ!」と決めてから1日で移行を終えました。

 Hugoは以前にも使ったことがあったので、WordPressからのエクスポートと調整には時間はかかりませんでした。 また移行にあたって「元サイトのデザインを復元することは諦める」という英断をしました。結果、それっぽいテーマをほとんどカスタムせずに導入しています。 CSSを無限にいじくるより、TypeSquareで綺麗なフォントを表示する方が、ぼくは嬉しい。

 なお、今回の移行で空いた「さくらのVPS」は、root権限を活かして違う役割を担ってもらう予定です。

 それではみなさん、良いお年をお迎えください。