Cent OS  9 で GRAV + nginx

Cent OS 実験シリーズのおまけです。
Mattermostを導入してある 4GB メモリーの仮想サーバに GRAVを共存させてみるという内容です。
設定上は Mattermostの存在は何の関係もないのでまっさらなサーバでも同様に設定できると思います。
LAMPの構成であれば web rootに放り込むだけで gravは動作しますが、今回は nginx + php-fpm + grav の方式です。

Ubuntuや古いCent OS 6/7等とは結構手順やPATHが異なるので細かく書いておこうと思います。

Step1. 依存パッケージの導入

Cent OS 7 時代などは標準リポジトリの PHPが古く remiなど有名サードパーティリポジトリを使用していましたが
現在では標準で PHP 8が入るので特に GRAVの依存的には特に問題なくなっています。
今回のサーバーでは手癖で EPEL / RPMFusion だけ有効になっているので、もしパッケージ関連で動作に違いが出た場合は

sudo dnf install --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E %rhel).noarch.rpm
sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm

これを実行すれば同じ状態になります。
というわけで一通り導入していきます。

sudo dn update
sudo dnf install git   # gravのcloneに使います。
sudo dnf install nginx
sudo dnf install php  php-curl php-ctype php-dom php-gd php-json php-mbstring php-openssl php-session php-simplexml php-xml php-zip

Step.2 nginx / php-fpm の起動

まずは php-fpmの設定を行います。
設定ファイルは /etc/php-fpm.d/www.conf です。
Cent os 9の nginxはデフォルトで nginx ユーザーの権限で動いています。
debian系では www-data だったり他の権限で動作する場合は ユーザー名を読み替えてください。
動作するユーザーは通常 /etc/nginx/nginx.conf の冒頭に

user nginx;

のように宣言されていると思います。
このユーザーの権限で php-fpmも動かしたいので
/etc/php-fpm.d/www.conf

user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx

; listen.acl_users = apache,nginx  <- コメントアウト

以上の箇所を apacheなどデフォルトの名前から変更してください。

また、変更は不要ですが

listen = /run/php-fpm/www.sock
php_value[session.save_path]    = /var/lib/php/session

unix socketと session.save_path のパスを確認しておきます。
session.save_path に設定されている ディレクトリがないかったり permissionがおかしいと
PHP製のCMSではエラーの原因になるので

sudo mkdir -p /var/lib/php/session/
sudo chown -R nginx:nginx /var/lib/php/session/

一応実行しておくと安心です。

ここまで出来たら、一旦 nginxと php-fpmを起動しておきます。

sudo systemctl enable --now nginx
sudo systemctl enable --now php-fpm.service

nginx:nginx 660の .sockファイルが生成されていればOKです。

ls -al /run/php-fpm/www.sock

nginx + php-fpm はこのあたりの各ファイルのpermissionでコケがちな印象なので
指さし確認推奨です。

GRAVのインストール

GRAVは githubから cloneしてきます。
勿論 skeltonサイトの zipを展開しても問題ないです。

任意の場所に設置できますが、 /var/www 以下がおさまりがいいと思います。
nginxをかませていればバーチャルホスト機能などで複数のgravサイトを設置できるので
例として /var/www/grav01 をルートにします。
また設置後はくどいようですが nginx の動作ユーザ(今は nginx)に chownが必要です。

sudo git clone https://github.com/getgrav/grav  /var/www/grav01
sudo chown -R nginx:nginx /var/www/grav01

また、個別のファイルとディレクトリの permissionも gravのdocument通りに変更します。

 sudo find . -type f -exec chmod 664 {} \;
 sudo find ./bin -type f -exec chmod 775 {} \;
 sudo find . -type d -exec chmod 775 {} \;
 sudo find . -type d -exec chmod +s {} \;

これで設置OKです。
この gravサイトを nginxに登録します。

gravのルートフォルダには nginx用の推奨 configが入っています。
cent osの場合個別の confファイルは /etc/nginx/conf.d/ 以下に保存します。
分かりやすい用の grav01.conf として一旦コピーします。

sudo cp /var/www/grav01/webserver-configs/nginx /etc/nginx/conf.d/grav01.conf

コピーできたら次の場所を変更していきます。

 root /var/www/grav01;
 server_name grav01.hoge.jp; # 例えば

 ## PHP設定部分
 # fastcgi_pass 127.0.0.1:9000;
 fastcgi_pass unix:/run/php-fpm/www.sock;

server_name は サブドメインを利用して Mattermostと切り替えができるようにします。

mattermost.hoge.jp であれば Mattermost
grav01.hoge.jp であれば grav

のページが開かれるようになります。

ここまで来たらファイルの配置は完了です。
grav cliからinstallとadminプラグインの導入を行います。
root権限で実行して chown nginx:nginx をやり直すか
各コマンドを nginxで実行するかればOKです。

cd /var/www/grav01
sudo -u nginx bin/grav install
sudo -u nginx bin/gpm install admin

これで gravが利用可能になっています。

GRAVサイト立ち上げ

最後に

sudo systemctl restart php-fpm
sudo systemctl restart nginx

を実行して、完了です。
grav01.hoge.jp にアクセスして adminの初期アカウントを作るなどすれば

無事に立ち上がりました。

コメントを追加する