Baculum ile Bacula Web Arayüzü Kurulumu
Bacula kurulumunu tamamladınız, Director, Storage Daemon ve File Daemon çalışıyor. Peki ya her şeyi komut satırından yönetmek zorunda kalmak istemiyorsanız? İşte tam burada Baculum devreye giriyor. Baculum, Bacula için geliştirilmiş açık kaynaklı bir web arayüzüdür ve hem API hem de GUI bileşenleriyle birlikte gelir. Bu yazıda sıfırdan Baculum kurulumunu yapacak, Apache ile entegre edeceğiz ve gerçek dünya senaryolarına uygun yapılandırmaları inceleyeceğiz.
Baculum Nedir ve Neden Kullanmalısınız?
Bacula’yı saf komut satırıyla yönetmek mümkün, ama özellikle birden fazla istemcinin olduğu ortamlarda bconsole ile uğraşmak ciddi zaman kaybı. Baculum bu sorunu çözmek için tasarlanmış bir proje. İki ana bileşenden oluşuyor:
- Baculum API: Bacula bileşenleriyle iletişim kuran RESTful API katmanı. bconsole ve bweb arasındaki köprü.
- Baculum Web (GUI): Kullanıcıların tarayıcıdan yedekleme işlerini yönetebileceği arayüz.
Bu ikili yapı sayesinde API’yi farklı sunuculara kurup merkezi bir GUI’den yönetebilirsiniz. Büyük ortamlarda bu esneklik çok değerli.
Baculum’un öne çıkan özellikleri:
- Job başlatma, durdurma ve izleme
- Volume ve Pool yönetimi
- İstemci bazlı yedekleme geçmişi görüntüleme
- Restore işlemlerini web üzerinden başlatma
- Kullanıcı ve rol tabanlı erişim yönetimi
- Grafik tabanlı istatistikler
Sistem Gereksinimleri ve Hazırlık
Bu yazıda Debian 12 (Bookworm) üzerinde çalışıyoruz. Sunucuda zaten Bacula Director kurulu olduğunu varsayıyoruz. Baculum için minimum gereksinimler:
- PHP 7.4 veya üzeri (PHP 8.x önerilir)
- Apache 2.4 veya Nginx
- Bacula Director ile aynı sunucuda veya bconsole erişimi olan bir sunucu
- Yeterli RAM: En az 512MB (1GB önerilir)
Önce sistemi güncelleyelim ve gerekli paketleri yükleyelim:
apt update && apt upgrade -y
apt install -y apache2 php php-curl php-json php-xml
php-mbstring libapache2-mod-php wget gnupg2 apt-transport-https
PHP versiyonunu doğrulayalım:
php -v
Baculum Deposunu Eklemek
Baculum resmi paketleri kendi deposundan dağıtıyor. Debian için bu depoyu eklememiz gerekiyor.
wget -qO - https://bacula.org/downloads/baculum/baculum.pub |
gpg --dearmor -o /usr/share/keyrings/baculum-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/baculum-archive-keyring.gpg]
https://bacula.org/downloads/baculum/stable/debian bookworm main"
> /etc/apt/sources.list.d/baculum.list
apt update
Depo eklendikten sonra mevcut Baculum paketlerini listeleyelim:
apt-cache search baculum
Çıktıda şunları görmeniz gerekiyor:
baculum-commonbaculum-apibaculum-webbaculum-api-apache2baculum-web-apache2
Baculum API Kurulumu
Baculum API, Bacula Director ile doğrudan iletişim kuran bileşen. Önce bunu kuruyoruz.
apt install -y baculum-api baculum-api-apache2
Bu komut Apache için gerekli sanal host yapılandırmasını da otomatik olarak kurar. Kurulum sonrası Apache modüllerini etkinleştirelim:
a2enmod rewrite
a2enmod ssl
a2ensite baculum-api
systemctl reload apache2
Şimdi API konfigürasyon dosyasını inceleyelim:
cat /etc/baculum/Config-api-apache2/baculum.conf
Varsayılan olarak API 9096 portunda çalışır. Bu portu değiştirmek isterseniz:
nano /etc/apache2/sites-available/baculum-api.conf
Dosyada şu satırı bulun:
Listen 9096
<VirtualHost *:9096>
ServerName localhost
DocumentRoot /usr/share/baculum/htdocs/api
...
Baculum Web GUI Kurulumu
API hazır olduğuna göre şimdi web arayüzünü kuralım:
apt install -y baculum-web baculum-web-apache2
Web bileşeni için Apache site yapılandırmasını aktif hale getirin:
a2ensite baculum-web
systemctl reload apache2
Web arayüzü varsayılan olarak 9095 portunda çalışır. Portları değiştirmek istemiyorsanız, firewall üzerinde bu portlara izin vermeniz yeterli:
ufw allow 9095/tcp
ufw allow 9096/tcp
ufw status
İlk Kurulum Sihirbazı
Tarayıcıdan http://sunucu-ip:9095 adresine gidin. Baculum’un kurulum sihirbazı sizi karşılayacak.
Adım 1: Dil ve Temel Ayarlar
Sihirbazın ilk adımında dil seçimi yapılır. Türkçe desteği tam olmadığı için İngilizce kalmasını öneririm.
Adım 2: Veritabanı Yapılandırması
Baculum kendi iç veritabanı için SQLite kullanabilir, bu basit kurulumlar için yeterli. Büyük ortamlar için MySQL/PostgreSQL tercih edin.
SQLite ile devam etmek için herhangi bir ek paket gerekmiyor. MySQL kullanmak istiyorsanız:
apt install -y php-mysql mysql-server
mysql -u root -p << 'EOF'
CREATE DATABASE baculum CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'baculum'@'localhost' IDENTIFIED BY 'guclu-sifre-123';
GRANT ALL PRIVILEGES ON baculum.* TO 'baculum'@'localhost';
FLUSH PRIVILEGES;
EOF
Adım 3: Admin Kullanıcısı Oluşturma
Sihirbaz size bir admin kullanıcısı oluşturmanızı isteyecek. Güçlü bir şifre kullanın, zira bu arayüz üzerinden tüm yedekleme sisteminizi yöneteceksiniz.
Komut satırından da kullanıcı ekleyebilirsiniz:
htpasswd -c /etc/baculum/Config-web-apache2/baculum.users admin
Mevcut dosyaya yeni kullanıcı eklemek için -c bayrağını kullanmayın, aksi takdirde dosyanın üzerine yazar:
htpasswd /etc/baculum/Config-web-apache2/baculum.users operator
API ile Web Arayüzünü Birbirine Bağlamak
Baculum Web, Baculum API üzerinden Bacula’ya erişir. Bu bağlantıyı yapılandırmak gerekiyor.
Tarayıcıdan http://sunucu-ip:9095 üzerinde giriş yaptıktan sonra API Connections menüsüne gidin ve yeni bir bağlantı ekleyin:
- Name: local-api (istediğiniz bir isim)
- Protocol: HTTP
- Address: 127.0.0.1
- Port: 9096
- Authentication: Basic Auth
- Username: API için oluşturduğunuz kullanıcı adı
- Password: API şifresi
API kullanıcısını ayrıca oluşturmanız gerekiyor:
htpasswd -c /etc/baculum/Config-api-apache2/baculum.users apiuser
Bağlantıyı test etmek için Test Connection butonuna tıklayın. Başarılı bağlantı mesajı görürseniz devam edebilirsiniz.
bconsole Entegrasyonu
Baculum API’nin Bacula Director ile konuşabilmesi için bconsole erişimi şart. Önce baculum kullanıcısının bconsole’u çalıştırabildiğinden emin olalım:
# baculum kullanıcısını bacula grubuna ekle
usermod -aG bacula www-data
# bconsole'un çalışıp çalışmadığını test et
sudo -u www-data bconsole -c /etc/bacula/bconsole.conf
Eğer bconsole bağlantısı başarısız oluyorsa, Bacula Director’da bir konsol kaynağı tanımlamak gerekebilir. /etc/bacula/bacula-dir.conf dosyasına şunu ekleyin:
Console {
Name = baculum-mon
Password = "baculum-console-password"
CommandACL = status, .status
JobACL = *all*
ClientACL = *all*
StorageACL = *all*
ScheduleACL = *all*
PoolACL = *all*
FileSetACL = *all*
CatalogACL = *all*
WhereACL = *all*
}
Değişiklikten sonra Bacula Director’ı yeniden yükleyin:
systemctl reload bacula-director
Ardından Baculum API yapılandırma dosyasında bconsole yolunu ve konfigürasyon dosyasını belirtin:
nano /etc/baculum/Config-api-apache2/api.conf
İlgili satırları düzenleyin:
[bconsole]
bin_path = /usr/sbin/bconsole
cfg_path = /etc/bacula/bconsole.conf
SSL ile Güvenli Bağlantı
Baculum’u HTTP üzerinden çalıştırmak üretim ortamları için uygun değil. Self-signed sertifika ile HTTPS’e geçelim.
mkdir -p /etc/baculum/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout /etc/baculum/ssl/baculum.key
-out /etc/baculum/ssl/baculum.crt
-subj "/C=TR/ST=Istanbul/L=Istanbul/O=MyCompany/CN=backup.mycompany.local"
Apache sanal host yapılandırmasını güncelleyin:
nano /etc/apache2/sites-available/baculum-web.conf
SSL bloğunu ekleyin ya da güncelleyin:
<VirtualHost *:9095>
ServerName backup.mycompany.local
DocumentRoot /usr/share/baculum/htdocs/web
SSLEngine on
SSLCertificateFile /etc/baculum/ssl/baculum.crt
SSLCertificateKeyFile /etc/baculum/ssl/baculum.key
<Directory /usr/share/baculum/htdocs/web>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/baculum-web-error.log
CustomLog ${APACHE_LOG_DIR}/baculum-web-access.log combined
</VirtualHost>
Apache’yi yeniden başlatın:
systemctl restart apache2
Gerçek Dünya Senaryosu: Restore İşlemi
Baculum’un en çok işinize yarayacağı senaryolardan biri restore. Diyelim ki bir müşteri “dün sildiğim dosyayı geri getir” dedi. İşte web arayüzü üzerinden nasıl yapılır:
- Sol menüden Restore sekmesine girin
- Client listesinden ilgili istemciyi seçin
- Backup Jobs listesinden restore etmek istediğiniz job’ı seçin
- Dosya ağacında restore edilecek dosya veya dizini işaretleyin
- Where alanına restore hedef dizinini yazın (örneğin
/tmp/restoretest için idealdir) - Submit Restore butonuna tıklayın
Restore job’ının durumunu Jobs sekmesinden anlık takip edebilirsiniz. Bu işlemi komut satırıyla yapmak yerine 5 tıklamayla halletmek, özellikle stresli ortamlarda büyük fark yaratıyor.
Kullanıcı Rolleri ve Erişim Kontrolü
Birden fazla kişinin sistemi kullandığı ortamlarda rol yönetimi kritik. Baculum birkaç farklı kullanıcı rolü destekliyor:
- Admin: Tam yetki, her şeyi yapabilir
- Operator: Job başlatıp durdurabilir, restore yapabilir
- Monitor: Sadece izleme, değişiklik yapamaz
Yeni bir operatör kullanıcısı eklemek için önce HTTP auth dosyasına kullanıcıyı ekleyin:
htpasswd /etc/baculum/Config-web-apache2/baculum.users operator1
Ardından Baculum web arayüzünden Users bölümüne gidip bu kullanıcıya “Operator” rolü atayın.
Servis Durumu ve Log Takibi
Baculum ile ilgili sorun yaşandığında bakmanız gereken ilk yerler:
# Apache error loglarını takip et
tail -f /var/log/apache2/baculum-web-error.log
tail -f /var/log/apache2/baculum-api-error.log
# PHP hatalarını kontrol et
tail -f /var/log/apache2/error.log
# Baculum uygulama logları
tail -f /var/log/baculum/baculum.log
Eğer API bağlantısı çalışmıyorsa, doğrudan curl ile test edin:
curl -u apiuser:sifre http://127.0.0.1:9096/api/v2/directors/
200 yanıtı alıyorsanız API düzgün çalışıyor demektir. 401 görüyorsanız kimlik bilgilerini, 502 görüyorsanız Apache yapılandırmasını kontrol edin.
Otomatik Başlangıç ve Servis Yönetimi
Sunucu yeniden başladığında her şeyin ayağa kalkması için systemd servislerini etkinleştirin:
systemctl enable apache2
systemctl enable bacula-director
systemctl enable bacula-sd
systemctl enable bacula-fd
# Tüm servislerin durumunu tek seferde kontrol et
for service in apache2 bacula-director bacula-sd bacula-fd; do
echo "=== $service ==="
systemctl status $service --no-pager -l | grep -E "Active|error"
done
Yaygın Sorunlar ve Çözümleri
Sorun: Baculum web arayüzü açılıyor ama API bağlantısı başarısız
Bu genellikle iki sebepten kaynaklanır: ya API servisi çalışmıyor ya da firewall port 9096’yı engelliyor.
# API portunu dinleyip dinlemediğini kontrol et
ss -tlnp | grep 9096
# Lokal bağlantıyı test et
curl -v http://127.0.0.1:9096/
Sorun: bconsole bağlanamıyor
# www-data kullanıcısının bconsole'a erişimini test et
sudo -u www-data /usr/sbin/bconsole -c /etc/bacula/bconsole.conf -t
# İzin sorununu çözmek için
chmod 640 /etc/bacula/bconsole.conf
chown root:bacula /etc/bacula/bconsole.conf
usermod -aG bacula www-data
Sorun: PHP hataları ve boş sayfalar
# PHP gereksinimlerini kontrol et
php -m | grep -E "curl|json|xml|mbstring"
# Eksik modülleri yükle
apt install -y php-curl php-json php-xml php-mbstring
systemctl restart apache2
Sorun: Veritabanı bağlantı hataları
SQLite kullanıyorsanız dosya izinlerini kontrol edin:
ls -la /etc/baculum/
chown -R www-data:www-data /etc/baculum/
chmod 755 /etc/baculum/
Performans İpuçları
Büyük Bacula ortamlarında (onlarca istemci, yüzlerce job) Baculum’un performansını artırmak için birkaç ayar:
PHP OPCache’i etkinleştirin:
nano /etc/php/8.2/apache2/conf.d/10-opcache.ini
Şu satırları ekleyin ya da düzenleyin:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Apache için de KeepAlive ve worker ayarlarını optimize edin:
nano /etc/apache2/apache2.conf
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Değişiklikleri uygulamak için Apache’yi yeniden başlatın:
systemctl restart apache2
Yedek Alma ve Baculum Konfigürasyonunu Koruma
Baculum’un kendi konfigürasyonunu düzenli olarak yedeklemek iyi bir alışkanlık. Özellikle API bağlantı ayarları ve kullanıcı tanımları kaybolmamalı.
#!/bin/bash
# Baculum konfigürasyon yedeği
BACKUP_DIR="/opt/baculum-backup"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
tar czf $BACKUP_DIR/baculum-config-$DATE.tar.gz
/etc/baculum/
/etc/apache2/sites-available/baculum-*.conf
# 30 günden eski yedekleri sil
find $BACKUP_DIR -name "baculum-config-*.tar.gz" -mtime +30 -delete
echo "Baculum konfigürasyon yedeği tamamlandi: $BACKUP_DIR/baculum-config-$DATE.tar.gz"
Bu scripti crontab’a ekleyin:
crontab -e
# Her gece 02:00'da çalıştır
0 2 * * * /opt/scripts/backup-baculum-config.sh >> /var/log/baculum-backup.log 2>&1
Sonuç
Baculum, Bacula yönetimini önemli ölçüde kolaylaştıran, özellikle birden fazla kişinin yedekleme sistemine erişmesi gereken ortamlarda vazgeçilmez bir araç. Kurulum başlangıçta biraz karmaşık görünebilir, özellikle API ve Web bileşenlerinin ayrı yapılandırılması kafayı karıştırabiliyor. Ama bir kez doğru kurulup çalışmaya başladıktan sonra, restore işlemlerini web üzerinden saniyeler içinde başlatmak, job durumlarını grafiksel olarak izlemek ve farklı ekip üyelerine rol bazlı erişim vermek gerçekten hayat kurtarıcı oluyor.
Üretim ortamlarında şu noktalara özellikle dikkat edin: SSL mutlaka etkin olmalı, admin şifresi güçlü seçilmeli ve Baculum konfigürasyon dosyaları düzenli olarak yedeklenmelidir. API portlarına (9095 ve 9096) dışarıdan erişimi firewall ile kısıtlayın, bu portlara yalnızca yetkili IP adreslerinden erişilmesine izin verin. Baculum’un sürüm güncellemelerini takip etmek de önemli; güvenlik yamaları düzenli olarak çıkıyor.
