Backblaze ile kolayca WordPress web sitesi yedek alma işlemi

backblaze nedir

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.

backblaze azure google fiyatlar

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.

Backblaze b2 bucket ayarları

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:

Backblaze otomatik yedekleme giriş

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:

b2 bucket oluşturma
create-bucket komutu ile yedeklerimizi alacağımız klasör olarak bir bucket oluşturuyoruz.

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
Backblaze B2 otomatik yedekleme işlemi
b2 sync komutu ile otomatik yedekleme işlemini başlatıyoruz.

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.

mysqldump ile veritabanı yedekleme
mysqldump komutu ile aldığımız yedekleri ls -lah ile listeleyerek görebiliriz.

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:

Backblaze b2 ile veritabanı yedekleme
Veritabanı SQL Dump çıktılarımızı da aynı şekilde B2’ye yedekleyebiliyoruz.

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):

Crontab ile Cronjob ayarları
Cronjob zamanlamış görevlerin ayarları yukarıdaki gibi olmalı

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:

B2 dosya listesi
Backblaze dosyalarını Browse 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”

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir