ファイルベースで動くPHPのCMS「Grav」の紹介とインストールとセットアップまで

2019-01-04
markdownphpcmsgrav
    

目次

概要

Flat-File CMS(RDBMSを利用せずファイルベースで管理するCMS)であるGravをインストールした時のメモです。

Gravについて

https://learn.getgrav.org/basics/what-is-grav

Gravは早くて簡単でフレキシブルなファイルベースのCMSです。セットアップも容易です。 ページは自体はMarkdownで記述し、プラグインも導入できることから拡張性にも優れています。

他のCMSの比較

Flat-File CMSで、もう一つ人気の高い Pico と最も人気のあるCMSであるWordPressをGitHubのWatch Star数で比較しました。

GitHubのWatch Starの比較

名前 watch? star★ url
Grav 413 10047 github
Pico 175 2998 github
WordPress 1447 11860 github
※2019/01/04 現在

GravのStar数はWordPressに迫る勢いです。

https://github.com/getgrav/grav

https://github.com/picocms/Pico

https://github.com/WordPress/WordPress

環境

以下の環境で試しました。

  • PHP 7.1.19 (cli) (built: Aug 17 2018 20:10:18) ( NTS )
  • Mac OS X 10.14.2

インストール

Gitでのインストール

いくつかのインストール方法が公式では紹介されていますが、コマンドラインが使える環境であれば、gitで導入する方法が楽だと思います。

インストールするディレクトリを作成します。

$ mkdir -p /path/to/grav
$ cd /payh/to/grav

git cloneする

$ git clone -b master https://github.com/getgrav/grav.git

以下のようなログが出力れていると成功です。

Cloning into 'grav'...
remote: Enumerating objects: 46, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 39934 (delta 18), reused 27 (delta 12), pack-reused 39888
Receiving objects: 100% (39934/39934), 13.88 MiB | 439.00 KiB/s, done.
Resolving deltas: 100% (23841/23841), done.

インストールに成功すると、以下のようにファイル・ディレクトリが配置されいます。

$ ls
CHANGELOG.md       LICENSE.txt        backup             codeception.yml    images             robots.txt         tmp
CODE_OF_CONDUCT.md README.md          bin                composer.json      index.php          system             user
CONTRIBUTING.md    assets             cache              composer.lock      logs               tests              webserver-configs

必要なリソースはこれで揃いますが、起動はまだできません。 以下のコマンドでインストールを行います。

$ bin/grav install
Preparing to install vendor dependencies...

Loading composer repositories with package information
Installing dependencies from lock file
Package operations: 33 installs, 0 updates, 0 removals
  - Installing antoligy/dom-string-iterators (v1.0.1): Downloading (100%)
  - Installing composer/ca-bundle (1.1.2): Downloading (100%)
  - Installing doctrine/cache (v1.6.2): Downloading (100%)
  - Installing doctrine/collections (v1.4.0): Downloading (100%)
  - Installing donatj/phpuseragentparser (v0.10.0): Downloading (100%)
  - Installing erusev/parsedown (1.6.4): Downloading (100%)
  - Installing erusev/parsedown-extra (0.7.1): Downloading (100%)
  - Installing psr/log (1.0.2): Downloading (100%)
  - Installing filp/whoops (2.2.1): Downloading (100%)
  - Installing gregwar/cache (v1.0.12): Downloading (100%)
  - Installing gregwar/image (v2.0.22): Downloading (100%)
  - Installing psr/http-message (1.0.1): Downloading (100%)
  - Installing guzzlehttp/psr7 (1.4.2): Downloading (100%)
  - Installing seld/cli-prompt (1.0.3): Downloading (100%)
  - Installing league/climate (3.4.1): Downloading (100%)
  - Installing matthiasmullie/path-converter (1.1.1): Downloading (100%)
  - Installing matthiasmullie/minify (1.3.60): Downloading (100%)
  - Installing symfony/polyfill-mbstring (v1.9.0): Downloading (100%)
  - Installing symfony/var-dumper (v3.4.17): Downloading (100%)
  - Installing maximebf/debugbar (v1.15.0): Downloading (100%)
  - Installing miljar/php-exif (v0.6.4): Downloading (100%)
  - Installing monolog/monolog (1.23.0): Downloading (100%)
  - Installing psr/container (1.0.0): Downloading (100%)
  - Installing psr/simple-cache (1.0.1): Downloading (100%)
  - Installing symfony/polyfill-ctype (v1.9.0): Downloading (100%)
  - Installing symfony/yaml (v3.4.17): Downloading (100%)
  - Installing symfony/event-dispatcher (v3.4.17): Downloading (100%)
  - Installing pimple/pimple (v3.2.3): Downloading (100%)
  - Installing rockettheme/toolbox (1.4.2): Downloading (100%)
  - Installing symfony/debug (v3.4.17): Downloading (100%)
  - Installing symfony/console (v3.4.17): Downloading (100%)
  - Installing symfony/polyfill-iconv (v1.9.0): Downloading (100%)
  - Installing twig/twig (v1.35.4): Downloading (100%)
