Backblaze nedir, nasıl kullanılır ? Backblaze özellikle B2 hizmeti ile dikkat çeken kullanımlı kolay, belli bir kotaya kadar ücretsiz, sonrasında ise ucuz bir yedekleme ve CDN hizmet sağlayıcısıdır. WordPress de dahil olmak üzere tüm web sitelerinizi ve sunucularınızı Backblaze ile otomatik olarak yedekleyebilir ve bu yedekleri güvenle saklayabilirsiniz. Backblaze’in kişisel bilgisayarda kullanıma yönelik Personal Backup ve sunucular ile CDN benzeri kullanıma yönelik B2 Cloud Storage olmak üzere iki temel hizmeti var. Biz bu yazımızda sunucu yedekleme için komut satırı api araçları da sağladığı için B2 servisini inceleyeceğiz. WordPress ve sunucu yedekleme için ben de sitemde bu yöntemi kullanıyorum.
B2 isminin de andırdığı gibi doğrudan Amazon S3 gibi CDN, cloud depolama servislerine alternatif olarak düşünülmüş. Aynı şekilde Microsoft Azure ve Google Cloud depolama hizmetlerine de daha ucuz ve kısmi ücretsiz bir alternatiftir. B2’nin sitesindeki fiyat tablosu sizlere fikir verecektir:
B2 depolama hizmetinde GB başı ücret 1 cent’i bile geçmiyor. Bildiğim kadarıyla kurumsal olarak en uygun depolama hizmetini bu fiyatla Backblaze veriyor. B2’yi aynı zamanda Cloudflare arkasına koyarak band ücretinden de tasarruf edecek şekilde CDN olarak da kullanmak mümkün fakat ona başka bir incelememizde bakalım 🙂 .
Lafı uzatmadan yedekleme işlemine geçelim. Backblaze panelinden tek yapmamız gereken api anahtarı almak, geri kalan her şeyi sunucu tarafında scriptler ve cronjoblar ile halledebiliyoruz.
Backblaze’in Buckets sayfasından Show Account ID and Application Key diyerek master api anahtarımızı oluşturuyor ve alıp güvenli bir yere kaydediyoruz. Create Bucket diyerek yeni sepet oluşturmamıza gerek yok bunu sunucu tarafında yapabiliyoruz.
Artık panelde işimiz yok. Sadece bu api anahtarıyla tüm sunucularımızın otomatik yedekleme işlemini yapabiliriz.
Ardından kurulum detaylarının Get the Command-Line Tool sayfasında paylaşıldığı B2 komut satırı araçlarını sunucumuza yüklüyoruz. Tek satırlık komutla bu işlem de tamamlanıyor.
pip install --upgrade b2
pip komutu hatası alırsanız sunucuda python-pip yüklü değil demektir. Ubuntu için bunu apt-get install python-pip
ile kurabilirsiniz. Sunucunuz CentOS ise yum install python-pip
aynı işi yapacaktır.
Kurulum tamamlandıktan sonra b2
komutunu çalıştırarak kullanım dökümantasyonunu görüntüleyebiliriz:
root@bulutdc:~# b2
This program provides command-line access to the B2 service.
Usages:
b2 authorize-account [<accountIdOrKeyId>] [<applicationKey>] b2 cancel-all-unfinished-large-files <bucketName> b2 cancel-large-file <fileId> b2 clear-account b2 create-bucket [--bucketInfo <json>] [--corsRules <json>] [--lifecycleRules <json>] <bucketName> [allPublic | allPrivate] b2 create-key [--duration <validDurationSeconds>] [--bucket <bucketName>] [--namePrefix <namePrefix>] <keyName> <capabilities> b2 delete-bucket <bucketName> b2 delete-file-version [<fileName>] <fileId> b2 delete-key <applicationKeyId> b2 download-file-by-id [--noProgress] <fileId> <localFileName> b2 download-file-by-name [--noProgress] <bucketName> <fileName> <localFileName> b2 get-account-info b2 get-bucket [--showSize] <bucketName> b2 get-download-auth [--prefix <fileNamePrefix>] [--duration <durationInSeconds>] <bucketName> b2 get-download-url-with-auth [--duration <durationInSeconds>] <bucketName> <fileName> b2 get-file-info <fileId> b2 help [commandName] b2 hide-file <bucketName> <fileName> b2 list-buckets b2 list-file-names <bucketName> [<startFileName>] [<maxToShow>] b2 list-file-versions <bucketName> [<startFileName>] [<startFileId>] [<maxToShow>] b2 list-keys b2 list-parts <largeFileId> b2 list-unfinished-large-files <bucketName> b2 ls [--long] [--versions] [--recursive] <bucketName> [<folderName>] b2 make-url <fileId> b2 sync [--delete] [--keepDays N] [--skipNewer] [--replaceNewer] \ [--compareVersions <option>] [--compareThreshold N] \ [--threads N] [--noProgress] [--dryRun ] [--allowEmptySource ] \ [--excludeRegex <regex> [--includeRegex <regex>]] \ [--excludeDirRegex <regex>] \ <source> <destination> b2 update-bucket [--bucketInfo <json>] [--corsRules <json>] [--lifecycleRules <json>] <bucketName> [allPublic | allPrivate] b2 upload-file [--sha1 <sha1sum>] [--contentType <contentType>] \ [--info <key>=<value>]* [--minPartSize N] \ [--noProgress] [--threads N] <bucketName> <localFilePath> <b2FileName> b2 version
The environment variable B2_ACCOUNT_INFO specifies the sqlite
file to use for caching authentication information.
The default file to use is: ~/.b2_account_info
For more details on one command: b2 help
When authorizing with application keys, this tool requires that the key
have the 'listBuckets' capability so that it can take the bucket names
you provide on the command line and translate them into bucket IDs for the
B2 Storage service. Each different command may required additional
capabilities. You can find the details for each command in the help for
that command.
Öncelikle b2 authorize-account accountid apikey
komutu ile giriş yapıyoruz:
Hata almadıysak, yedeklerimizi alacağımız bucket’ı oluşturuyoruz. b2 create-bucket BUCKETADI allPrivate
komutu ile bu işlemi gerçekleştiriyoruz. Bucket’ı yedeklerimiz için B2 tarafındaki klasör gibi düşünebiliriz. allPrivate
ise bunun dışarıdan erişime kapalı olmasını sağlıyor. Eğer CDN benzeri kullanım için bucket oluştursaydık allPublic diyerek bucket’ı herkesin okumasına açık hale getirebilirdik:
Bucket’ı oluşturduktan sonra sırada tahmin edebileceğiz gibi yedekleme işlemini başlatmak kalıyor. Bunun için tek satırlık b2 sync
komutunu kullanıyoruz.
b2 sync /var/www b2://BUCKETADI
Bu işlemle birlikte dosyalarımız b2 tarafına gönderilmiş oluyor. Yeni dosya eklendiğinde ise sadece bu dosyalar gönderilecek böylece full yedekleme işlemlerinde karşımıza çıkan gereksiz bant kullanımından da kurtulmuş olacağız. Ayrıca B2 dosyalarımızın eski sürümlerini de kaydediyor. Bu ektra depolama maliyeti anlamına gelse de olası bir saldırı durumunda her dosyamızın her sürümünün yedeklenmiş olmasını sağlıyor.
Eğer bu özelliği sınırlamak istersek:
b2 sync --keepDays 30 kaynak b2://hedef
komutu kullanabiliriz. 30 günden eski dosya sürümleri böylece silecektir.
Tabi bu işlemin sürekli tekrarlanması gerekiyor. Bunun için crontab -e
komutu ile cronjob listesinin sonuna bu komutu günde bir defa çalışacak şekilde ekliyoruz.
For more information see the manual pages of crontab(5) and cron(8) m h dom mon dow command 43 6 * * * certbot renew --post-hook "service nginx restart" 0 0 * * * b2 sync /var/www/ b2://backup-blt01
Böylece her gece 00:00’da yedekleme işlemi gerçekleşecek. Dosya yedekleri dışında WordPress sitemiz ve diğer web siteleri için veritabanı yedeği de almamız gerekiyor. Bunun için B2 ile beraber mysqldump komutunu da kullanacağız. Öncelikle sql yedeklerinin sunucuda saklanacağı bir klasör oluşturalım. Ben root kullanıcısı ile çalıştığım için /root/sqlyedek dizinini uygun gördüm. Bunun için mkdir /root/sqlyedek
komutunu çalıştırıyoruz. Ardından tüm veri tabanları için mysql yedek alma işlemi için şu komutu kullanınıyoruz:
mysqldump -uMYSQLKULLANICI -pMYSQLSIFRESI --all-databases > /root/sqlyedek/sqlyedek_`date +%Y-%m-%d--%H-%M-%S`.sql
-u ve -p parametrelerinden sonra boşluk olmamasına dikkat edin. Ardından ls -lah /root/sqlyedek
komutu ile klasörüne baktığımızda yedeklerimizin burada olduğunu görüyoruz.
Tabi bu klasörüde aynı web yedekleme için www klasörüne yaptığımız için b2 tarafında yedeklemiz gerekiyor. Bunun için b2 create-bucket
ile yeni bucket oluşturup sync
komutu ile yedekleme işlemini gerçekleştiriyoruz:
Tabi bu işlemleri de crontab -e
ile her gün tekrar ettirerek yedekleme işlemini otomatik hale getirmemiz gerekiyor. Dosya sonuna aşağıdaki satırı ekliyoruz.
1 0 * * * mysqldump -uMYSQLKULLANICI -pMYSQLSIFRESI --all-databases > /root/sqlyedek/sqlyedek_date +%Y-%m-%d--%H-%M-%S
.sql && /usr/local/bin/b2 sync /root/sqlyedek/ b2://backup-blt01sql
crontab -e şu şekilde görünmeli (certbot’u yok sayın):
Ardından CTRL+X ile dosyamızı kaydedip çıkıyoruz. Artık gece yarısında dosya, saat 01:00’da veritabanı yedeklerimiz otomatik olarak alınıp Backblaze B2’ye gönderiliyor. Bunları panelde browser files sayfasında görebiliriz:
Daha fazla detay için Backblaze dökümanlarına bakabilirsiniz:
https://www.backblaze.com/b2/docs/
örnek bir yedekleme bash scripti
Eğer veritabanı ve websitesi yedekleme için örnek bir bash scripti arıyorsanız alttaki bash scriptini referans alabilirsiniz:
nano /root/yedekle.sh
ile dosyamızı açıyoruz.
#/bin/bash echo `date +%Y-%m-%d--%H-%M-%S` backup start /usr/local/bin/b2 sync /var/www/ b2://backup-blt01 rm /root/sqlyedek/* /usr/bin/mysqldump -uroot -pSIFRENIZ kodto > /root/sqlyedek/kodto_`date +%Y-%m-%d--%H-%M-%S`.sql /usr/bin/mysqldump -uroot -pSIFRENIZ --all-databases > /root/sqlyedek/sqlyedek_`date +%Y-%m-%d--%H-%M-%S`.sql /usr/local/bin/b2 sync /root/sqlyedek/ b2://backup-blt01sql certbot renew --post-hook "service nginx restart" echo `date +%Y-%m-%d--%H-%M-%S` backup end
kaydetmek için CTRL+X
yapıp Y
ile çıkıyoruz.
Bu scripti crontab -e
ile zamanlanmış görev olarak atamak mantıklı olacaktır.
0 0 * * * /root/yedekle.sh >> /var/log/yedekle.log
One thought on “Backblaze ile kolayca WordPress web sitesi yedek alma işlemi”