4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ファーストサーバAdvent Calendar 2016

Day 11

dropbox にファイル転送してみる

Posted at

#ごあいさつ
はじめましてyktdと申します。
のっぴきならない事情により記事を記載する事になりました。
あまりネタも無いのですが、過去にZenlogicで検証した事を記載したいと思います。
拙い説明になると思いますが、ご容赦を...

#お題
バックアップの取得についてはcronを利用して定期的に取得する事が可能ですが、
今回のお題は『外部ストレージへファイル転送』とさせていただきます。
取得したバックアップデータを外部ストレージに転送し保全するのが目的ですね。

#外部ストレージ
今回は dropbox を利用してファイルの転送を試みます。
何故 dropbox なのか?と言われるとAPI等が既に準備されているため、「これなら行けるんちゃう?」と思ったからです。(既に参考になるサイトも沢山あったし...)

#注意事項
動作検証を行ってたのが2016年2月頃で、確認してみたら APIv2 になってました><
またAPIv2になっていることでPHPのAPIが無くなってましたが、まぁ...気にしないで進めることにします。

#準備

  1. dropboxで新規アカウントを作成します。[https://www.dropbox.com/ja]
  2. 諸々初期設定を終わらせ、アドレスバーから [https://www.dropbox.com/deveropers] を入力し、開発者ページを開きます。
  3. 左側メニューの下の方に[API v1]がありますので、[API v1]をクリックします。
  4. 左側メニューの[API v1 (Core API)]をクリックします。
  5. 各種APIが表示されますので、[PHP] 行の [Install SDK] をクリックします。
  6. 開かれたページの中から[Download PHP SDK] をクリックし、APIを任意の場所にダウンロードします。
  7. ダウンロードしたファイルを解凍し、フォルダ名を「dropbox」にリネームしちゃいます。

#dropbox側の設定

  1. 開発者ページ [https://www.dropbox.com/deveropers] を開き、左側メニューの[My apps]をクリック。
  2. [My apps]画面が表示されるので、[Create app]をクリックします。
    3. [Create a new app on the Dropbox platform]画面が表示される事を確認します。
    4. [Choose an API] に [Dropbox API]を選択。
    5. [Choose the type of access you need] に [App folder]を選択。
    6. [Name your app] に任意の名前を設定します。※他のユーザーで使用されている名称は利用できません。ユニークな名称で設定して下さい。
    7. [Create app]ボタンをクリックします。
  3. 作成したアプリ情報が表示されることを確認します。
  4. 「OAuth2」項目にある[Generated access token] にある[Generate]ボタンをクリックします ※[App key], [App secret], [token]情報は第三者に知られないように知られないようにして下さい。
  5. dropbox側([https://www.dropbox.com/] )に戻り、新しく「アプリ」フォルダが作成されていることを確認します。
  6. 「アプリ」を開き、先ほど作成したアプリが存在していることを確認します。

#APIと転送スクリプトのアップロード

  1. 「準備」で取得していたAPI(解凍、リネーム済みの物)をサーバーの[/cgi-data/Backup]にフォルダごとアップロードします。 ※ ここではcgi-data/Backupにアップロードするものとして説明します。
  2. アップロードスクリプト(samplescriptは以下)を準備し、[/cgi-data/Backup]にアップロードし、パーミッションを[755]とします。
autoupload.php
<?php
require_once('dropbox/lib/Dropbox/autoload.php');

$dropbox = new \Dropbox\Client('アクセストークン',Backup);

// アップロードファイルの指定
$fpath = "/virtual/cgi-data/Backup";
$fname = "/".date('Ymd').".zip";
$fpn = $fpath.$fname;

// アップロードの実施
$fp = fopen("$fpn", 'rb');
$res = $dropbox->uploadFile("$fname", \Dropbox\WriteMode::add(), $fp);

fclose($fp);
var_dump($res);
?>

※アクセストークンは先のアプリ作成時に[generate access token]で生成したコードになります。

#バックアップ及び転送スクリプト
ざっくりバックアップするスクリプト
バックアップ処理の後にdropbox にアップロードしてます。
バックアップ取得対象として[/virtual/htdocs/default]としてます。環境に応じて変更する必要がありますね。

SchdBackup.sh
#!/bin/bash
# 基本変数
TIMESTAMP=`date +%Y%m%d`
WORKDIR=/virtual/cgi-data
TARGETDIR=/virtual/htdocs/default/
BKDIR=$WORKDIR/Backup/$TIMESTAMP
LOGDIR=$WORKDIR/logs/Backup
LOG=$LOGDIR/`basename $0 .sh`-$TIMESTAMP.log


# 環境に合わせて入力
DBNAME="データベース名"
DBPW="データベース パスワード"
ARCPW="圧縮時パスワード"

#----------------------#
# バックアップ処理開始
#----------------------#
mkdir -p $BKDIR
mkdir -p $LOGDIR 
echo "`date +%Y/%m/%d-%H:%M` --- `basename $0 .sh` の処理を開始します" >$LOG
cd $WORKDIR/Backup

# アーカイブ化
echo "`date +%Y/%m/%d-%H:%M` --- Webコンテンツのアーカイブを開始します" >>$LOG
tar cvf $BKDIR/webcontents.tar -C $TARGETDIR ./ >>$LOG

# DBエクスポート
echo "`date +%Y/%m/%d-%H:%M` --- MySQL のエクスポートを開始します" >>$LOG
mysqldump -u root -p$DBPW $DBNAME >$BKDIR/$DBNAME.sql

# パスワード付きZIP化
echo "`date +%Y/%m/%d-%H:%M` ---圧縮処理を開始します">>$LOG
zip -r -P $ARCPW $TIMESTAMP.zip $TIMESTAMP >>$LOG 2>&1
rm -rf $BKDIR

echo "`date +%Y/%m/%d-%H:%M` --- Dropboxへのアップロードを開始します">>$LOG
php autoupload.php >>$LOG 2>&1

sleep 30

# 削除処理 
echo "ローカルのバックアップファイル削除処理を開始します" >>$LOG
rm -rf $BKDIR.zip

echo "処理が完了しました">>$LOG

#cron設定
zenlogic のカスタマーポータルにログインしてcron設定を行います。
cron 実行時間は更新が行われていない深夜帯がよいかと考えられます。

因みにバックアップ取得時にI/Oが発生していると取得したデータが破損する可能性もありますので、
その辺りはうまいことやってください。

#最後に
期限に間に合わず...結構 駆け足で手順のみ記載したので、分かりにくい表記等があるかもしれません。
※ついでにコードミスもあるかも...汗

でも、基本的な考え方としては利用できるはずなので、興味があれば是非お試しください。
あ、ローカルバックアップの処理の中で「世代管理」や「バックアップ失敗時メール送信」等の処理を行う事もできます。
今回は単純処理としていますので、このままで利用するとバックアップデータで容量が枯渇する可能性があるので、ご注意くださいませ。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?