rcloneを使ってDjangoのデータベースをGoogle Driveに自動バックアップする

技術備忘録

Djangoアプリケーションを運用するにあたり、データベースのバックアップを自動化したいと考え、rcloneというクラウドストレージにアクセスできるシステムを使いました。

サーバはEC2でOSはAmazon Linuxです。


スポンサーリンク

rcloneの設定

インストール

Install

$ curl https://rclone.org/install.sh | sudo bash

Google Driveとの連携

rclone configで設定を開始する

$ rclone config

n) New remote
s) Set configuration password
q) Quit config
n/s/q> n # 新規作成のため 'n' 

name> gdrive # 名前を作成する

クラウドストレージの種類を選択

Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
...
13 / Google Drive
   \ "drive"
...
Storage> 13 # Google Driveと書いてある番号を選択する

Google API consoleで取得したclient_id, client_secretを入力

Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
client_id> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  # client_idを入れる

OAuth Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  # client_secretを入れる

アクセス権限を設定

Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
...
scope> 1 # 書き込みができるように権限を設定

以下の設定はスルー

ID of the root folder
Leave blank normally.

Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.

Enter a string value. Press Enter for the default ("").
root_folder_id>

Service Account Credentials JSON file path 
Leave blank normally.
Needed only if you want use SA instead of interactive login.

Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.

Enter a string value. Press Enter for the default ("").
service_account_file>

URLが表示されるのでブラウザでアクセスし、発行されるコードを入力する

Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n> n
Please go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=xxxxxxxxxxxxxxxxxxxx&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=xxxxxxxxxxxxxxxxxxxxxx
Log in and authorize rclone for access
Enter verification code> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Configure this as a team drive?
y) Yes
n) No (default)
y/n>n

--------------------
# 設定した内容が表示される

--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y # 問題なければ 'y'

サーバ上のファイルをGoogle Driveにアップロード

$ rclone copy django.db gdrive:/backup # Google Drive上のbackupというフォルダにコピーされる

※注意

実行ユーザが異なるとrclone copyは実行できません。cronで呼び出すときはユーザを指定する必要があります。

$ sudo copy django.db gdrive:/backup
2021/01/30 14:13:34 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
2021/01/30 14:13:34 Failed to create file system for "gdrive:/backup": didn't find section in config file

スポンサーリンク

Djangoのデータベースの自動バックアップ

自動バックアップシェルスクリプト

#!/bin/bash
cd /home/ec2-user/backup
# バックアップファイル名を時刻から生成
filename=`date "+backup_%Y-%m-%d_%H_%M_%S.json"`
# manage.pyのdumpdataでバックアップファイルを作成
python3 {path_to_django_backend}/manage.py dumpdata > $filename

# 実行ユーザを切り替えてGoogle Driveにアップロード
sudo -u ec2-user rclone copy $filename gdrive:/backup
# バックアップファイルの削除
rm $filename
$ sudo chmod 755 backup_to_gdrive.sh
$ ./backup_to_gdrive.sh

バックアップファイルを使って復元したいとき

$ sudo python3 manage.py loaddata path_to_backup_file

コメント

タイトルとURLをコピーしました