Gönderi

Duplicati ile Güvenli Yedekleme: Açık Kaynak Zero-Trust Backup Çözümü

Duplicati ile Güvenli Yedekleme: Açık Kaynak Zero-Trust Backup Çözümü

Merhabalar,

Dijital çağda veri güvenliği ve yedekleme, hem bireysel kullanıcılar hem de kurumsal ortamlar için kritik bir konu haline gelmiştir. Bu yazımda, açık kaynak kodlu ve ücretsiz olan Duplicati yedekleme çözümünü detaylı olarak inceleyeceğim. Hem normal kullanıcılar hem de teknik mühendisler için anlaşılır bir dil kullanarak, bu güçlü aracın özelliklerini, kurulumunu ve yapılandırmasını ele alacağım.

Duplicati Nedir?

Duplicati, verilerinizi güvenli şekilde şifreleyerek bulut depolama servislerine ve uzak dosya sunucularına yedekleyen, ücretsiz ve açık kaynak kodlu bir yedekleme istemcisidir. MIT lisansı altında yayınlanan bu araç, Windows, macOS ve Linux platformlarında çalışır.

Ana Özellikleri:

Güvenlik Özellikleri İnfografiği

🔐 Güçlü Şifreleme

  • AES-256 şifreleme standardı ile tüm veriler yüklenmeden önce şifrelenir
  • GNU Privacy Guard (GPG) desteği
  • Zero-trust yaklaşımı: Verileriniz hiçbir zaman şifrelenmemiş halde bulut sunucularına gönderilmez

📊 Verimli Yedekleme

  • İnkremental yedekleme: İlk tam yedeklemeden sonra sadece değişen dosyalar yedeklenir
  • Deduplication: Aynı veriler tekrar depolanmaz, depolama alanı tasarrufu sağlar
  • Sıkıştırma: Veriler sıkıştırılarak depolama maliyeti azaltılır

Depolama Backends Görsel Galeri

☁️ Çoklu Bulut Desteği

  • Amazon S3, Google Drive, Dropbox, Microsoft OneDrive
  • Azure Blob Storage, Backblaze B2, Box
  • FTP, SFTP, WebDAV protokolleri
  • Yerel ağ (NAS) ve harici diskler

Duplicati’nin Avantajları

Yedekleme İş Akışı Diagramı

1. Güvenlik Odaklı Tasarım

1
2
3
4
5
# Şifreleme özellikleri
- AES-256 encryption
- Client-side encryption (istemci tarafında şifreleme)
- Secure password-based key derivation
- GPG encryption support

Önemli Güvenlik Özelliği: Duplicati, verilerinizi bilgisayarınızda şifreledikten sonra buluta gönderir. Bu sayede bulut sağlayıcısı bile verilerinizi okuyamaz.

2. Platform Bağımsızlığı

Windows Kurulumu

1
2
3
4
5
# Chocolatey ile kurulum
choco install duplicati

# Winget ile kurulum  
winget install Duplicati.Duplicati

macOS Kurulumu

1
2
3
4
5
# Homebrew ile kurulum
brew install --cask duplicati

# Manuel kurulum için .dmg dosyası indirme
curl -L https://updates.duplicati.com/beta/duplicati-latest.dmg -o duplicati.dmg

Linux Kurulumu

1
2
3
4
5
6
7
8
9
# Ubuntu/Debian için
wget https://updates.duplicati.com/beta/duplicati_2.0.7.1_all.deb
sudo dpkg -i duplicati_2.0.7.1_all.deb

# Fedora/CentOS için
sudo dnf install duplicati

# Arch Linux için
yay -S duplicati-latest

3. Esnek Yedekleme Seçenekleri

Dosya Filtreleme Örnekleri

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Sadece belirli dosya türlerini yedekleme
*.pdf
*.docx
*.xlsx
*.jpg
*.png

# Belirli klasörleri hariç tutma
-*/temp/*
-*/cache/*
-*/.git/*
-*/node_modules/*

# Düzenli ifadeler ile filtreleme
+.*\.log$
-.*\.tmp$

Duplicati Kurulumu ve İlk Konfigürasyon

1. Web Arayüzü Erişimi

Duplicati kurulduktan sonra, web tarayıcınızdan şu adrese gidin:

1
http://localhost:8200

2. İlk Yedekleme Oluşturma

Adım 1: Genel Ayarlar

1
2
3
4
Backup Name: "Evim Belgeler Yedek"
Description: "Kişisel belgelerin günlük yedeği"
Encryption: AES-256
Password: [Güçlü bir şifre belirleyin]

Adım 2: Hedef Seçimi

1
2
3
4
5
6
Storage Type: "Amazon S3"
Server: "s3.amazonaws.com"
Bucket Name: "benim-yedek-bucket"
Folder Path: "/duplicati-backups/"
Access Key ID: [AWS Access Key]
Secret Access Key: [AWS Secret Key]

Adım 3: Kaynak Dosyalar

1
2
3
4
5
6
7
8
9
10
# Yedeklenecek klasörler
/home/kullanici/Documents
/home/kullanici/Pictures
/home/kullanici/Projects

# Hariç tutulan dosyalar
*.tmp
*.cache
*/.git/
*/node_modules/

