# EraBackup Horizon Plugin Kurulum Rehberi
EraBackup Horizon Plugin, OpenStack kullanıcılarının backup policy, backup, geçmiş, restore point ve storage işlemlerini doğrudan OpenStack Horizon arayüzünden yönetmesini sağlar. Eklenti, kullanıcının mevcut project-scoped Keystone oturumunu kullanır; kullanıcıdan ayrıca EraBackup kullanıcı adı veya parolası istemez.
## Özellikler
- Horizon içinde `Project > EraBackup` menüsü
- Backup policy listeleme, oluşturma ve düzenleme
- Policy aktif/pasif yapma ve silme
- Full ve incremental backup başlatma
- Backup ilerlemesini görüntüleme
- Backup ve çalışma geçmişini listeleme
- Instance restore pointlerini listeleme
- Local ve RustFS storage kayıtlarını görüntüleme
- Keystone `reader`, `member` ve `admin` rollerine göre yetkilendirme
## Desteklenen ortam
Bu paket aşağıdaki referans ortamda doğrulanmıştır:
| Bileşen | Desteklenen sürüm |
|---|---|
| İşletim sistemi | Ubuntu 24.04 LTS |
| OpenStack Horizon | 25.1.0 |
| Django | 4.2.11 |
| Python | 3.12 |
| Web sunucusu | Apache + mod_wsgi |
| Horizon web yolu | `/horizon/` |
> **Önemli:** Kolla/container, virtualenv, farklı Python sürümü veya özel Horizon dizin yapısı kullanan ortamlarda kurulum yollarının uyarlanması gerekebilir.
## Mimari
```text
OpenStack Kullanıcısı
│
▼
Horizon Oturumu ve Keystone Token
│
▼
EraBackup Horizon Plugin
│ X-Auth-Token
▼
EraBackup Master Skyline API
│
├── Policy ve Scheduler
├── Backup ve Restore
└── Local / RustFS Repository
```
Keystone tokenı browser üzerinden doğrudan EraBackup Master'a gönderilmez. Horizon plugin tokenı sunucu tarafında alır ve yalnızca izin verilen EraBackup API endpointlerine iletir.
## Yetki modeli
| Keystone rolü | Yetkiler |
|---|---|
| `reader` | Policy, backup, history, storage ve restore point görüntüleme |
| `member` | Reader yetkileri + policy yönetimi + full/incremental backup |
| `admin` | Member yetkileri + restore ve storage yönetimi |
Horizon butonları capability listesine göre gösterilir. Asıl yetki kontrolü EraBackup Master tarafından her API isteğinde yeniden uygulanır.
## Ön koşullar
Kurulumdan önce aşağıdaki kontrolleri çalıştırın:
```bash
python3 --version
dpkg -l | grep -E 'openstack-dashboard|python3-django|python3-django-horizon'
test -x /usr/share/openstack-dashboard/manage.py && echo "Horizon manage.py OK"
test -d /usr/lib/python3/dist-packages/openstack_dashboard/local/enabled \
&& echo "Horizon enabled directory OK"
systemctl is-active apache2
```
EraBackup Master erişimini kontrol edin:
```bash
curl -k -I https://ERABACKUP_MASTER/api/skyline/session/
```
Endpoint yalnız `POST` kabul ettiği için `405 Method Not Allowed` alınması erişimin mevcut olduğunu gösterir.
## Paketi sunucuya yükleme
Paketi Horizon sunucusuna SCP, SFTP veya kurumun dosya transfer yöntemiyle yükleyin.
Örnek:
```bash
scp era-horizon-plugin-1.0.0.tar.gz \
kullanici@HORIZON_SUNUCU:/tmp/
```
Sunucuya bağlanın:
```bash
ssh kullanici@HORIZON_SUNUCU
cd /tmp
```
Paket bütünlüğünü doğrulayın:
```bash
sha256sum era-horizon-plugin-1.0.0.tar.gz
```
Beklenen SHA-256:
```text
dacbc0139d4d7b6cf88b98709eec03bce65c5318b47c4ed5e4627ae8708b0323
```
## Kurulum
Paketi açın:
```bash
mkdir -p /tmp/era-horizon-plugin-1.0.0
tar -xzf era-horizon-plugin-1.0.0.tar.gz \
-C /tmp/era-horizon-plugin-1.0.0
cd /tmp/era-horizon-plugin-1.0.0
```
### Kurumsal CA ile önerilen kurulum
EraBackup Master HTTPS sertifikası kurumun özel CA zinciriyle imzalanmışsa CA dosyasını Horizon sunucusuna kopyalayın ve kurulumu şu şekilde çalıştırın:
```bash
sudo ./install.sh \
--api-url https://ERABACKUP_MASTER \
--ca-file /etc/ssl/certs/erabackup-ca.crt
```
### CA dosyası bulunmayan ortam
CA dosyası temin edilemiyorsa bağlantı aşağıdaki şekilde kurulabilir:
```bash
sudo ./install.sh \
--api-url https://ERABACKUP_MASTER \
--insecure
```
> `--insecure`, HTTPS sertifika doğrulamasını kapatır. Ağ trafiği şifrelenmeye devam eder fakat sunucu kimliği doğrulanmaz. Üretimde mümkün olduğunda kurumsal CA kullanılması önerilir.
## Installer tarafından yapılan işlemler
Installer:
1. Plugin uygulamasını `/usr/local/lib/python3.12/dist-packages/era_horizon_backup` altına kurar.
2. Horizon enabled dosyalarını `/usr/lib/python3/dist-packages/openstack_dashboard/local/enabled` altına yerleştirir.
3. `/etc/erabackup/horizon-plugin.json` bağlantı ayarını oluşturur.
4. Python syntax kontrolünü çalıştırır.
5. Horizon static dosyalarını toplar.
6. Django system check çalıştırır.
7. Apache servisini yeniden başlatır.
8. Mevcut plugin enabled dosyalarını `/var/backups/erabackup-horizon/` altında yedekler.
Plugin JavaScript ve CSS dosyaları yalnız EraBackup panelinde yüklenir. Horizon login sayfası ve diğer paneller global offline-compression değişikliğinden etkilenmez.
## Yapılandırma dosyası
Kurulumdan sonra aşağıdaki dosya oluşur:
```text
/etc/erabackup/horizon-plugin.json
```
CA ile örnek içerik:
```json
{
"api_url": "https://ERABACKUP_MASTER",
"verify_tls": true,
"ca_file": "/etc/ssl/certs/erabackup-ca.crt",
"timeout": 30
}
```
CA olmadan örnek içerik:
```json
{
"api_url": "https://ERABACKUP_MASTER",
"verify_tls": false,
"ca_file": "",
"timeout": 30
}
```
## Kurulum doğrulaması
Horizon sistem kontrolünü çalıştırın:
```bash
sudo python3 /usr/share/openstack-dashboard/manage.py check
```
Beklenen çıktı:
```text
System check identified no issues (0 silenced).
```
Apache durumunu kontrol edin:
```bash
systemctl is-active apache2
```
Beklenen çıktı:
```text
active
```
Static dosyaları kontrol edin:
```bash
find /var/lib/openstack-dashboard/static/erabackup \
-maxdepth 2 -type f -print
```
Beklenen dosyalar:
```text
/var/lib/openstack-dashboard/static/erabackup/erabackup.js
/var/lib/openstack-dashboard/static/erabackup/erabackup.css
```
Login ekranını kontrol edin:
```bash
curl -sS -o /dev/null -w '%{http_code}\n' \
http://127.0.0.1/horizon/auth/login/
```
Beklenen sonuç `200` değeridir.
## Arayüze erişim
Browser üzerinden Horizon'a giriş yapın:
```text
http://HORIZON_SUNUCU/horizon/
```
Başarılı girişten sonra aşağıdaki menüyü açın:
```text
Project > EraBackup
```
Panelin doğrudan yolu:
```text
http://HORIZON_SUNUCU/horizon/project/erabackup/
```
## Kabul testi
Kurulum sonrasında aşağıdaki testlerin ayrı kullanıcılarla yapılması önerilir:
### Reader
- Policy listesini görebilir.
- Backup ve history kayıtlarını görebilir.
- Policy oluşturma ve backup başlatma butonlarını göremez.
- Restore başlatamaz.
### Member
- Policy oluşturabilir ve düzenleyebilir.
- Full ve incremental backup başlatabilir.
- Restore başlatamaz.
- Storage oluşturamaz.
### Admin
- Policy ve backup işlemlerini yapabilir.
- Restore işlemi başlatabilir.
- Storage yönetebilir.
## Log ve hata analizi
Apache ve Horizon hataları:
```bash
sudo tail -f /var/log/apache2/error.log
```
Son Horizon hatalarını filtrelemek için:
```bash
sudo grep -E 'Internal Server Error|Traceback|EraBackup|OfflineGenerationError' \
/var/log/apache2/error.log | tail -100
```
EraBackup Master erişimi:
```bash
curl -k -i -X POST \
https://ERABACKUP_MASTER/api/skyline/session/ \
-H 'Content-Type: application/json' \
-H 'X-Auth-Token: TEST_TOKEN' \
--data '{"platform":"openstack"}'
```
Geçersiz test tokenıyla `401 invalid_token` alınması ağ ve API endpoint erişiminin çalıştığını gösterir.
## Geri dönüş
Installer eski enabled dosyalarını aşağıdaki dizinde saklar:
```text
/var/backups/erabackup-horizon/TARIH-SAAT/
```
Eklentiyi geçici olarak devre dışı bırakmak için enabled dosyalarını `.disabled` uzantısıyla yeniden adlandırın:
```bash
sudo mv \
/usr/lib/python3/dist-packages/openstack_dashboard/local/enabled/_3100_project_erabackup_panel_group.py \
/usr/lib/python3/dist-packages/openstack_dashboard/local/enabled/_3100_project_erabackup_panel_group.py.disabled
sudo mv \
/usr/lib/python3/dist-packages/openstack_dashboard/local/enabled/_3110_project_erabackup_panel.py \
/usr/lib/python3/dist-packages/openstack_dashboard/local/enabled/_3110_project_erabackup_panel.py.disabled
```
Ardından:
```bash
sudo python3 /usr/share/openstack-dashboard/manage.py check
sudo systemctl restart apache2
```
## Güvenlik notları
- Keystone tokenları veritabanına veya uygulama loguna yazılmaz.
- Token URL query string içinde taşınmaz.
- EraBackup API yalnız tanımlı action listesindeki endpointlere çağrı yapar.
- Project kimliği istek gövdesinden güvenilir kabul edilmez; doğrulanmış Keystone tokenından alınır.
- Başka tenant veya projeye ait policy, backup ve restore kayıtları backend tarafından reddedilir.
- Üretimde mümkün olduğunda HTTPS ve kurumsal CA doğrulaması kullanılmalıdır.