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-common
  • baculum-api
  • baculum-web
  • baculum-api-apache2
  • baculum-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:

  1. Sol menüden Restore sekmesine girin
  2. Client listesinden ilgili istemciyi seçin
  3. Backup Jobs listesinden restore etmek istediğiniz job’ı seçin
  4. Dosya ağacında restore edilecek dosya veya dizini işaretleyin
  5. Where alanına restore hedef dizinini yazın (örneğin /tmp/restore test için idealdir)
  6. 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.

Bir yanıt yazın

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