Drupal 9

Drupal 9
インストール

composerでDrupalプロジェクトとして新規インストールする場合

Drupal 9.4.8の場合 composer create-project drupal/recommended-project:9.4.8 "install-dir"

 

PHP

PHP5.6の場合

libapache2-mod-php5.6

PHP 7.4 の場合

libapache2-mod-php7.4 php-common php7.4 php7.4-bcmath php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-xml php7.4-zip

PHP8.1の場合

libapache2-mod-php8.1 php-common php8.1 php8.1-bcmath php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-zip

PHP8.2の場合

libapache2-mod-php8.2 php-common php8.2 php8.2-bcmath php8.2-cli php8.2-common php8.2-curl php8.2-gd php8.2-mbstring php8.2-mysql php8.2-opcache php8.2-readline php8.2-xml php8.2-zip php8.2-dom

PHP8.3の場合

libapache2-mod-php8.3 php-common php8.3 php8.3-bcmath php8.3-cli php8.3-common php8.3-curl php8.3-gd php8.3-mbstring php8.3-mysql php8.3-opcache php8.3-readline php8.3-xml php8.3-zip

php.ini の設定

memory_limit = -1
upload_max_filesize = 64M
post_max_size = 64M
realpath_cache_size = 256k
realpath_cache_ttl = 3600

 

PHP7.4 -> PHP8.1 への切り替え

sudo a2dismod php7.4

sudo a2enmod php8.1 
sudo service apache2 restart

Commandでの切り替えの場合は

sudo update-alternatives --set php /usr/bin/php8.1 
sudo update-alternatives --set phar /usr/bin/phar8.1 
sudo update-alternatives --set phar.phar /usr/bin/phar.phar8.1 
sudo update-alternatives --set phpize /usr/bin/phpize8.1 
sudo update-alternatives --set php-config /usr/bin/php-config8.1

詳細は https://tecadmin.net/switch-between-multiple-php-version-on-debian/

 

PHPのバージョンを入れ替える時には、例えば PHP7.4に切り替えるときは、

# update-alternatives --set php /usr/bin/php7.4

もしくは 以下のコマンドで切り替え環境を選択できます。

sudo update-alternatives --config php

alternative php (/usr/bin/php を提供) には 8 個の選択肢があります。

  選択肢    パス           優先度  状態
------------------------------------------------------------
  0            /usr/bin/php8.1   81        自動モード
  1            /usr/bin/php5.6   56        手動モード
  2            /usr/bin/php7.0   70        手動モード
  3            /usr/bin/php7.1   71        手動モード
  4            /usr/bin/php7.2   72        手動モード
  5            /usr/bin/php7.3   73        手動モード
* 6            /usr/bin/php7.4   74        手動モード
  7            /usr/bin/php8.0   80        手動モード
  8            /usr/bin/php8.1   81        手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:

 

PHP-FPM を使っている場合は、fpm の設定を、Apache2の sites-avaiableのサイト設定confファイル内でPHP-FPMバージョンを調整します。

例えば、php8.1で以下の設定の場合は、php8.1 -> php7.4 に修正し、Apache2再起動などで設定が変更になります。

<FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/"
    </FilesMatch>

念のために sudo systemctl restart php7.4-fpm   確認は sudo systemctl status php7.4-fpm

もし update-alternatives コマンドから削除するには、たとえば、PHP7.4の場合

  • PHP7.4でaptインストールしたモジュールなどをすべて apt --purge でアンインストール
  • sudo update-alternatives --remove php /usr/bin/php7.4

 

PHP Opcode キャッシング

Debian buster 10 の場合 sudo apt-get install php-apcu

PHP APCu キャッシング

Debian buster 10 および 11 の場合 sudo apt-get install php-apcu

PHP 8.1の場合 sudo apt install php8.1-apcu

PHP 8.1 の場合 /etc/php/8.1/mods-available/apcu.ini  に以下の設定を追加

 apc.enabled = 1
 apc.shm_size = 96M

Debian 11 の場合は php-apcu インストール後のデフォルト設定では以下の設定になりました。

 apc.enabled On
 apc.shm_size 32M
 apc.ttl 0

Debian buster 12  PHP8.1 の場合 sudo apt-get install php8.1-apcu

   sudo a2enmod proxy_fcgi setenvif
 sudo a2enconf php8.1-fpm

  php-apcu インストール後のデフォルト設定では、/etc/php/8.1/mods-avaiable/acpu.ini では以下の設定になりました。

 extension=apcu.so

 /etc/php/8.1/fpm/conf.d/20-apcu.ini では以下の設定になりました。

 extension=apcu.so

 上記Debian12での php-apcu インストール後の動作環境は以下の設定でした。

 Enabled (32 MB)
 Memory available: 31.23 MB.

 

Composerのインストール

詳細は: https://getcomposer.org/download/

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

sudo mv composer.phar /usr/local/bin/composer

 

ComposerでDrupal9のインストール

Composer template for Drupal projectsを使う場合 詳細は: https://github.com/drupal-composer/drupal-project

composer create-project drupal-composer/drupal-project:9.x-dev some-dir --no-interaction

 

dev版ではない環境のインストール(Drupal 9.4.1の場合) 詳細は: https://www.drupal.org/project/drupal/releases/9.4.1

composer create-project drupal/recommended-project:9.4.1 some-dir

 

アップデイト

Drupal 9.4.xxxの場合 詳細は: https://www.drupal.org/project/drupal/releases/9.4.1

composer update "drupal/core-*" --with-all-dependencies

バージョンを指定してアップデイトする場合(9.4.1を指定した場合)

composer require drupal/core-recommended:9.4.1 drupal/core-composer-scaffold:9.4.1 drupal/core-project-message:9.4.1 --update-with-all-dependencies

その後モジュールやSymponyなどの環境のアップデイト

composer update

 

アップグレード

Drupal 8からDrupal 9へ

システム環境

Drupal 8.9.20からDrupal 9.3.9へのアップグレード

手順概要

PHPをPHP7.4へアップグレード  データベースは MariaDB 10.7.3 へアップグレード

既存DrupalのデータベースとDrupalホームのディレクトリをすべてバックアップします。

デザインテンプレートのアップグレード

Drupal 8.9.20 環境で Upgrade Statusモジュールをインストールして更新できるモジュール環境を確認します。

Upgrade StatusモジュールがComposerの依存関係などでインストールできない場合は、依存関係を無視してインストールします。

sudo composer require --update-with-dependencies --prefer-dist 'drupal/upgrade_status:^3.14'

最初に、更新できないモジュールは、アンインストールして drush updatedb を行います。

更新できるモジュールでも、Drupal 8とDrupal9対応、Drupal 9.0対応のみ、などさまざまな制約があるので確認します。その制約に応じたアップグレードの段階的な更新作業が必要です。

今回は、Drupal 8.9.20 上でDrupal 8とDrupal9対応のモジュールは、composer update コマンドで更新できました。Drupal 9.0から対応のモジュールのバージョンがあるので、一度、Drupal 9.0までアップグレードして、それからDrupal 9.3.9へアップグレードする手順で行いました。ただし、この手順ではDrupal 9.3.9へのアップグレードはできなかったので、後述の(B)Drupal9.3.9を指定してアップグレードを行いました。

Drupal 9へのComposerベースでのアップグレード作業の手順概要(英語)を参照します。

