Drupal 9.4.8の場合 composer create-project drupal/recommended-project:9.4.8 "install-dir"
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-php 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-php 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-php 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の場合
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.
詳細は: 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 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
Debianの場合(Drupal 10をReverse Proxyで運用)
上記の環境では、 composer update や ./vender/bin/drush コマンドは sudo なしで実行できます。
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ベースでのアップグレード作業の手順概要(英語)を参照します。
パーミッションの変更
今回の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へアップグレードできました。
以下のコマンドでパーミッションを戻します。
※もし、これでもDrupal9.3.9へのアップグレードができない場合は、空のDrupal9.3.9のソースを用意して、追加モジュールをComposerでインストールし、Sitesディレクトリ、テーマ、Profileディレクトリなどを移行前のDrupal8のデータと同じ状態にします。既存のデータベースをインポートして、新規Drupa9.3.9インストール手順で移行を行います。
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日)
また、もし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.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 での拡張モジュール 詳細は ここから
Drupal 9・10でのさまざま設定や機能に関する情報です。
Q. ログインしたユーザーがユーザーパスワードを変更できないようにしたい!
A. 拡張モジュールもいくつかあるようですが、シンプルに、ユーザープロファイルのフォーム画面制御で「ユーザー名とパスワード」(/admin/config/people/accounts/form-display)を非表示にすることで、パスワード変更ができない状態になります。ただし、管理者も含めてすべてのユーザーが同じ設定なりますので、パスワード変更では、一時的に非表示から表示に変更が必要になります。
Morethanthemesの概要: https://www.morethanthemes.com
英語がオリジナルなので、日本語を追加後、トップページが表示されないのは、トップページを日本語へ翻訳していないからです。その場合は、トップページのコンテンツ /news-default もしくはそのノード番号 /node/70 のページを日本語の翻訳を有効にします。
Morethanthemesのデータ構造付きデータベースをインポートする場合は英語をメインにします。Morethanthemesのデータは初期作成時に英語をデフォルト設定で作成されていますので。その後、日本語を追加、英語と日本語をともに翻訳可能にします。言語のデフォルト設定は英語で設定し、コンテンツタイプごとにメインの言語を設定し、日本語がページ作成でデフォルト設定になるように設定します。
初期設定後は、日本語をデフォルト設定にしたコンテンツタイプなどは、日本語環境で運用し、サイト全体や英語がメインのデフォルト設定の作業設定は英語の環境で行うほうが問題が少ないと思います。
ただし、Default Langageが英語の場合、コンテンツタイプで日本語をデフォルト設定にした場合、日本でコンテンツを作成すると、英語に翻訳しないとコンテンツのページが見つからない状態になります。そのコンテンツを英語に翻訳すると日本語と英語で表示されます。この状態は、常にDefault Languageの英語が必要で、日本語と英語をペアでコンテンツ作成する必要があります。
英語版で構築されたデザインテンプレートでデータベース込みで新規インストールの場合は、「Default langauge」は英語のままで、日本語を追加して、英語と日本語の多言語環境として運用し、コンテンツを作成する場合、英語と日本語をともに作成します。ただし、日本語だけ(英語は今は使わない状態)で運用したい場合は、日本語だけで運用するコンテンツタイプをの「Default langauge」を「-Not specified-」に設定します。後で、日本語に設定して英語を追加すれば多言語になります。
また、英語が「Default langauge」の場合は、サイトのさまざま環境設定は、英語環境で設定するほうが、多言語の設定が理解しやすいと思います。検証が複雑になる場合があると思いますので。
https://www.drupal.org/docs/multilingual-guide/install-a-language
「Not specified 指定されていない」で指定すれば、英語がDefault Languageで、コンテンツタイプを「Not specified」で設定すれな、日本語環境でそのコンテンツタイプのコンテンツを新規作成した場合、日本語で表示されます。
先にEnglishなどで言語指定したコンテンツは、あとから「Not specified」に変更することはできません。また、「Not specified」で作成した場合、あとから、日本語や英語に変更は可能です。その場合、多言語サイトの設定に準じるので、設定されている多言語のそれぞれの言語のページがないと表示エラー(Page not found)
以下の動作検証は、コンテンツタイプ -> Language settings -> Default language -> "Show language selector on create and edit pages" および "Enable translation" を有効にしない状態で検証しました。 この2つの機能を有効すると、すべての状態で翻訳が有効になります。
新規コンテンツ作成(Not specified)で作成 -> 日本語でコンテンツを作成 -> 翻訳できない日本語のコンテンツ
新規コンテンツ作成(Not specified)で作成 -> コンテンツタイプを日本語に変更 -> 日本語でコンテンツタイプ作成(翻訳できない)常に(Not specified)の日本語のコンテンツ
新規コンテンツ作成(Not specified)で作成 -> コンテンツタイプをサイトデフォルト言語に変更 -> 日本語でコンテンツタイプ作成(翻訳できない)常に(Not specified)の日本語のコンテンツ
つまり、コンテンツタイプを新規に作成するときに、Not specified で作成した場合は、変更しても、常に、Not specified になります。多言語設定をするときには、Not specified もしくは Not accpkucable 以外の翻訳できる言語設定します。その後、そのコンテンツタイプをNot specified をデフォルト設定にすれば、例えば、英語がデフォルトでも日本語だけのコンテンツを作成し、将来、日本語・英語にすることが可能になります。
新規コンテンツ作成(Not applicable)で作成 -> 日本語でコンテンツを作成 -> 翻訳できない日本語のコンテンツ
新規コンテンツ作成(Not applicable)で作成 -> コンテンツタイプを日本語に変更 -> 日本語でコンテンツタイプ作成(翻訳できない)常に日本語のコンテンツ
Q: デフォルトのスライドショーの写真を変更したい
A: デフォルトのスライドシューの写真などを変更しても変化がないので、Layputの編集で、追加のスライドショーを追加して、編集します。その後、デフォルトのスライドショーをLayoutの編集で削除します。スライドショーのブロックは、ブロックタイプで定義しているので、そのブロックを修正します。
composerで更新後、drushコマンド実行でエラー
In Connection.php line 189:
SQLSTATE[HY000] [2002] Connection refused
データベースの接続が失敗していようなので、sudo systemctl stop mysql , sudo systemctl restart mysql で接続が出来ました。
モジュールの概要: https://www.drupal.org/project/workbench_email
FAQ:
Q:Webform Libraries をインストールする方法
A: Composerを使ってインストールします。 概要は https://www.drupal.org/node/3003140
Composer Merge Pluginをインストールしましす。 composer require wikimedia/composer-merge-plugin
composer.json ファイルの "extra": { セクションに以下の内容を追記します。
"merge-plugin": { "include": [ "web/modules/contrib/webform/composer.libraries.json" ] }
Composer update を実行します。web/modules/contrib/webform/ にインストールされます。
モジュールの概要: https://www.drupal.org/project/multiple_registration
FAQ:
Q:ユーザー登録時に自動配信されるワンタイムリンクのメッセージメールの配信ができない。
メッセージメールの配信は、 /admin/config/people/accounts アカウント設定の「通知メールアドレス」に設定したメールアドレスから自動配信されます。SMTP設定で、そのメールアドレスから配信できるか、確認が必要です。