アップデート方法
アップデートが必要な理由
脆弱性対応
古いバージョンのMODXには脆弱性があり、外部からの攻撃を受けてサイトを改竄される・重要な情報を取得されるなどの被害を受ける可能性があります。最新のMODXでは、これらの問題が解決されています。
蓄積され続けるログ
1.0.5J-r7以前のMODXでは、ログが無限に蓄積されます。このためサーバ領域が圧迫されサイト全体に問題を引き起こすことがあります。最新のMODXでは、ログの蓄積上限を2000件までとしており、古い日時のログは自動的に消去されます。
新しいPHPへの対応
サーバ側でPHPのバージョンアップが行なわれると、古いバージョンのMODXは正常に動作しなくなることがあります。最新版のMODXは、最新のPHPに対応しています。(※PHP8対応が遅れていますが対応を予定しています)
注意
データの先祖返りに注意!
アップデート完了後に、古いSQLバックアップデータをインポートし直すと、データベースの構造ごと先祖返りが起こります。うっかり先祖返りさせてしまった時は、もう一度アップデート操作をやり直してください。
アップデート前の準備
- 「レポート」→「イベントログ」でログに目を通し、不自然なログがないかチェックします。もし問題を感じた場合は、必要に応じて対応してください。
- 1.0.5J-r9以降のバージョンからアップデートする場合(バックアップが簡単)
管理画面の「ツール」→「バックアップ・リストア」を開き、「スナップショット」タブで最新のスナップショットを作成してください。
▲「スナップショットを追加する」をクリックしてデータベースのダンプを/temp/backup/に保存します。
アップデートを実行する
- MODX最新版のアーカイブをダウンロードし、解凍(展開)します。
- 解凍した全てのファイルをサーバ上に上書き転送します。
- 転送が終わったら http://インストール先/install/ にアクセスし、画面の指示に従ってアップデートを進めてください。
- アップデートが終わったら必ず /install/ ディレクトリを削除してください。
- 管理画面にログインするとグローバル設定画面が表示されるので、「更新」ボタンをクリックします。
- サイトを表示し、問題がないことを確認します。メール送信フォームを設置している場合は送信テストを忘れないようにしてください。
アップデート作業の画面遷移
※画面のキャプチャ画像は、インストールするバージョンによって多少の差異があります。
▲サーバへの転送後、http://インストール先/install/ にアクセスしてスタートします。
▲日本語を選択します。
▲通常アップデートにチェック
▲テンプレート・スニペット・プラグインなど、利用中のMODXにインストールされていないものや、バージョンが上がっているプラグインなどをインストーラーが判断して表示されます。
※インストールをしたくない場合や、バージョンを上げたくない場合はチェックを外します。不具合修正を随時行なっていますので、できるだけバージョンアップすることをおすすめします。
(バージョンの確認は、下記の「補足解説」に記述しています。)
▲すべて「問題なし」と表示されたことを確認します。
▲インストールが成功したことを確認して、「インストールディレクトリを自動的に削除する」にチェックをいれます。もしこの表示がない場合はFTPなどで手動でinstallディレクトリを削除してください。
▲「インストール終了」ボタンをクリックすると、ログイン画面が表示されます。ここでログインします。
▲古いバージョンからのアップデートの場合は、上記のような白っぽいログイン画面が一時的に表示されることがありますが、このままログインしてください。
▲http://example.com/manager/ にログインすると、上記のメッセージが表示されるので「更新」をクリック。
▲ダッシュボードに「警告」タブが表示されて、インストーラーの警告メッセージが表示されていたら /install/ディレクトリが残ったままなので削除します。
▲「install」を削除
これでアップデート作業は終了です。あとはスニペットやプラグインなど動作の確認をしてください。
より慎重に対応するには
データのバックアップを確保し、いざという時に元の状態に戻せるようにしておきましょう。
1. バックアップ作業
- 【重要】管理画面の「ツール」→「バックアップ」を開き、「DROP 文を生成」と「テーブル名」横のチェックボックスにチェックを入れて全てのTableを選択し、その上の「ここをクリック」をクリックし、バックアップデータを取得します。
- ダウンロードしたバックアップデータが大き過ぎる場合(数十MB以上)は、いざという時にリストアできません。もう一度「バックアップ」を開き、「event_log」と「manager_log」の行の数字をクリックし、蓄積されたログを初期化してください。ログをクリアできたら、再び同じ手順でバックアップデータを取得してください。
- ファイルのバックアップをとる前に、キャッシュを初期化し、不要なキャッシュファイルを整理します。管理画面ナビゲーションの「メイン」→「サイトをリフレッシュ」(古いMODXではメイン→キャッシュのクリア)を実行してください。
- 【重要】 /assets/ ディレクトリ全体をダウンロードしてください。
- MODX設置ディレクトリの /index.php と /.htaccess をダウンロードしてください。
- /manager/ ディレクトリ全体をダウンロードしてください。
2. アップデート作業
- MODX Evolution最新版をダウンロードし、アーカイブを解凍します。
- /assets/ フォルダを「上書き」でサーバに転送します。
- サーバ上の /manager/ ディレクトリを /manager_bak/ に名前を変更するなどして退避してください。
これで/manager/ディレクトリは、手順1でローカルに保存したものと、サーバー上の2つがバックアップされることになります。 - /manager/ フォルダをサーバに転送します。こうすることで、クリーンな状態でシステムを更新できるため、トラブルが起こりにくくなります。
- バックアップをとっておいた /manager/includes/config.inc.php をサーバに転送します。
- 残りのファイル(/install/ ディレクトリ・index.php・.htaccessなど)をサーバ上に転送します。
- 【重要】ブラウザを開き、設置URL/install/ をアドレスバーに入力してインストーラを起動します。
この時に、インストーラーを実行せずにログインした場合や、modx管理画面をブラウザで表示したままファイルをサーバーにアップロードしただけの場合でも、普段と同じように管理画面にログインでき、「グローバル設定」の更新メッセージも表示されるので注意が必要です。インストールが完了したと勘違いしやすいです。
※実際にはファイルが上書きされただけで、アップデートされていません。(補足解説をお読みください) - 以降は、インストーラの指示に従ってアップデートを進めていきます。
- アップデートが無事に完了したら、/install/ ディレクトリと、退避しておいた古い /manager/ ディレクトリ(manager_bak)を削除します。
3. アップデートに失敗した時の復旧作業(リストア作業)
- サーバ上の /manager/ ディレクトリ・/assets/ ディレクトリ・index.php・.htaccessを削除します。
- phpMyAdminなどを利用し、バックアップデータをインポートします。
- バックアップをとっておいた /manager/ ディレクトリ・/assets/ ディレクトリ・index.php・.htaccessをサーバ上に戻します。
- 管理画面へのアクセスとサイトの表示が無事にできていれば復旧完了です。
補足解説
- アップデートの際のトラブルは拡張機能に原因がある場合が多いためご注意ください。たとえば拡張機能のライブラリファイルが収められているassetsフォルダを上書きしていてインストーラを実行しなかった場合、拡張機能の組み込みが更新されず不整合が発生します。アップデート後にQuickManager・ManagerManager・TinyMCEなどのプラグインが動かなく なったという場合、これが原因であることが多いです。
- 0.9系からのアップデートの場合は、QuickEditプラグインとBottomButtonBarプラグインを無効にしてください。
- Ver1.82aよりも新しいFFFTPは転送するファイル数が多い場合は正しく転送できないことがあります。うまくいかない場合はFileZillaなど他のFTPクライアントで最初から上書き転送し直してください。
FTPクライアントに関係なく、サーバやネットワークが不安定な場合も上記のようにファイル転送が失敗することがあります。よく確認し、失敗している場合は再送してください。- エレメント類のバージョン確認
▲「エレメント管理」から、それぞれのバージョンを確認します。
▲後から追加したスニペットなど、バージョンが記載されていないときはコードを確認してみてください。
▲バージョンが記載されています。
▲アップデート完了後、プラグインのバージョンが上がっていることが分かります。
アップデート前にバージョンを確認しておけば、アップデート作業「インストールオプションの選択」で新しいバージョンをインストールするかどうか判断できます。
以前に公開されてから開発が止まったスニペットなどは、本体のバージョンをあげると動作が不安定になる事もあるので、「フォーラムにてご報告いただき対応バージョンが出るのを待つ」、「他の代替方法にかえる」、もしくは「modx本体のバージョンを戻す」など、いずれかの手段をお願いします。
応用
managerディレクトリは構成がほぼ固定されている
managerディレクトリは、独自の改造を施す場合を除き、運用を通じてディレクトリ内のファイルを更新したり追加したりすることが基本的にありません。config.inc.phpのみがインストール時に更新されますので、これだけバックアップをとっておけばよいということになります。
すっきりアップデートしたい場合は、managerディレクトリをいったん削除してから新しいmanagerフォルダを転送すると、バージョンが新しくなるごとに不要ファイルが増えていくということがありません。
アップデート後の検証を正確に行なうには
アップデート前にサイト全体をエクスポートし、htmlファイルとして確保しておきます。アップデート後に再びエクスポートを行ない、その差分を調べます。WinMergeなどのツールを使えば、効率よく検証できます。ツールを利用して見比べることで、数千ページ規模のサイトでも、1文字の違いもない正確なアップデートが可能です。こういうことができるCMSはMODX以外にはほとんどないと思いますので、ぜひお試しください。