AlpineLinuxでDrupal8

2018年9月14日

さくらのVPS で Alpine Linuxを立ち上げられたので、CMS を動かそうと思いました。無難にいくなら慣れている WordPress なんですが、勉強も兼ねて PostgreSQL に正式対応している CMS を選びました。

PostgreSQL 対応ですぐに思い浮かぶのが、Movable Type です。他にメジャー所だと、DrupalJoomla! でしょうか。どちらも10年近く前に一度使ったことがある位で、最近はどう進化しているのかも分かっていない状態。

そんなわたしが Drupal を動作させるまでの顛末記です。

動作環境 Alpine Linux 3.6.2 (VM)、Drupal 8.3.7、nginx 1.12.2

最新の Drupal でないのは、間違えて DL してきたからです、アホですね。落ち着いたらアップデートしてみようと思ってます。httpd には nginx を選びました。勉強の為なんだからと、慣れていないものでやってます。

php7 が速いのは KUSANAGI で身に染みたので、まずは php7 で試します。nginx は LightTPD と同じくFastCGI タイプの php を使うので、インストールするものは php-fpm です。最初は以下のパッケージをインストールしました。Alpine Linux は細かく分かれてます。

php7-common
php7-cli
php7
php7-fpm
php7-gd
php7-mbstring
php7-pgsql

nginx のドキュメントルートにテスト用の PHPファイルを置いて、phpinfo() で動作を確認。正常に動作して、上記のモジュールが有効になっているのを確認します。

続いて Drupal のアーカイブをドキュメントルートに展開。ブラウザからアクセスします。これでインストール画面が出るはず……真っ白です。エラーメッセージはおろか、ダイアログも何も無し。

nginx のエラーログを見ると、JSON を扱う関数が無いよ、というエラーが出ています。php7-json を追加して php-fpm を再起動。リロードしてみるもやっぱり真っ白です。しかし今度はエラーの内容が一段階進んで、string 関連の関数で7つのエラーが。

エラーを頼りにネットを検索してみましたが、何が足りないのかわからず仕舞いでした。それでも php7 じゃなくて、php5 なら動くかも? という情報を仕入れられたので、あらためて php5 で挑戦です。先程の php7 系パッケージを全て apk dell して、今度は php5-json も忘れずに追加。

さて、今度はどうだろう……まだ白いままです。そろそろ雪の季節だな。

エラーログのほうは……と、先程と明らかに違いがあります。エラーは一つのみで、ctype うんぬんというものでした。こちらは公式サポート掲示板で、CTYPE 拡張モジュールが必要とわかりました。php5-ctype を追加です。

今度こそ! やりました、インストール画面が出て、言語も Japanese が選ばれています。ようやくスタートラインに立てました。[Save and Continue] をクリックすると、以下のような画面が。

SS では OK になっていますが、翻訳モジュールのダウンロード先ディレクトリ、sites/default/files/ をドキュメントルートに作って、nginx から書き込み可能にしないといけませんでした。これも先にやっておく必要があります。

問題のエラーは、公式の ftp サイトに接続できないエラーです。nslookup では正常に引けるし、調べてもよく分からなかったので、公式掲示板の助言に基づいて直接モジュールを DL しました。一つ前のページに戻ると、翻訳ファイルの DL 先リンクが表示されていますので、そこから Japanese を持ってきます。

sites/default/files/translations/ にモジュールを移動して、ブラウザをリロードすると表示が全て日本語に変わりました。これはけっこう感動できます。データベースの設定では、PDO の追加を求められましたので、php5-pdo、php5-pdo_pgsql も追加します。他にも php5-dom、php5-xml、php5-opcache が必要になります。

エラーとワーニングが解消できたら、予め作っておいた PostgreSQL の DB とユーザーを設定します。するとこんなエラーが。

これは PostgreSQL 9.0 から bytea 型のデフォルトの扱いが HEX に変更された為に起こるエラーで、8系以前なら起きません。Drupal はバイナリデータの HEX は未対応なんですね。

ALTER DATABASE "Database_name" SET bytea_output = 'escape';

DBユーザーでコンソールから、上記の SQL文を実行して変更します。これで後は最後までスムーズにインストールが進みました。昔の印象だとすごく時間が掛かっていたのも、今では WordPress と同じ位で終わります。

無事に終了すると最初の設定を行う画面になります。サイト名や管理ユーザーの登録など、この辺りは WordPress と一緒です。念のため settings.php ファイルのアクセス権設定をお忘れなく。結局、Drupal に必要な php5 モジュールは以下の通りでした。

php5-common
php5-cli
php5
php5-fpm
php5-gd
php5-pgsql
php5-json
php5-ctype
php5-openssl
php5-dom
php5-pdo
php5-pdo_pgsql
php5-xml
php5-opcache

これで晴れて Drupal の初期画面が表示されます。ようやく一段落……と思ったら別の問題が。いろいろなメニューをクリックしても、nginx の not found が出るばかりで、何も操作できません。表示される URL は合っていそうなのですが。

しかしよく見ると、実際には無いディレクトリが表示されています。これはアレだ、rewrite してるパターンか。nginx の場合はどう書けばいいのか分からず、取りあえずネットを検索すると公式掲示板に設定方法を投稿してくれている方がいました。ありがとうございます。

server ディレクティブに以下の追加をします。

location / {
root /var/www/html;
index index.php;
+       try_files $uri $uri/ @rewrite;
+       expires max;
}
+   location @rewrite {
+       rewrite ^/(.*)$ /index.php?q=$1;
+   }


ルートロケーションにリライトの条件と永続化、次にリライトするロケーションを追加します。nginx をリロードして、今度はちゃんとメニューからいろいろ表示できるのを確認しました。

 

思ったよりも手間取りましたが、動作もキビキビしているし、設定画面も分かりやすいし、とても面白そうな CMS だと思います。10年の月日は進化するには十分だったようです。