Gelişmiş Konfigürasyon

1. Komut Satırı Kullanımı

Yedekleme Oluşturma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Temel yedekleme komutu
duplicati-cli backup \
  --encryption-module=aes \
  --compression-module=zip \
  --dblock-size=50mb \
  "file:///backup/destination" \
  "/home/user/documents"

# Detaylı parametrelerle yedekleme
duplicati-cli backup \
  --encryption-module=aes \
  --passphrase="güçlü_şifre" \
  --compression-module=zip \
  --zip-compression-level=9 \
  --dblock-size=50mb \
  --retention-policy="1W:1D,4W:1W,12M:1M" \
  "s3://bucket-name/backup-folder/" \
  "/home/user/important-data"

Geri Yükleme İşlemi

1
2
3
4
5
6
7
8
9
10
11
12
13
# Belirli bir tarihteki yedeği geri yükleme
duplicati-cli restore \
  --passphrase="güçlü_şifre" \
  --restore-path="/restore/location" \
  "s3://bucket-name/backup-folder/" \
  --time="2025-07-01T10:00:00"

# Belirli dosyaları geri yükleme
duplicati-cli restore \
  --passphrase="güçlü_şifre" \
  --restore-path="/restore/location" \
  "s3://bucket-name/backup-folder/" \
  --include="*.pdf" --include="*.docx"

2. Zamanlanmış Yedekleme

Linux Cron ile Otomatik Yedekleme

1
2
3
4
5
6
7
8
9
# Crontab düzenleme
crontab -e

# Her gece saat 02:00'da yedekleme
0 2 * * * /usr/bin/duplicati-cli backup --encryption-module=aes --passphrase="şifre" "s3://bucket/backup/" "/home/user/data"

# Haftalık tam yedekleme ve günlük incremental
0 2 * * 0 /usr/bin/duplicati-cli backup --full --encryption-module=aes --passphrase="şifre" "s3://bucket/backup/" "/home/user/data"
0 2 * * 1-6 /usr/bin/duplicati-cli backup --encryption-module=aes --passphrase="şifre" "s3://bucket/backup/" "/home/user/data"

Windows Task Scheduler

1
2
3
4
5
6
7
8
9
10
# PowerShell script (backup-script.ps1)
$duplicatiPath = "C:\Program Files\Duplicati 2\Duplicati.CommandLine.exe"
$source = "C:\Users\%USERNAME%\Documents"
$destination = "s3://my-backup-bucket/duplicati-backups/"
$password = "güçlü_şifre"

& $duplicatiPath backup --encryption-module=aes --passphrase=$password $destination $source

# Görev zamanlayıcısında çalıştırma
schtasks /create /tn "Duplicati Daily Backup" /tr "powershell.exe -File C:\Scripts\backup-script.ps1" /sc daily /st 02:00

Farklı Bulut Servislerine Yapılandırma Örnekleri

1. Google Drive Konfigürasyonu

Web Arayüzü Ayarları

1
2
3
Storage Type: "Google Drive"
AuthID: [Google OAuth ile alınacak]
Folder: "/Duplicati Backups"

Komut Satırı

1
2
3
4
5
6
7
8
duplicati-cli backup \
  --backup-name="GoogleDrive-Backup" \
  --encryption-module=aes \
  --passphrase="şifre" \
  --auth-username="[email protected]" \
  --google-drive-folder="/Duplicati Backups" \
  "googledrive://backup-folder/" \
  "/home/user/documents"

2. Microsoft OneDrive Konfigürasyonu

1
2
3
4
5
6
7
duplicati-cli backup \
  --backup-name="OneDrive-Backup" \
  --encryption-module=aes \
  --passphrase="şifre" \
  --onedrive-folder="/Backups" \
  "onedrive://backup-folder/" \
  "/home/user/important-files"

3. SFTP Sunucu Konfigürasyonu

1
2
3
4
5
6
7
8
duplicati-cli backup \
  --backup-name="SFTP-Backup" \
  --encryption-module=aes \
  --passphrase="şifre" \
  --ssh-fingerprint="aa:bb:cc:dd:ee:ff" \
  --ssh-keyfile="/home/user/.ssh/id_rsa" \
  "ssh://[email protected]:22/backup/path/" \
  "/home/user/data"

Monitoring ve Performans Optimizasyonu

1. Log Analizi

Log Dosyası Konumları

1
2
3
4
5
6
7
8
# Linux
~/.config/Duplicati/logs/

# Windows
%APPDATA%\Duplicati\logs\

# macOS
~/Library/Application Support/Duplicati/logs/

Log Seviyelerini Ayarlama

1
2
3
4
5
6
7
8
9
10
11
# Detaylı logging için
duplicati-cli backup \
  --log-level=Information \
  --log-file="/var/log/duplicati-backup.log" \
  [diğer parametreler...]

# Debug modunda çalıştırma
duplicati-cli backup \
  --log-level=Verbose \
  --console-log-level=Information \
  [diğer parametreler...]

2. Performans Optimizasyonu

Memory ve CPU Optimizasyonu

1
2
3
4
5
6
7
8
9
# Thread sayısını sınırlama
--thread-priority=BelowNormal \
--number-of-retries=3 \
--asynchronous-concurrent-upload-limit=2

# Memory kullanımını sınırlama
--temporary-directory="/tmp/duplicati" \
--use-move-for-store=true \
--snapshot-policy=On

Bandwidth Kontrolü

1
2
3
4
5
6
7
# Upload/Download hızını sınırlama
--throttle-upload=1024kb \
--throttle-download=2048kb \

# Aktif saatlerde farklı limitler
--throttle-upload=512kb@08:00-18:00 \
--throttle-upload=unlimited@18:00-08:00

3. Yedekleme Doğrulama

Düzenli Verification

1
2
3
4
5
6
7
8
9
10
11
# Yedekleme doğrulama
duplicati-cli verify \
  --passphrase="şifre" \
  "s3://bucket-name/backup-folder/"

# Belirli dosyaları doğrulama
duplicati-cli compare \
  --passphrase="şifre" \
  "s3://bucket-name/backup-folder/" \
  "/home/user/local-files" \
  --time="2025-07-01"

Güvenlik Best Practices

Depolama Backends Görsel Galeri

1. Şifre Yönetimi

Güçlü Şifre Oluşturma

1
2
3
4
5
# OpenSSL ile güçlü şifre üretme
openssl rand -base64 32

# Password manager kullanımı önerilir
# KeePass, Bitwarden, 1Password gibi araçlar

Environment Variables ile Şifre Saklama

1
2
3
4
5
6
7
8
# Linux/macOS için
export DUPLICATI_PASSPHRASE="güçlü_şifre"

# Windows için
set DUPLICATI_PASSPHRASE=güçlü_şifre

# Komut satırında kullanım
duplicati-cli backup --passphrase=$DUPLICATI_PASSPHRASE [diğer parametreler...]

2. Multi-Factor Authentication

Google Drive için 2FA

1
2
3
4
Authentication:
  - Google OAuth 2.0
  - App-specific password
  - 2-Factor Authentication enabled

SFTP için Key-based Authentication

1
2
3
4
5
6
7
8
# SSH key pair oluşturma
ssh-keygen -t rsa -b 4096 -C "duplicati-backup"

# Public key'i sunucuya kopyalama
ssh-copy-id -i ~/.ssh/duplicati_rsa.pub [email protected]

# Duplicati'de private key kullanımı
--ssh-keyfile="~/.ssh/duplicati_rsa"

Disaster Recovery Senaryoları

Disaster Recovery Senaryoları

1. Tam Sistem Geri Yükleme

Bare Metal Recovery

1
2
3
4
5
6
7
8
9
10
# 1. Duplicati kurulumu (yeni sistem)
# 2. Yedekleme konfigürasyonunu içe aktarma
duplicati-cli import-config backup-config.json

# 3. Tam sistem geri yükleme
duplicati-cli restore \
  --passphrase="şifre" \
  --restore-path="/" \
  --overwrite=true \
  "s3://bucket-name/system-backup/"

2. Selective Recovery

Belirli Tarih Aralığındaki Dosyalar

1
2
3
4
5
6
7
8
9
10
11
12
13
# Son bir haftalık değişiklikleri geri yükleme
duplicati-cli restore \
  --passphrase="şifre" \
  --restore-path="/restore/recent/" \
  --time="1W" \
  "s3://bucket-name/backup-folder/"

