ロリポップ!からケチケチバックアップする話


0.初めに

私は、非エンジニアのドシロウトです。しかも貧乏(汗)です。

元々、無料レンタルサーバーのXFREEで、とあるPHP製のオンラインメモの保管ツールで個人的なメモを保存し、テスト利用していました。

無料レンタルサーバー【XFREE(エックスフリー)】

自分専用のオンラインメモツールは、意外と便利だったので、本格的に使って行こうと考えました。

XFREEの無料版は容量が1GB、SSL非対応で少しレスポンスも遅いときがあり、 格安のレンタルサーバーを探しました。

探した結果、結局、有名なロリポップ!レンタルサーバーで一番安いエコノミープランを試すことにしました。

ご利用料金 - レンタルサーバーならロリポップ!

エコノミーでも初期費用が1500円かかりますが、月額は100円で格安です。

エコノミープランは、容量20GB、SSL対応、PHPも使えますが、バックアップをするオプションを入れると月300円追加で必要です。

バックアップ / 機能一覧 / サービス - レンタルサーバーならロリポップ!

貧乏な私は、Google Apps Script(GAS)を使って、なんとかバックアップできないか、試すことにしました。

1.試したこと

試したことをまとめると以下です。

  • ダウンロード用PHPツール

    ロリポップ!にあるメモ保存ディレクトリを丸ごとZIPにしてダウンロードするPHPツールの設置

  • 起動/保存用GASツール

    PHPツールをHTTPベースで起動し、ダウンロードしたZIPを、Google Driveに1世代保存するGASツールの作成、トリガー設定

2.ダウンロード用PHPツール

以下の記事の「PHPでzipコマンドを使ってディレクトリを丸ごと圧縮する」のPHPプログラムを丸パクリしています。

PHPでディレクトリを丸ごとZIP圧縮する方法の速度比較

ZIPを一時保存するディレクトリを新たにロリポップ!に作ったのと以下のPHPプログラムを設置しただけです。

注)getZipのパラメタは、フルパスでの指定が必要ですが、ロリポップ!の管理画面の「ユーザー設定>アカウント情報」で分かります。

down.php
<?php
ini_set('display_errors', "On");
//$dir 取得したいフォルダパス
//$zipFileSavePath 一時、zipを保存しておくフォルダパス
function getZip($dir,$zipFileSavePath){

 // zipファイル名
    $fileName = "zipFile".time();
// 圧縮対象フォルダ
    $compressDir = $dir;

// コマンド
// cd:ディレクトリの移動
// zip:zipファイルの作成
    $command =  "cd ". $compressDir .";".
        "zip -r ". $zipFileSavePath . $fileName .".zip .";

// Linuxコマンドの実行
    exec($command);

// 圧縮したファイルをダウンロードさせる。
    header('Pragma: public');
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=".$fileName.".zip");
    readfile($zipFileSavePath.$fileName.".zip");

//    消す
    unlink($zipFileSavePath.$fileName.".zip");
}

getZip('/home/users/1/aaaa.jp-bbbbb/web/(保存ディレクトリ)','/home/users/1/aaaa.jp-bbbbb/web/(ZIP一時ディレクトリ)');

?> 

3.起動/保存用GASツール

以下の記事を参考にGASを作成しました。

GASを使ってGoogle Drive内にあるファイルのダウンロードURLからコンテンツを取得したい - Qiita

gasのプログラムが以下でこれを1日1回実行するようにトリガー設定しています。

zipdown.gs
function myFunction() {

    // バックアップファイル名 ※lolipop-down.zipを使ってます
    var svrfilenamearray = [ "lolipop-down.zip",
                             "lolipop-downtest.zip" ];

    // ドライブのファイル名取得        
    var filesdel = DriveApp.getFiles();


    // ファイルがあるだけ繰り返す
    while (filesdel.hasNext()) {
      var filed = filesdel.next();
      // バックアップファイル名かチェック
      for(var i = 0; i < svrfilenamearray.length; i++) {
        if (filed.getName() == svrfilenamearray[i]) { 
          // 古いバックアップファイル削除処理
          filed.setTrashed(true);
          Logger.log(filed.getName()+" バックアップファイル削除終了");
        };
      };
    };


  // ロリポップ!のダウンロード用PHPツールのURLを発行して受信
  var blob = UrlFetchApp.fetch('https://(ロリポップ!のサイト)/down.php', {muteHttpExceptions: true}).getBlob();
  // Google Driveに保存
  DriveApp.createFile(blob.setName('lolipop-down.zip'));
}

4.終わりに

貧乏でなければ、普通にバックアップオプションを使った方が良いと思います。

牛丼一杯の値段ですので…

以 上