Linux Web Sunucusunu Dropbox’a Nasıl Yedeklerim ?

Merhaba

Özellikle benim gibi VPS sunucusu üzerinde blog vb hizmetler veren kişiler için minimum maliyetli Backup Plan’ı son derece önemlidir.

Bu ihtiyacı gidermek adına yaptığım araştırmalarda en ilkel ve maliyetsiz yöntem olarak, web dizininin ve veri tabanı dump’ının sıkıştırılıp mail atıldığını gördüm. Benim gibi sadece veri tabanı dump’ı 74 MB olan birisi için bu yöntem maalesef işe yaramayacaktır. 

Dropbox

Dropbox servisi, fotoğraf video vb kişisel verilerinizi çok rahat saklayabildiğiniz bir servisi. Pro planının aylık 10$ olduğunu düşündüğümüzde de, son derece uygun bir fiyat karşılığında 1 TB alan sahibi olunabilmektedir. Bizim için en önemli özelliği ise Dropbox hesabınızı yönetebileceğiniz API servisi veriyor olmasıdır ki bu özelliğini birazdan kullanıyor olacağız.

Backup Plan

Teknik çalışmalara girmeden önce aşağıdaki soruya net cevap verilmesi son derece önemlidir

Sunucu üzerindeki hangi verilerin, ne sıklık ile yedeği alınmalıdır ?

Ben tüm domainlerin bulunduğu dizini ve full veri tabanı yedeğini, her haftanın pazar günü gece saat 00:00’da yedeklemeye karar vermiş bulunmaktayım.

Dropbox Hesabı ve API app oluşturulması

Öncelikle Dropbox hesabı alınmalıdır. Ardından API kullanımı için bir “application” oluşturulması gerekmektedir.

https://www.dropbox.com/developers/apps/create

Adresini ziyaret ederek lütfen “Dropbox API app” oluşturunuz. Bu işlem sırasında “My app only needs access to files it creates.” seçeneğini işaretlemeyi unutmayınız. İşlem sonunda sizi oluşturduğunuz application sayfasına yönlendirecektir ve burada “App key” ve “App secret” isminde iki adet key göreceksiniz. Bu iki bilgiyi kenara not ettikten sonra Dropbox ile işiniz -şimdilik- bitmiş olacaktır.

Dropbox Uploader Uygulaması

Dosyaların sunucudan Dropbox’a aktarılması gerekmektedir. Bu hususta kullanabileceğimiz en güzel, basit ve açık kaynaklı Dropbox Uploader betiğidir. Bash script ile yazılmış ve curl uygulamasından başka herhangi bir aracın kurulmasına ihtiyaç duymayan bu betik, Dropbox API’lerini kullanarak dosya yükleme, silme veya bilgi alma işlemlerini gerçekleştirebilmektedir.

# Öncelikle curl'u indirmeniz gerekebilir.
curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

Ardından aşağıdaki iki komutu vererek Dropbox Uploader’ı çalıştırıp, bir önceki adımda oluşturduğunuz API Key’lerinizi girebilirsiniz.

chmod +x dropbox_uploader.sh
./dropbox_uploader.sh

Böyle karşınıza kurulum adımları çıkacaktır ve sizden API Key bilgilerinizi isteyecektir. Bu bilgiler daha sonra kullanılmak üzere homefolder altında .dropbox klasöründe saklanıyor olacaktır.

Backup Script

Aşağıdaki betik kurulumu gerçekleştirilen dropbox uploader uygulamasını kullanarak yedekleme işlemini gerçekleştirmektedir.

#!/bin/bash
BACKUP_SRC="/var/www/html"
BACKUP_DST="/tmp"
MYSQL_SERVER="127.0.0.1"
MYSQL_USER="root"
MYSQL_PASS="cokgizlisifre"
 
# Stop editing here.
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tar.gz"
#DESTFILE="$BACKUP_DST/$VPS_ID.$NOW.tgz
 
# Backup files.
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --all-databases > "$NOW-Databases.sql"
tar cfz "$DESTFILE" $BACKUP_SRC "$NOW-Databases.sql"
 
#upload to dropbox. make sure the following line points to the correct dropbox_uploader.sh location
/root/dropbox_uploader.sh upload "$DESTFILE" "$NOW.tar.gz" 

# Rotate backupfiles. Keep last 4 backup.
for file in $(./dropbox_uploader.sh list|grep "[F]"|awk {'print $3'}|sort -r|tail -n +5)
do 
	/root/dropbox_uploader.sh delete  $file
done
 
#remove temporary files
rm -f "$NOW-Databases.sql" "$DESTFILE"

Bu script temel olarak aşağıdaki adımları uygulamaktadır.

  1. Veri tabanındaki tüm verileri dump et.
  2. Belirlenen dizinde ki her şeyi ve  veri tabanı dump dosyasını sıkıştır.
  3. Sıkıştırılmış dosyanın ismine bugünün tarihini ata.
  4. Dosyayı dropbox’a upload et.
  5. Dropbox’ta ki dosyaları ismine göre sırala ve yüklenen son 4 dosya haricinde kalan dosyaları sil.
  6. Yerel dizinde oluşturulan yedek dosyasını sil.

Bu scripti /root/backup.sh olarak kayıt ettiğinizi düşünürsek aşağıdaki crontab girdisi bu betiğin her haftanın pazar günü çalıştırılarak yedekleme işlemi gerçekleştirilecektir.

0 5 * * 1 /root/backup.sh