ファイルベースで動く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

関連記事

PostfixでメールリレーしてMailHogで受信する開発用Dockerコンテナの構築
環境 Dockerイメージ作成 コンテナの起動 telnetで送信テスト phpで送信テスト Postfixのリレーを介して送信されたメールをMailHog(開発用SMTPサーバ)でキャッチするDocker開発環境を構築した際のメモです。 環境 Docker…

php-fpmのステータスページを表示 Apache & htaccess
試した環境 php-fpm の pm.status_path について php-fpmのconfの設定 .htaccess の設定 アクセスしてみる 参考にしたサイト Apache環境で php-fpm のステータスページを htaccess…

Homebrew で php7.4 + Xdebug をインストール
php7.4のインストール Xdebugのインストール php.ini に追記 参考にさせていただいたサイト phpunitのカバレッジを算出を行うためにMacにHomebrewでphp7.4をインストールしようとした際の記録です。 php7.…

PHP-FPM(php7.4) Apache2.4 on Ubutnu20.04 Webサーバ構築
環境 パッケージの更新 Apache と PHP のインストール Apache のサービスを開始する PHPファイルを作成 参考にしたサイト Ubuntu20.04 に PHP7.4 + Apache2.4 をインストールしてWeb…

PHP-FPM(php7.4) Apache2.4 でWebサーバ構築 on CentOS8
環境 php7.4 のインストール apacheのインストール php-fpmの設定を変更する php-fpm の起動 apacheの起動 確認 おまけ: エラーと解決方法 "System has not been booted with systemd as…

CentOS8 に PHP7.4 インストール
環境 普通にインストールしようとするとphp7.2がインストールされる modularityについて php7.4 インストール CentOS8 に modularity を利用して PHP7.4をインストールした際のメモです。 環境 CentOS8.…

UNIXドメインソケット通信 vs INETドメインソケット通信 php-fpmで動作させる場合の違いについて
結論 ソケット通信について ソケットについて ソケット通信の種類 UNIXドメインソケット通信を行う場合のメリット 参考にしたサイト php-fpm の設定方法で調べた際にIPとポートで設定するパターンとUNIX…

PHP-Parser で PHP5からPHP7で動くコードに自動修正するツールを作る夢をみた
ツールが備える機能条件 PHP-Parser について PHP-Parser の簡単なサンプル ASTオブジェクトの置換・変更 PHP5からPHP7への変更内容を実装する ex1 includeパスを変更する ex2 例外クラスを Exception…

PHP5からPHP7への移行ツールを作るための解析・自動修正ツールを調べる
PHP5からPHP7への下位互換のない機能 使えそうなツールの洗い出し PHPStan phan php7cc php7mar php-to-7-aid Rector php-ast PHP-Parser まとめ 追記 (2021/01/0…

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

最新の投稿

[JS]ラジアンから度数に度数からラジアンに変換する
コード 度数からラジアンへ ラジアンから度数へ サンプル ラジアンから度数に度数からラジアンに変換する際のスニペット。 コード 度数からラジアンへ ラジアンから度数へ サンプル

CentOS8 に Python + OpenCV をインストール
インストール テスト CentOS8 で標準で提供されているパッケージで Python + OpenCV 環境を構築する方法です。 検証した環境は CentOS8.3 (Docker) です。 インストール まず opencv…

[Perl] CentOS8 に plenv をインストール
インストール Step1 事前準備 Step2 PATHを通す (README通りにインストール) Step2 PATHを通す ($HOME以外にplenvをインストール) Step3 Perlインストール Step4 cpanmインストール CentOS…

JS/TSのclassでclass名を取得する
コード JS/TSのconstructorを利用して自分自身のクラス名を取得する際のメモ。 コード このコードの結果は次のようになります。

CentOS6(Docker)でyum update できなくなった
エラー内容 対応 CentOS6.10 で yum update しようとしたところエラーが出てアップデートできなかったので対応した時の記録 エラー内容 以下のようなエラーが出ました。 対応 を以下のように変更したところ解決しました。

PostfixでメールリレーしてMailHogで受信する開発用Dockerコンテナの構築
環境 Dockerイメージ作成 コンテナの起動 telnetで送信テスト phpで送信テスト Postfixのリレーを介して送信されたメールをMailHog(開発用SMTPサーバ)でキャッチするDocker開発環境を構築した際のメモです。 環境 Docker…

GitLab.com のコンテナレジストリで1つのプロジェクトに複数のDockerイメージをpushする
手順 GitLab.com のコンテナレジストリで1つのプロジェクトに複数のDockerイメージをpushする方法についてのメモです。 手順 まず、gitlab.comにて適当なリポジトリを…

Python poetryでパッケージ開発 PyPIで公開 Pytestでテスト CIをGitHub Actionsで回す
Poetry でパッケージ開発 pytest でユニットテストを実施しカバレッジを算出する パッケージをビルドし PyPI で公開する 検証環境にデプロイする 本番環境にデプロイする GitHub Actions で CI を回す codecovの設定 GitHub…

Perlでconstant(定数)をhashのキーに使う
ハマった事象 解決方法 1 括弧をつける 2 & をつける 参考にしたサイト Perlでconstant(定数)をhash…

php-fpmのステータスページを表示 Apache & htaccess
試した環境 php-fpm の pm.status_path について php-fpmのconfの設定 .htaccess の設定 アクセスしてみる 参考にしたサイト Apache環境で php-fpm のステータスページを htaccess…

Tags

Dates

© 2021   404 motivation not found