EVO CMSのバックアップ

今回はバックアップに挑戦します。
やりたい事は次の通り。
- 画像ディレクトリのバックアップ
- ファイルディレクトリのバックアップ
- データベースのバックアップ
- 任意のタイミングでバックアップ
- ログアウト時に自動でバックアップ
早速バックアップ用のスニペットを作ります。
スニペット名「Backup」
データベース名などは自分のもので設定します。
<?php
if($modx->checkSession()){
//保存するファイル名はスナップショットに合わせる
$today = date('Y-m-d_h-i-s',$_SERVER['REQUEST_TIME']);
$zipFileSavePath = $modx->config['base_path']."assets/backup/";
//参考:mysqldump, http://www.tailtension.com/php/1494/
$dbHost = $modx->db->config['host'];
$dbUser = $modx->db->config['user'];
$dbPass = $modx->db->config['pass'];
$dbName = 'データベース名'; //$modx->db->config['dbase']を使うと「`データベース名`」になるため
$fileName = $zipFileSavePath.$today.'.sql';
$command = "/usr/bin/mysqldump ".$dbName." --host=".$dbHost." --user=".$dbUser." --password=".$dbPass." > ".$fileName;
system($command);
// 圧縮対象フォルダ
$compressDirs['images'] = $modx->config['base_path']."assets/images";
$compressDirs['files'] = $modx->config['base_path']."assets/files";
// zipファイル保存先(backupディレクトリのパス)
// コマンド
// cd:ディレクトリの移動
// zip:zipファイルの作成
foreach($compressDirs as $key => $value){
$compressFile = $zipFileSavePath ."{$today}-{$key}.zip";
$command = "cd ". $value .";".
"zip -r ". $compressFile." .";
//コマンドの実行
exec($command);
}
}
ログアウト時にバックアップ
プラグインを作成。OnBeforeManagerLogoutにチェックを入れます。
//システムイベント OnBeforeManagerLogout
if($modx->event->name == 'OnBeforeManagerLogout'){
$modx->runSnippet('Backup');
}
これでログアウト時に毎回バックアップされます。
任意のタイミングでバックアップ
QuickManagerにバックアップボタンを追加して、任意のタイミンでバックアップできるようにします。
Quick Manager+の設定から「Custom buttons」の項目を編集します。
//'ボタンのタイトル','タイプ','リンク先','','','アイコン'
'バックアップ','link','[~[*id*]~]?backup=1','','','database'
getパラメータのbackupが1にときにバックアップをするようにします。
先ほど作成したプラグインのシステムイベントにOnWebPagePrerenderを追加します。
if($modx->event->name == 'OnBeforeManagerLogout'){
$modx->runSnippet('Backup');
}elseif($modx->event->name == 'OnWebPagePrerender' && $_GET['backup'] === '1'){
$modx->runSnippet('Backup');
$url = $modx->makeUrl($modx->documentIdentifier);
$modx->sendRedirect($url);
}
これで任意のタイミングでバックアップができるようになりました。
もしダウンロードする場合はFTPソフトとか使えばどうでしょうか。
$modx->sendmailでメールに送っても良さそうですね。
今後の課題
ツールからスナップショットでファイルの存在が確認できますが、バージョンやデータベース名は載りません。(リストアできることは確認しました。)
関連記事
2019年02月01日 / CMS