Generating optimized autoload files

Installing vendor dependencies
Loading composer repositories with package information
Installing dependencies from lock file
Nothing to install or update
Generating optimized autoload files

Cloning Bits
============

Cloning into 'user/plugins/problems'...
remote: Enumerating objects: 133, done.
remote: Counting objects: 100% (133/133), done.
remote: Compressing objects: 100% (127/127), done.
remote: Total 133 (delta 3), reused 107 (delta 1), pack-reused 0
Receiving objects: 100% (133/133), 737.12 KiB | 1.52 MiB/s, done.
Resolving deltas: 100% (3/3), done.
SUCCESS cloned https://github.com/getgrav/grav-plugin-problems -> /path/to/grav/user/plugins/problems

Cloning into 'user/plugins/error'...
remote: Enumerating objects: 20, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 20 (delta 0), reused 12 (delta 0), pack-reused 0
Unpacking objects: 100% (20/20), done.
SUCCESS cloned https://github.com/getgrav/grav-plugin-error -> /path/to/grav/user/plugins/error

Cloning into 'user/plugins/markdown-notices'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 12 (delta 0), reused 8 (delta 0), pack-reused 0
Unpacking objects: 100% (12/12), done.
SUCCESS cloned https://github.com/getgrav/grav-plugin-markdown-notices -> /path/to/grav/user/plugins/markdown-notices

Cloning into 'user/themes/quark'...
remote: Enumerating objects: 194, done.
remote: Counting objects: 100% (194/194), done.
remote: Compressing objects: 100% (183/183), done.
remote: Total 194 (delta 3), reused 81 (delta 0), pack-reused 0
Receiving objects: 100% (194/194), 1.23 MiB | 528.00 KiB/s, done.
Resolving deltas: 100% (3/3), done.
SUCCESS cloned https://github.com/getgrav/grav-theme-quark -> /path/to/grav/user/themes/quark

これでインストールが完了します。

PHPビルトインサーバで起動する

とりあえず、動作を確認する場合はphpのサーバモードで確認できます。

php -S localhost:8000 system/router.php
PHP 7.1.19 Development Server started at Fri Jan  4 13:36:32 2019
Listening on http://localhost:8000
Document root is /path/tp/grav
Press Ctrl-C to quit.
[Fri Jan  4 13:36:39 2019] ::1:65077 [200]: /

localhost:8000にアクセスしてこのように表示されると成功です。

Apache + Linuxで起動する

Apache + Linuxで起動する場合、マークダウンファイル等の読み書きがあるため、パーミッションを適切に指定する必要があります。

Apache

Apacheは、modrewriteや(SSL化する場合は)modsslといったモジュールを有効化し、htaccessを許可させるためにVirtual Hostの設定に「AllowOverride All」を追加する必要があります。

パーミッションの設定

GravディレクトリをApacheで動かせるユーザとグループに変更させます。 Apacheの起動ユーザ・グループは以下のコマンドで確認できます。

ps aux | grep -v root | grep apache | cut -d\  -f1 | sort | uniq

次に以下のコマンドで権限を適切なものに変更します。 最後にumaskコマンドを使うことで、新規にファイルが作成された際に初期値で775とするように設定します。

chgrp -R GROUP .
find . -type f | xargs chmod 664
find ./bin -type f | xargs chmod 775
find . -type d | xargs chmod 775
find . -type d | xargs chmod +s
umask 0002

https://learn.getgrav.org/basics/requirements

トラブルシューティング

Gravのインストールコマンドを叩きブラウザからアクセスした際にエラー(レスポンス:500)となりました。 この時のapacheのログには

Fatal error: Uncaught RuntimeException: Opening file for writing failed on error fopen(/var/www/html/music/grav/user/config/security.yaml): failed to open stream: Permission denied in /var/www/html/music/grav/vendor/rockettheme/toolbox/File/src/File.php:202

と吐かれていました。

解決方法としてはSELinuxのコンテキストの設定を変更する方法で対応できるそうです。

https://github.com/getgrav/grav/issues/912

    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

Amazon S3 と ローカルファイルのチェックサムの比較
s3apiでEtagを取得 検証 マルチアップロード時の注意点 Amazon S3 の Etagを使ってファイルの整合性チェックをする。 s3apiでEtagを取得 S3 APIを利用するとEtagを取得します。この値はmd5のハッシュ値になります。 検証 MD…

WordPressのDBから記事データを抽出する
WordPressのDB関連図 公開記事一覧の取得 タグ・カテゴリの取得 サムネイルの取得 おまけ: PHPスクリプト化しました 参考にしたところ WordPressにため込んだデータMarkdown化しGatsby…

