AIでいろいろできるので味を占めてCMSを作りたいといったところ、かなり重めなものを提示してきたので、軽めのものを・・と伝えると「Grav」を提案してくれたので、全く知らないものをAIの協力で作れるのか試してみた。
結果、いろいろ苦労の末、
「静的Webサイト(`/`)とGrav(`/grav`)を共存させる」ことができたので、その最終手順を残しておきます。
その前に苦労話
・最初に / にあるコンテンツは残したままで、gravを共存させたいと伝えなかったので、/にgravが構築されてしまい、先のRRDTOOLのグラフが見えなくなってしまった。
・その後、リセットすることなく、対処を続けた結果、なんども同じような設定を繰り返えしては、NGとなることをくりかえすはめに
・最終的には、最初から入れるようにしたところ比較的スムーズにできた。
・が、最後の最後でCSSが読み込めないトラブルに見舞われた。が、AIの助けでなんとか完成
-----
1.Grav環境の初期化(もしすでにある場合)
システムに古い設定やファイルが残ることを防ぐため、Grav環境を一度リセットします。
1)Gravファイルの削除:
cd /var/www/
sudo rm -rf grav
2)Nginx設定の最小化:
`/etc/nginx/sites-available/default` を開き、Gravに関する設定を**すべて削除**し、静的ページのみの最小構成に戻します。
(以前の履歴を参考に、`location /` ブロックと `root`、`index` のみ残します。)
2.Gravの再インストールと権限設定
1)Gravを再ダウンロード:
cd /var/www/
sudo wget https://github.com/getgrav/grav/releases/download/1.7.49/grav-admin-v1.7.49.zip
sudo unzip grav-admin-v1.7.49.zip
sudo mv grav-admin grav
2)権限の修正:
sudo chown -R www-data:www-data grav
3.Nginx設定の最終適用(成功した構成)
Nginxの設定ファイル /etc/nginx/sites-available/default の server { ... } ブロック内に、以下の3つのブロックを追記します。
1)`location /grav` ブロック:
`alias` で実体パスを指定し、`rewrite` でクリーンURLを `index.php` に強制的に誘導します。
2)`location ~ \.php$` ブロック:
`SCRIPT_FILENAME` を **`$fastcgi_script_name` と組み合わせ、Nginxの不安定なパス計算を回避します。
【Nginx設定(/etc/nginx/sites-available/default)の内容】※追記部分を太字にしています
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 192.168.11.109;
# 静的ページ(/var/www/html)を指す
root /var/www/html;
index index.html index.htm index.php;
# ルートへのリクエストは静的ファイルとして処理
location / {
try_files $uri $uri/ =404;
}
# ----------------------------------------------------
# Gravを /grav/ のサブディレクトリで動かすための設定
# ----------------------------------------------------
location /grav {
# alias で Grav の実体パスを明確に指定
alias /var/www/grav;
# クリーンURLを全て /grav/index.php にリライトを強制する
rewrite ^/grav/(.*)$ /grav/index.php;
}
# ★★★ Gravアセット(静的ファイル)の処理の最終形 ★★★
location ~ ^/grav/(assets|images|user/plugins|user/themes|system/assets)/ {
# locationのパターンからキャプチャしたパスを$asset_pathに格納
# 例: /admin/themes/grav/css/admin.css
set $asset_path $1;
# aliasではなく、rootとrewriteを組み合わせ、絶対パスを強制する
root /var/www/grav;
# /grav/ の部分を削除し、ファイルシステム上で探すパスに変換
# /grav/assets/... → /var/www/grav/assets/...
rewrite ^/grav/(.*)$ /$1 break;
try_files $uri $uri/ =404;
}
# PHPファイルの処理設定(Gravの実行を最優先)
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
# ★★★ SCRIPT_FILENAMEを強制的に正しく計算させる ★★★
# $fastcgi_script_name が /grav/index.php を受け取ったとき、
# /var/www/grav/grav/index.php とならないように、/var/www/ をベースにす る
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
}
# Gravのセキュリティ関連設定
location ~ /grav/(cache|images|logs|tmp|backup|user)/ {
deny all;
}
}
4.サービスの再起動と最終確認
1)NginxとPHP-FPMの再起動:
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm
2)動作確認:
ブラウザで以下の3点が正常に表示されるか確認します。
* `http://192.168.11.109/` (静的ページ)
* `http://192.168.11.109/grav/admin` (管理者画面)
* `http://192.168.11.109/grav/typography` (クリーンURL)

