メインコンテンツに移動
vps eye catch
Drupal Logo

今回はモジュールのインストールなどを書こうと思っていましたが、

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

Image
メンテナンスモード

コマンドラインでの切替

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

Image
メンテナンスモード

 

コマンドラインでの切替

drushコマンドを使ってもメンテナンスモードへの切替は可能です。

# drush state:set system.maintenance_mode 0
# drush cache:rebuild

 

これでアップデートは完了です。

 

次回はDrupal9のモジュールインストールについて書いていきます

 

 

Drupal9を始めるにあたって、Drupal 9 Web開発ことはじめ (技術の泉シリーズ(NextPublishing)が発売されたそうです。よかたら参考にしてみてください。