PHPerkaigi 2020 資料まとめ
資料 もっと気軽にOSSに Pull Requestを出そう!/ Let's make a PR to OSS more easily PHP で JVM を実装して、 HelloWorld を出力してみる Deep Module in PHP 磯野ー、MySQL…

WordPressを静的サイトに変換するプラグインの紹介。WP2Static
静的化の目的 WP2Static StaticPress Simply Static 3つを比較して WordPressを静的化するプラグインとして、simply staticやStaticPress、WP2Static…

WordPressをAmazon S3 + CloudFront構成で月額200円で運用
システム全体の この構成のメリット・デメリット AWSの構成 静的ページを作成するWordPressプラグイン WP2Static WP Offload Media Lite WordPress on Docker環境 まとめ AmazonS…

WordPress + WP2Static で静的サイトを生成する
クイックスタート 保存対象URLの補完 WP2StaticはWordPress から静的サイトを生成するプラグインです。 これまで同じく静的サイトを生成する「StaticPress」や「Simply Static…

Ubuntu18.04にApache MariaDB PHP7.2 をセットアップ
環境情報 モジュール類の更新 Apacheのインストール PHP7.2のインストール インストール 動作確認 MariaDBのセットアップ MariaDBのインストール データベースと作業用ユーザの作成 参考 AWS の EC2 の Ubuntu18.0…

AWS S3のオブジェクト一覧をPHPで表示させる
S3アカウント サンプル AWS S3のオブジェクト一覧をPHPで表示させるサンプルコードの紹介. S3アカウント S3バケット参照用のユーザの作成方法は以下を参照してください。 https://tech-blog.s-yoshiki.com/2019/0…

PHPで簡単ページング処理を実装する サンプルコード
環境 作るもの ソース PHPで簡単なページング処理を書いてみました。 環境 PHP 7.1.19 Smarty 3.1.33 作るもの 簡単なページング処理を作ります。 具体的には、ある取得したデータ(サンプルソースでは51件)に対し1ページに1…

PHPにSmartyをセットアップ
試した環境 Smartyについて ダウンロード smartyの配置 Smarty呼び出し PHPにSmartyをセットアップをするメモ 試した環境 PHP 7.1.19 Smarty 3.1.33 Smartyについて https://www.smarty…

最新の投稿

SQL整形ツールを作成した
特徴 使い方 FW/ライブラリ等 nuxt sql-formatter-plus Monaco Editor おまけ ソース SQL整形ツールを作成しました。 URLはこちらです。 SQL…

ファイルの1行目を表示 Linuxコマンド head
head コマンド例 headコマンドでファイルの 1行目もしくは指定した行数だけ表示する方法。 head 利用できるオプション コマンド例 の 1行目だけを表示 の 5行目までを表示 カレントディレクトリ以下の全てのtxtファイルの1行目を表示

Amazon S3 と ローカルファイルのチェックサムの比較
s3apiでEtagを取得 検証 マルチアップロード時の注意点 Amazon S3 の Etagを使ってファイルの整合性チェックをする。 s3apiでEtagを取得 S3 APIを利用するとEtagを取得します。この値はmd5のハッシュ値になります。 検証 MD…

github.io / gitlab.ioで公開されている質の高い技術ドキュメント
AWSによるクラウド入門 Pythonプログラミング入門 普通の人が資産運用で99点をとる方法とその考え方 2018年の段階で私が知らないこと github.io / gitlab.io で無料で公開されている興味深いドキュメントのmemo AWS…

10進数から2進数 2進数から10進数への変換 JavaScript
10進数から2進数 2進数から10進数 テスト 10進数から2進数、2進数から10進数への変換を行うJavaScriptのコードの紹介。 JSの場合、10進数から2進数への変換はメソッド。2進数から1…

JavaScriptの配列ショートハンド (AtCoder用)

JavaScriptでワーシャルフロイド法を実装
AtCoder ABC012 D問題 D - バスと避けられない運命 解説 実装 AtCoder ABC012 の D問題でワーシャルフロイド法が利用できる問題が出てきたので、 JavaScriptで実装しました。 AtCoder ABC012 D問題 D…

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

cloudinaryによる画像ファイルの管理 はじめてみる
目的 cloudinary について 他のサービスとの比較 料金プラン アカウントの登録 利用してみる ダッシュボード 画像の編集 APIベースでのアクセス 感想 参考 画像の管理や配信、さらには加工といった事ができるsaas型のcloud…

JavaScriptによる2分探索(バイナリサーチ) のサンプルコード
2分探索について ソース 参考 JavaScriptで2分探索(バイナリサーチ)を実装してみました。…

Tags

Dates

© 2020   404 motivation not found