パーミッションの変更

  • sudo chmod 777 ./web/sites/default/
  • sudo chmod 666 ./web/sites/default/*settings.php
  • sudo chmod 666 ./web/sites/default/*services.yml

今回のDrupal8は drupal/core-dev でComposerインストールしているので、その手順で、Drupalコアを Drupal 9.0.14 へアップロードします。

sudo composer require 'drupal/core-dev:^9' --dev --update-with-dependencies --no-update

Updating drupal/core-dev (8.9.20 => 9.0.14)

上記コマンドで、もし、9.0.14にアップグレードしない場合は、 sudo composer update を実行します。

データベースの更新 sudo drush updatedb

今回は drupal/menu_per_role:^1.4 と drupal/metatag:^1.19 がDrupal 9.0専用モジュールのバージョンが必要なので、アップデイトインストールします。

sudo composer require 'drupal/menu_per_role:^1.4'
sudo composer require 'drupal/metatag:^1.19'

Updating drupal/core-dev (8.9.20 => 9.0.14)
Updating phpstan/phpstan (1.5.2 => 1.5.3):

データベースの更新 sudo drush updatedb

(B) Drupal 9.0.0 から最新のDrupal 9.3.9 のバージョンを指定してアップデイトします。

sudo composer require "drupal/core:9.3.9" --no-update && sudo composer update

Updating drupal/core-dev (9.0.14 => 9.3.9)

データベースの更新 sudo drush updatedb

これで、Drupal 8.9.20からDrupal9.3.9へアップグレードできました。

以下のコマンドでパーミッションを戻します。

  • sudo chmod 755 web/sites/default
  • sudo chmod 644 web/sites/default/*settings.php
  • sudo chmod 644 web/sites/default/*services.yml

 

※もし、これでもDrupal9.3.9へのアップグレードができない場合は、空のDrupal9.3.9のソースを用意して、追加モジュールをComposerでインストールし、Sitesディレクトリ、テーマ、Profileディレクトリなどを移行前のDrupal8のデータと同じ状態にします。既存のデータベースをインポートして、新規Drupa9.3.9インストール手順で移行を行います。

 

drupal-scaffoldの問題

Drupal 8 の初期の環境、Composer Devパッケージではない場合は、drupal-scaffold がComposerベースのバージョンではありません。drupal/core-compoeser-scaffold 版に変更が必要です。drupal/core-compoeser-scaffold 版ではComposer 2も使えると思います。

まず、sudo composer require --dev drupal/core-dev:8.9.20 でDrupal 8.9.20へアップデイトします。

この時点で、symfony/css-selectorがバージョン4になってしまう場合は、バージョン3にダウングレードします。

sudo composer require --update-with-dependencies --prefer-dist symfony/css-selector:3.4.9

もし、ほかのモジュールもダウングレードが必要ならば 繰り返します。

その後、sudo composer require  drupal/upgrade_status で upgrade_status モジュールをインストールします。この環境でないと upgrade_statusモジュールはインストールできません。

sudo composer require --dev drupal/core-dev:8.9.20 --update-with-dependencies --prefer-dist symfony/css-selector:3.4.9

sudo composer require --dev drupal/core-dev:8.9.20 --update-with-dependencies --prefer-dist symfony/debug:3.4.9

sudo composer require --update-with-dependencies --prefer-dist symfony/css-selector:3.4.9

 

また、もし、composer update実行時に以下のようなエラーが起きた場合は、drupal-composer/drupal-scaffoldを削除します。

  Problem 1
    - drupal-composer/drupal-scaffold[2.5.0, ..., 2.6.1] require composer-plugin-api ^1.0.0 -> found 
composer-plugin-api[2.3.0] but it does not match the constraint.
    - Root composer.json requires drupal-composer/drupal-scaffold ^2.5 -> satisfiable by 
drupal-composer/drupal-scaffold[2.5.0, ..., 2.6.1].

sudo composer remove drupal-composer/drupal-scaffold

なぜなら、drupal-scaffoldは使わないようになりました。代わりに drupal/core-composer-scaffold を使います。(2022年6月18日)

 

webfloの問題

また、もしcomposer update などでwebflo関連の依存関係やエラーが起きた場合は、composer remove webflo/drupal-core-require-dev  や composer remove webflo/drupal-finder などで削除します。

"webflo/drupal-finder": "^1.0.0",
        "webmozart/path-util": "^2.3",
        "zaporylie/composer-drupal-optimizations": "^1.0"
    },
    "require-dev": {
        "webflo/drupal-core-require-dev": "^8.6.0"

 

Drupal 8のデータベースからDrupal 9へアップグレード

環境 

 Drupal 8.9.20(PHP7.4環境)から Drupal 9.5.8 (PHP8.1環境) へのアップグレード OSはDebian10

   Drupal8でのモジュールは アクティブのモジュールは、コア 41モジュール、追加モジュール 98モジュール

手順概要

PHPをPHP7.4からPHP8.1へアップグレード データベースはPHP7.4での環境で使っていたのと同じです。

Drupalディレクトリをバックアップ用にします。新しいDrupal 9.5.8をインストールするディレクトリと入れ替えます。同じデータベースを使って、Drupal8とDrupal9を入れ替えます。

Drupal 9.5.8 のダウンロード sudo composer create-project drupal/recommended-project:9.5.8 ./

移行元の web/sites/default/files をDrupal9へコピー 

移行元のモジュール、デザインテンプレートなどのモジュールのDrupal9版をcomposerでDrupal 9.5.8へインストールします。もし、Drupal9版がない場合はインストールしません。

composerでdrushコマンドも追加インストールします。 sudo composer require drush/drush

Drupal9ディレクトリのパーミッションを調整して、新規Drupal9インストール手順を実行します。インストール中に、データベース設定となりますので、そこで、移行元のデータベースの設定にして、続けると、既にインストール済みなので、「アップデイトしますか」、「既存のサイトを見ますか」の選択になり、「既存のサイトを見ますか」を選択クリック

その後、sudo drush updatedb を実行します。必要であれば update.php もsetteings.phpで権限設定変更して、実行します。その後、sudo drush cr を繰り返し、データベース定義のアップグレードが完了するまで繰り返します。追加モジュールなどのデータ構造により、できない場合もあり得ると思いますが。エラーの内容を確認します。

この作業でDrupal9.5.8へアップグレードしたDrupalサイトは https://kawasaki-bf.jp

※もし、サイトがメンテナンスモードになっている場合は sudo drush state:set system.maintenance_mode 0  でOFFになります。 参考:https://www.drupal.org/docs/user_guide/en/extend-maintenance.html

※もし、site...../upddate.phpを実行して、Drupal9対応モジュールがないDrupal8モジュールでモジュールがないのでupdate.phpスクリプトが実行できない場合は、そのモジュールをDrupal9サイトへコピーしてのxxxxx.info.yml ファイルを編集して、「core_version_requirement: ^9.2 || ^10」を追加して、強制的にDrupal9対応の設定モードにして、updata.phpを実行させます。

 

デザインテーマ

Drupal 9向けデザインテーマテンプレート(https://www.morethanthemes.com)の使い方

 

多言語化

Drupal8の多言語化と同じになります。詳細は ここから

 

拡張モジュール

Drupal 9 および Drupal 10 での拡張モジュール 詳細は ここから

 

タグ: 

オープンソースソフトウェア: 

CMS: