a-blog cms のデータを簡単にサーバーから引っ越しするためのツールを作ってみた

これは a-blog cms Advent Calendar 2021 の 16日目の記事です。


a-blog cms で作られたサイトを引っ越しを依頼されたり、アップデートするのにテスト環境を作るのも引っ越しと言えるでしょう。そんな時に SSH が使えない、phpMyAdmin も使えないそんな経験もあったりします。

これまでインストールを簡単にするための「簡単セットアップsetup.php や、バージョンアップを簡単にするための「簡単アップデートupdate.php などを作ってきていますが、今回は簡単にバックアップをするための a-backup.php を作ってみました。

バックアップする対象

  • archives
  • archives_rev
  • media
  • private/config.system.yaml
  • sql/databaseName_yyyymmddhhmmss.sql
  • storage
  • themes/blog2020

ファイルとしては CMS からアップロードしたファイルが保存されている archives / archives_rev / media / storage と、config.system.yaml と利用しているテーマディレクトリの一式と、MySQL のエクスポートデータを SQL文のテキストで書き出したものが今回のバックアップの対象となります。

テーマが継承されている場合には、子テーマも対象となります。

用意したプログラム

GitHub Gist の kazumich のアカウントで公開している 300行程度の PHP のファイルになります。リンク先にアクセスして Download してください。

https://gist.github.com/kazumich/0c5ce6ed4e8366628842541ee9101b56

利用方法

ブラウザからファイルをダウンロードする設定と、サーバー上にファイルを作る設定の2つの利用方法を用意しました。サイト規模が小さければブラウザからファイルを落とせるかもしれないですが、長く運用されているようなサイトだとブラウザからのダウンロードできないこともあります。

ブラウザから対象ファイルをダウンロードする

一番簡単な方法としてファイルを config.server.php と同じ場所にアップロードして、ブラウザでアクセスするとデータベースのパスワードを聞かれる画面が表示されます。それで簡単に表示されているファイルなどがダウンロードできます。

対象ファイルを圧縮(ZIP)しサーバー内に保存する

ブラウザからダウンロードできなかった時や cron で定期的にバックアップを作りたい時などに利用します。1ファイルになりますので、FTPソフトなどでダウンロードするのも容易になります。

設定

1) 実行方法の設定

# pc  : ブラウザからPCに Zipファイルがダウンロードされます。
# server : サーバー上に Zipファイルを保存します。 5) を設定してください。

$zip_download = "pc"; # pc / server

2) パスワードチェック

# on  : ブラウザ上からパスワードを入力し実行します。(推奨)
# off : cron など画面表示させたくない時に設定ください。

$password_check = "on"; # on / off

3) バックアップテーマの設定

# テーマファイルをバックアップする際には指定してください。
# "site2020" と設定すると site2020 , lp@site2020 , sp@site2020 がバックアップされます。
# "site2020|blog2020" のように複数指定も可能です。

$useThemes = "blog2020";

4) コマンド パスの設定

$mysqldump = "mysqldump";
$mysql = "/usr/bin/mysql";

# MAMP の場合
# $mysqldump = "/Applications/MAMP/Library/bin/mysqldump";
# $mysql ="/Applications/MAMP/Library/bin/mysql";
# 記述の変更が必要なサーバーなどの情報があれば @kazumich に教えてください。

5) バックアップディレクトリの設定

# 1) で server を指定した際に設定してください。
# また、バックアップを保存するディレクトリは public_html , www より上の階層に作成してください。

#$backupDir = "/home/server_name/domain_name/backup";

6) 実行ディレクトリの設定

# ブラウザからの実行の際には設定の必要はありません。 
# cron から実行する際に設定してください。

#$target_dir = "/home/server_name/domain_name/public_html";

今後の改善したい点

a-blog cms のバージョンを出力できるように

そのバックアップデータが、どの a-blog cms のバージョンで動いていたものかを分かるようにしたい。

storage が違う階層にあっても動作するように

storage は違う階層に置くことでファイルへの直接アクセスできないような設定にすることが推奨だと思うが対応ができてない。

部分ダウンロードできるように

今は、画面上にリストのマーカーがついているが、チェックボックスにして必要無いものを外すことができるようにしたい。そうすることでファイルサイズを減らすこともできる。

テーマの指定を実際の設定されているものを自動で設定したい

どのテーマを使っているか分かっている自分の案件なら分かるが、頼まれて対応するような時にデータベースを調べればテーマディレクトリは分かるハズなので自動抽出してくれると、さらに便利だと思う。

追加インストールしているプログラムも対応に

以下のディレクトリも忘れて移行すると、大問題になる可能性があるので、対象に含めるようにしたい。

  • extension
  • php/AAPP
  • php/ACMS/User

最後に

毎回、苦労して用意していたものが簡単に一式入手ができるようになったので、随分省力化できたのではないかと思っています。標準で持っている バックアップ&リストア 機能というものもありますので、これが公式になる予定は今のところありません。

引越し用のツールですので、利用後はサーバーから削除するなどの対策をお願いします。データベースのパスワードが分かると全てのデータをダウンロードされてしまいますので注意ください。

明日の a-blog cms Advent Calendar 2021 17日目は、口田 聖子さんの「a-blog cmsで現在のエントリーを「関連エントリー」に登録しているエントリーを表示する」になります。まだ、タイトルが分かりませんので、後日アップデート予定です。


関連記事

この記事のハッシュタグ から関連する記事を表示しています。

エントリーコードから %{CUSTOM_USER_ID} を作るカスタムグローバル変数の作り方

a-blog cms Ver.3 がリリースされました!

a-blog cms で会員制コンテンツを作り、ログイン前はモザイク画像でチラ見せする実装を解説

a-blog cms Training Camp 2021 Autumn を開催しました

イベント用のモジュールの仕様を妄想してみた

PICKUP記事をお知らせ一覧の最初に出しておくための実装のポイントはソート順の設定

最新記事

アーカイブ

ハッシュタグ