# Belirli bir tarih aralığı
duplicati-cli restore \
  --passphrase="şifre" \
  --restore-path="/restore/range/" \
  --time="2025-07-01..2025-07-15" \
  "s3://bucket-name/backup-folder/"

3. Cross-Platform Recovery

Windows’tan Linux’a Geri Yükleme

1
2
3
4
5
6
7
# Path mapping ile platform arası geri yükleme
duplicati-cli restore \
  --passphrase="şifre" \
  --restore-path="/home/user/restored/" \
  --skip-metadata \
  --include="*.pdf" --include="*.doc*" \
  "s3://bucket-name/windows-backup/"

Duplicate vs Alternatifler

Platform Karşılaştırması Görseli

1. Karşılaştırma Tablosu

ÖzellikDuplicatiResticBorgBacula
Açık Kaynak
Web Arayüz
Cross-platformLinux/macOS
Deduplication
EncryptionAES-256AES-256AES-256SSL/TLS
Cloud SupportÇok GenişGenişSınırlıSınırlı
Incremental
GUIWeb-based3rd party3rd party

2. Neden Duplicati?

Avantajlar

  • Kullanım Kolaylığı: Web arayüzü ile kolay yönetim
  • Geniş Bulut Desteği: 20+ farklı storage backend
  • Zero Configuration: Çoğu senaryo için varsayılan ayarlar yeterli
  • Active Community: Düzenli güncellemeler ve forum desteği

Dikkat Edilmesi Gerekenler

  • Beta Software: Stable 2.0 sürümü henüz çıkmadı
  • Memory Usage: Büyük yedeklemeler için fazla RAM kullanımı
  • Performance: Çok büyük dosyalar için diğer araçlar daha hızlı olabilir

Gerçek Dünya Senaryoları

1. Ev Kullanıcısı Senaryosu

Konfigürasyon

1
2
3
4
5
6
7
8
Backup Set: "Aile Fotoğrafları ve Belgeler"
Source: 
  - C:\Users\%USERNAME%\Documents
  - C:\Users\%USERNAME%\Pictures
  - C:\Users\%USERNAME%\Desktop
Destination: "Google Drive"
Schedule: "Günlük saat 23:00"
Retention: "30 gün günlük, 12 ay aylık"

2. Küçük İşletme Senaryosu

Multi-destination Backup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Birincil yedekleme (AWS S3)
duplicati-cli backup \
  --backup-name="Primary-Business-Backup" \
  --encryption-module=aes \
  --passphrase="business_password_2025" \
  --retention-policy="7D:1D,4W:1W,12M:1M" \
  "s3://company-backup-primary/duplicati/" \
  "/var/business-data/"

# İkincil yedekleme (Local NAS)
duplicati-cli backup \
  --backup-name="Secondary-Business-Backup" \
  --encryption-module=aes \
  --passphrase="business_password_2025" \
  "file:///mnt/nas/business-backup/" \
  "/var/business-data/"

3. Geliştirici Senaryosu

Kod Proje Yedekleme

1
2
3
4
5
6
7
8
9
10
11
12
# Git repository'leri hariç tutarak proje yedekleme
duplicati-cli backup \
  --backup-name="Dev-Projects-Backup" \
  --encryption-module=aes \
  --passphrase="dev_secure_2025" \
  --include="*.cs" --include="*.js" --include="*.py" \
  --include="*.sql" --include="*.json" --include="*.xml" \
  --exclude="*/node_modules/*" --exclude="*/.git/*" \
  --exclude="*/bin/*" --exclude="*/obj/*" \
  --exclude="*/.vs/*" --exclude="*/__pycache__/*" \
  "s3://dev-backup-bucket/projects/" \
  "/home/developer/projects/"

Troubleshooting ve Yaygın Sorunlar

1. Yaygın Hatalar ve Çözümleri

“Backend verification failed” Hatası

1
2
3
4
5
6
7
8
# Yedekleme bütünlüğünü kontrol etme
duplicati-cli verify --passphrase="şifre" "storage-url"

# Onarım işlemi
duplicati-cli repair --passphrase="şifre" "storage-url"

# Database yeniden oluşturma
duplicati-cli recreate-database --passphrase="şifre" "storage-url"

“Out of Memory” Hatası

1
2
3
4
5
6
7
# Memory kullanımını azaltma
--dblock-size=10mb \
--use-move-for-store=true \
--asynchronous-concurrent-upload-limit=1

# Temporary directory'yi değiştirme
--temporary-directory="/tmp/duplicati-temp"

