今週はD11の正式リリースが予定されている。Drupal 11.0.0-rc1 + Gin 8.x-3.0-rc13 + Navigation moduleでまあまあ使えるがすぐには移行できないことはわかっている。もう少し、きちんとした検証をする際には、日本語環境と英語環境を準備することが望ましい。マルチリンガル機能によるバグが出ることは残念ながら少なくないからである。
それを検証するために、私はマルチサイト環境を立ち上げるようにしている。
プロジェクトディレクトリの下にweb/sitesがあるがここにsites.phpを作成する。ちなみに、プロジェクトディレクトリ配下はwww-dataを所有者としてある。
$sites = [
'ja.ulslab.net' => 'ja',
'en-ja.ulslab.net' => 'en-ja',
'en.ulslab.net' => 'en',
'ja-en.ulslab.net' => 'ja-en',
];
composerでの標準インストール(して、drushをインストール)するとweb/sites/example.sites.phpができるので、これをsites.phpにコピーして最後に上記の各行を追加すれば良い。この状態で、プロジェクトディレクトリで以下のインストールスクリプトをwww-dataで走らせれば、web/sites/jaなどのディレクトリが生成され、日本語、英語、日本語英語バイリンガル、英語日本語バイリンガルの初期環境がものの数分で立ち上がる。リセットしたければ、web/sites/jaなどのディレクトリを消去すれば良い。
vendor/bin/drush si --site-name=ja --locale=ja --db-url=mysql://dba:dba@localhost:3306/ja --account-name=ulsl-admin --account-mail=contact@ulslab.com -l ja.ulslab.net -y
vendor/bin/drush si --site-name=ja-en --locale=ja --db-url=mysql://dba:dba@localhost:3306/ja_en --account-name=ulsl-admin --account-mail=contact@ulslab.com -l ja-en.ulslab.net -y
vendor/bin/drush si --site-name=en --locale=en --db-url=mysql://dba:dba@localhost:3306/en --account-name=ulsl-admin --account-mail=contact@ulslab.com -l en.ulslab.net -y
vendor/bin/drush si --site-name=en-ja --locale=en --db-url=mysql://dba:dba@localhost:3306/en_ja --account-name=ulsl-admin --account-mail=contact@ulslab.com -l en-ja.ulslab.net -y
vendor/bin/drush en config_translation -l en-ja.ulslab.net -y
vendor/bin/drush language-add ja -l en-ja.ulslab.net -y
vendor/bin/drush locale:update --langcodes=ja -l en-ja.ulslab.net -y
vendor/bin/drush language-add en -l ja-en.ulslab.net -y
vendor/bin/drush user:create hagi --mail=hagi@ulslab.com --password admin -l ja.ulslab.net
vendor/bin/drush user:create hagi --mail=hagi@ulslab.com --password admin -l en.ulslab.net
vendor/bin/drush user:create hagi --mail=hagi@ulslab.com --password admin -l ja-en.ulslab.net
vendor/bin/drush user:create hagi --mail=hagi@ulslab.com --password admin -l en-ja.ulslab.net
vendor/bin/drush user:role:add administrator hagi -l ja.ulslab.net
vendor/bin/drush user:role:add administrator hagi -l en.ulslab.net
vendor/bin/drush user:role:add administrator hagi -l ja-en.ulslab.net
vendor/bin/drush user:role:add administrator hagi -l en-ja.ulslab.net
3306はmysql/mariadbのポート番号でuid 1のユーザー名等の情報は適当に設定すれば良い。ポイントはdrush siで--account-passwordを設定しないところにあり、これによってuid 1で外部からのログインが不可になる。逆に、管理者ユーザーでログインできないと作業ができないので、drush user:createとuser:role:addでhagiを管理者として登録している(念の為だが、passwordはその後drushで一括変更しているのでhagi/adminではログインできないようになっている)。
マルチサイトなので、-l ドメイン名を指定することで、4環境を区別してdrushを走らせることができる。
マルチリンガル環境の設定は英日サイトと日英サイトでは異なるのが興味深い。日本語でインストールすると、localeモジュールは有効になっているので、drush language-add enだけで良いが、英語インストールに日本語を足す場合は、drush language-add jaは失敗する。上の定義では、config_translationを有効にすることで依存性からlocaleも有効にするようにしていて、さらに翻訳の取り込みをするために、drush locale:updateを行っている。enは翻訳が存在しないので日英環境では同様の処理は不要となる。Drupalは多言語環境を丁寧に実装しているが、それでも英語環境は特別なのである。
ちなみに、mysqlのアカウントはdba/dbaとしているが、dbaにはcreate databaseの権限は与えていない。drush経由でdatabaseの生成から全部任せてしまう方法もあるが、私は権限の分離が望ましいと考えているからである。
実際には、sudo mysqlでmysqlのコンソールを起動し、
create user 'dba'@'localhost' identified by 'dba';
create database ja;
grant all privileges on ja.* to 'dba'@'localhost';
のように権限を与えている。もちろん、4つのデータベース全部に同様な処理を行う。
Apache2の設定は、ja.ulslab.net.confのように4つの定義ファイルを行い有効化している。
ServerAdmin webmaster@localhost
ServerName ja.ulslab.net
DocumentRoot /var/www/test
<Directory "/var/www/test">
AllowOverride All
</Directory>
ServerName以外は4つの定義ファイルで全く同一で良く通常通りa2ensite ja.ulslab.netのように4つの定義を有効化すれば良い。/var/www/testはプロジェクトディレクトリ/web(DocumentRoot)にシンボリックリンク(test -> /home/hagi/drupal/d11rc/web)している(以前ubuntu 20.04から22.04への移行中にひっかかったことで書いたが、ホームディレクトリでwww-dataのグループアクセスを有効にしておかないといけない)。
ちなみに、この環境でProject Browserを有効にしてAllow installing via UI (experimental)をOnにすると、
となる。Unable to download modules via the UI: Drupal multisite is not supported by Package Manager.とあるようにマルチサイト環境だと実験ができない。ちょっと考えると当たり前で、モジュールのインストールやアップデートはマルチサイトで共通だから、drush updb相当の反映はすべてのサイトで行わなければならない。今後、どう対応していくかが問われていると思う。管理画面からの作業でできることを増やすと、その影響範囲が及ぶ範囲も増える。そう考えると、Project BrowserやPackage Manager、Automatic Updateはマルチサイトで利用するのは危険と考えるのは自然。一方で、マルチリンガルに関わる問題を切り分ける際に同様の環境を作るにはマルチサイトは有効で、何を優先するかが問われることになる。
今回は、Drupal 11のリリースに備えて検証環境設定の準備を記事化した。実際にどれだけ時間が取れるかはともかく、思いついた時に、検証が可能な環境が手に入るのはうれしいことだ。