Dockerと次世代フラットファイルCMS「Grav」でmarkdown対応のウェブサイトを3分で構築する


「クールなウェブサイトやブログを作りたいけど、コンテンツは簡単にメンテナンスできるようにしたい」といった方にオススメしたいのが、 markdown形式のテキストファイルでコンテンツを管理する次世代フラットファイルCMS「Grav」 です。本稿では「Grav」の概要と構築手順についてご紹介します。(ヘッダー画像は「GitHub『getgrav/grav-theme-quark』」より引用)

「Grav」とは

Grav」はオープンソース(MITライセンス)のフラットファイルCMSです。
ウェブサイトのコンテンツを 「markdown」 で作成することができ、ブラウザ上の管理画面から ウェブサイトの設定やブログ記事の投稿 も可能です。また クールなデザインのテンプレートが豊富に揃っている ため、ウェブサイトをゼロから作る必要がありません。このような使いやすさから、GravはCMS Criticが主催する『Best Open Source CMS』(2016年)、『Best Flat File CMS』(2017年)に選出されています。

「フラットファイルCMS」とは

「フラットファイルCMS」は最近注目されている データベースレス のCMS(Content Management System)です。ウェブサイトのコンテンツはデータベースで管理せず、 「markdown」や「YAML」などのテキストファイルで管理されます。 データベースと接続する必要がないため、 ページ表示までのレスポンスが速い ことも注目を集める一つの理由です。

Dockerで「Grav」を構築する

2018年4月現在、Gravは公式のDocker Imageを公開していないため、本稿では自身が作成したDocker Fileからコンテナを起動する手順をご紹介します。

要件

本稿で紹介するGravの構築手順に必要な環境は以下の通りです。

  • Docker
  • Docker Compose

Dockerイメージをビルドする

$ git clone https://github.com/yosukeo/docker-grav.git
$ cd docker-grav
$ docker-compose build

本稿の動作環境では、docker-compose build --no-cacheコマンドは開始から約2分半で完了しました。

$ time docker-compose build --no-cache
...
...
...
Successfully built 83f42b83e379
Successfully tagged dockergrav_grav:latest

real    2m39.562s
user    0m0.572s
sys 0m0.108s

Dockerコンテナを作成・起動する

$ docker-compose up -d

たった4つのコマンドを入力するだけ ですが、以上で「Grav」の構築は完了です。

動作確認をする

「Google Chrome」などのブラウザから、DockerホストのIPアドレス(xxx.xxx.xxx.xxx)を指定してGravの画面表示を確認します。

  • ホーム画面:http://xxx.xxx.xxx.xxx
  • 管理画面:http://xxx.xxx.xxx.xxx/admin

ホーム画面

Gravがデフォルトで用意しているページが表示されます。

管理画面(ログイン)

docker-compose.ymlに設定しているADMIN_USERADMIN_PASSWORDの値を入力します。デフォルト値は以下の通りです。

  • ADMIN_USER : admin
  • ADMIN_PASSWORD : 0Gravity

管理画面(ダッシュボード)

以下のダッシュボードからコンテンツを管理します。サイトの設定からページの編集、プラグインやテーマのインストールなどの基本的な作業はダッシュボードから操作することができます。

管理者ユーザーのアカウント言語設定(language)において「日本語」を選択すると、ページを保存する際に「Unexpected character」となってページを保存することができなくなるのでご注意ください。

コンテナへログインする

以下のコマンドを入力することで、コンソールからコンテナへログインすることができます。本稿で使用しているDockerfileはPHP公式のDockerイメージであるphp:7.2.3-apache-stretchをベースとしていますが、 コンソールの列数と行数を環境変数として指定しないとコンソールのレイアウトが崩れるので注意してください。

$ docker exec -it --env COLUMNS=`tput cols` --env LINES=`tput lines` grav bash

最後に

Dockerfiledocker-compose.ymlなどの内容については、 GitHub『yosukeo/docker-grav』よりご確認ください。またウェブサイトの細かいカスタマイズについてはコンソールからファイルを編集する必要があります。Gravのカスタマイズ方法については別の機会にご紹介したいと思います。