今回はモジュールのインストールなどを書こうと思っていましたが、
2021/5/26にDrupal 9.1.8のセキュリティアドバイザリ(SA-CORE-2021-003)が出ましたのでバージョンアップを行いましたので、Drupalのアップデート方法を書いていこうと思います。
Drupalアップデート
Drupalでは、Drupal8からDrupal9などメジャーバージョンアップはアップグレード、Drupal 9.1.8からDrupal 9.1.9のようなサブバージョンのバージョンアップはアップデートと定義されています。
Composerを使っている環境でのDrupalの一般的なアップデート手順を記載します。
バージョンアップにあたり、固有の対応が必要な場合もあるので都度確認ください。
なお、9.1.8から9.1.9へのバージョンアップは個別対応不要です。
https://www.drupal.org/project/drupal/releases/9.1.9
追記
9.1系内のバージョンアップ、9.1系から9.2系へのバージョンアップ、9.2系内のバージョンでも同様の手順で問題なく対応できています
追記(2021/9/3)
9.2.4から9.2.5へのバージョンアップで一部問題がありました
原因不明(オペミスなのか、前回バージョンアップ時の影響かは不明)ですが、update時に$drupal-root/site/default(私の環境では/var/www/drupal/web/site/defalt)の書込み権限がはずれていてエラーが発生しました。
該当ディレクトリにWrite権限を付与して再度composer updateを実行したら完了しています
追記(2021/12/13)
9.2.9から9.3.0へのバージョンアップも同様の手順で成功しています
Drupal 9.2.xは2022年6月までセキュリティパッチ提供、Drupal 8.9.x/9.1.xはセキュリティサポートが終わりましたので、皆様ご対応を検討ください
以下、アップデートの手順を記載します
DBバックアップ
drupal9からはdrush archive-dumpコマンドが無くなってしまったので、DBバックアップは個別に対応が必要です。
MariaDBを利用している場合、mysqldumpコマンドでも良いですし、drushコマンドでもバックアップ可能です。
mysqldumpでのDBバックアップ
DBユーザがroot、バックアップ対象DB名がdrupal、バックアップ保存先が/usr/local/backup/db_drupal.20210527の例です
# mysqldump -u root -p drupal > /usr/local/backup/db_drupal.20210527
Enter password: [パスワード入力]
drushでのDBバックアップ
drushコマンドでも同様にバックアップ取得が可能です。
バックアップ保存先が/usr/local/backup/db_drupal.20210527の例です
# cd /var/www/drupal
# drush sql:dump > /usr/local/backup/db_drupal.20210527
ファイルバックアップ
drupal9からはdrush archive-dumpコマンドが無くなってしまったので、必要なファイルはバックアップが必要です。
今回は面倒なので、drupalのインストールディレクトリを丸々バックアップしました
# tar cvzf /usr/local/backup/file_durpal.20210528.tgz /var/www/drupal/web
メンテナンスモード切替
ブラウザでの切替
Drupalの管理画面からメンテナンスモードに切り替えする場合は、ブラウザで管理画面に入り「管理」-「環境設定」-「開発」-「メンテナンスモード」と遷移し、
「サイトをメンテナンスモードにする」を有効にします。
https://www.your-domain.com/admin/config/development/maintenance
コマンドラインでの切替
drushコマンドを使ってもメンテナンスモードへの切替は可能です。
# drush state:set system.maintenance_mode 1
# drush cache:rebuild
現在のバージョンの確認
composerコマンドを使って現在のバージョン確認します
# composer show drupal/core-recommended
アップデート対象となるパッケージの確認
# composer outdated 'drupal/*'
下記のような結果が表示されます
drupal/core 9.1.8 9.1.9 Drupal is an open source content... drupal/core-composer-scaffold 9.1.8 9.1.9 A flexible Composer project scaf... drupal/core-project-message 9.1.8 9.1.9 Adds a message after Composer in... drupal/core-recommended 9.1.8 9.1.9 Locked core dependencies; requir... |
アップデート実施
# composer update drupal/core "drupal/core-*" --with-all-dependencies
9.1.8から9.1.9のアップデートでは下記のような結果になりました
Loading composer repositories with package information Updating dependencies Lock file operations: 0 installs, 4 updates, 0 removals - Upgrading drupal/core (9.1.8 => 9.1.9) - Upgrading drupal/core-composer-scaffold (9.1.8 => 9.1.9) - Upgrading drupal/core-project-message (9.1.8 => 9.1.9) - Upgrading drupal/core-recommended (9.1.8 => 9.1.9) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 0 installs, 4 updates, 0 removals - Downloading drupal/core (9.1.9) - Upgrading drupal/core-composer-scaffold (9.1.8 => 9.1.9): Extracting archive - Upgrading drupal/core-project-message (9.1.8 => 9.1.9): Extracting archive - Upgrading drupal/core (9.1.8 => 9.1.9): Extracting archive - Upgrading drupal/core-recommended (9.1.8 => 9.1.9) Package container-interop/container-interop is abandoned, you should avoid using it. Use psr/container instead. Package doctrine/reflection is abandoned, you should avoid using it. Use roave/better-reflection instead. Generating autoload files 42 packages you are using are looking for funding. Use the `composer fund` command to find out more! |
注意点
9.3系列から9.4系列に以下のエラーメッセージがでました。
(2022/7/22追記) 9.4.2から9.4.3へのアップデートでも同様です
[RuntimeException]
Could not delete /var/www/drupal/web/sites/default/default.settings.php:
ディレクトリ「/var/www/drupal/web/sites/default」に書き込み権限がなくファイルコピーに失敗していましたので、その際は書き込み権限を付与して対応しました。
# chmod 755 /var/www/drupal/web/sites/default
事後処理
Drupalのアップデート後はDBのアップデートとキャッシュの再構築を実施します
# drush updatedb
# drush cache:rebuild
アップデートの確認
ブラウザでアップデートしたDrupalのサイトにアクセスし、アップデートのサイト状況を確認します
メニューからでは[管理] - [レポート] - [サイトの状態]へアクセス、または対象サーバの/admin/report/statusへアクセスします
https://www.your-domain.com/admin/reports/status
メンテナンスモードになっていること以外に、想定しないエラー・警告が発生していなければアップデートは完了です
メンテナンスモード解除
メンテナンスモードを解除します。
ブラウザでの切替
Drupalの管理画面からメンテナンスモードに切り替えする場合は、ブラウザで管理画面に入り「管理」-「環境設定」-「開発」-「メンテナンスモード」と遷移し、
「サイトをメンテナンスモードにする」を無効にします。
https://www.your-domain.com/admin/config/development/maintenance
コマンドラインでの切替
drushコマンドを使ってもメンテナンスモードへの切替は可能です。
# drush state:set system.maintenance_mode 0
# drush cache:rebuild
これでアップデートは完了です。
次回はDrupal9のモジュールインストールについて書いていきます
Drupal9を始めるにあたって、Drupal 9 Web開発ことはじめ (技術の泉シリーズ(NextPublishing)が発売されたそうです。よかたら参考にしてみてください。