Network Timeout Sorunları

1
2
3
4
5
6
7
8
# Timeout değerlerini artırma
--timeout=300 \
--number-of-retries=5 \
--retry-delay=10s

# Bandwidth limitlerini ayarlama
--throttle-upload=1mb \
--asynchronous-concurrent-upload-limit=2

2. Database Bakım İşlemleri

Database Optimization

1
2
3
4
5
6
7
8
# Compact işlemi
duplicati-cli compact --passphrase="şifre" "storage-url"

# Database vacuum
duplicati-cli vacuum --passphrase="şifre" "storage-url"

# Purge deleted files
duplicati-cli purge-files --passphrase="şifre" "storage-url"

Monitoring ve Alerting

1. Email Bildirimleri

SMTP Konfigürasyonu

1
2
3
4
5
6
7
# Web arayüzünde Advanced Options
send-mail-url: "smtp://smtp.gmail.com:587"
send-mail-username: "[email protected]"
send-mail-password: "app_specific_password"
send-mail-subject: "Duplicati Backup - %OPERATIONNAME%"
send-mail-to: "[email protected]"
send-mail-level: "All"

2. Webhook Entegrasyonu

Slack Webhook

1
2
3
4
5
# Post backup webhook
--run-script-after="curl -X POST -H 'Content-type: application/json' --data '{\"text\":\"Backup completed: %PARSED_RESULT%\"}' https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"

# Error webhook
--run-script-on-error="curl -X POST -H 'Content-type: application/json' --data '{\"text\":\"❌ Backup failed: %PARSED_RESULT%\"}' https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"

3. Prometheus Metrics

Custom Metrics Script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python3
import json
import sys
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway

# Duplicati result parsing
result = json.loads(sys.argv[1])

registry = CollectorRegistry()
backup_duration = Gauge('duplicati_backup_duration_seconds', 'Backup duration', registry=registry)
backup_size = Gauge('duplicati_backup_size_bytes', 'Backup size', registry=registry)
backup_files = Gauge('duplicati_backup_files_total', 'Total files backed up', registry=registry)

# Set metrics
backup_duration.set(result['Duration'].total_seconds())
backup_size.set(result['BackendStatistics']['TotalSize'])
backup_files.set(result['BackendStatistics']['TotalFileCount'])

# Push to Prometheus Gateway
push_to_gateway('localhost:9091', job='duplicati_backup', registry=registry)

Sonuç ve Öneriler

Duplicati, açık kaynak dünyasında güçlü ve güvenilir bir yedekleme çözümü sunmaktadır. Bu yazıda ele aldığımız konular:

✅ Ana Avantajlar

  1. Zero-trust Security: İstemci tarafında şifreleme ile maksimum güvenlik
  2. Platform Bağımsızlığı: Windows, macOS, Linux desteği
  3. Geniş Storage Desteği: 20+ farklı backend seçeneği
  4. Web-based Yönetim: Kullanıcı dostu arayüz
  5. Incremental Backup: Bandwidth ve storage tasarrufu

🔧 Best Practices

  1. Güçlü şifreler kullanın ve güvenli şekilde saklayın
  2. Düzenli verification işlemleri yapın
  3. Multi-destination yedekleme stratejisi benimseyin
  4. Monitoring ve alerting sistemleri kurun
  5. Disaster recovery planlarınızı test edin

📈 Gelecek Beklentileri

  • Duplicati 3.0: Performans iyileştirmeleri ve yeni özellikler
  • Native Mobile Apps: iOS ve Android uygulamaları
  • Enhanced Monitoring: Daha gelişmiş izleme ve raporlama
  • AI-powered Optimization: Akıllı yedekleme optimizasyonu

Duplicati, hem ev kullanıcıları hem de kurumsal ortamlar için mükemmel bir seçimdir. Ücretsiz olması, açık kaynak kodu ve güçlü güvenlik özellikleri ile veri yedekleme ihtiyaçlarınıza profesyonel bir çözüm sunar.

Gelecek Yazılarımda: Docker container’larda Duplicati kurulumu, Kubernetes ortamında distributed backup senaryoları ve advanced scripting teknikleri konularını ele almayı planlıyorum.

Sorularınızı ve deneyimlerinizi yorumlarda paylaşmayı unutmayın!


Not: Bu yazıdaki konfigürasyon örnekleri Duplicati 2.0.7.x sürümü için hazırlanmıştır. Production ortamında kullanmadan önce test etmeyi unutmayın.

Kaynaklar:

Bu gönderi CC BY 4.0 lisansı altındadır.