# Yedekleme ve geri yükleme

> Proxus kendi yedeğini almaz. Docker yığınında neyin yedekleneceğini, tutarlı kopyanın nasıl alınacağını ve geri yüklemeyi öğrenin.

Kaynak: https://proxus.io/tr/docs/operate/backup-and-restore

Bu kılavuzu tamamladığınızda bir Proxus merkez sunucusunu sıfırdan yeniden kurmak için gereken her şeyin kopyası
elinizde olur: cihazlar, alarm kuralları, kullanıcılar, saklanan değerler ve Edge Gateway bağlantıları. Bu kopyayı nasıl
geri yükleyeceğinizi de öğrenirsiniz.

> **Uyarı:**
Proxus kendiliğinden yedek almaz. Üründe yedekleme düğmesi ya da zamanlanmış yedekleme yoktur. Burada anlatılan
yedeklemeyi ya da şirketinizin kendi birim veya veritabanı yedekleme çözümünü kurun. Geri yüklemeyi de mutlaka
deneyin.

## Başlamadan önce

- Merkez sunucu, hazır `docker-compose.yml` dosyasıyla ve `proxus` proje adıyla çalışıyor olmalıdır (bkz.
  [Docker](https://proxus.io/tr/docs/operate/docker)). Proje adı farklıysa birim adları `proxus_` yerine o adla başlar.
- Merkez sunucunun makinesi dışında, telemetri veritabanının sığacağı kadar alanı olan bir yedekleme konumu gerekir.
- Makinede `docker` komutunu çalıştırabilen bir kabuk (shell) erişimi gerekir.

## Neler yedeklenmeli

Yığının tüm verisi beş Docker biriminde durur:

| Birim | İçerik | Kaybolursa |
| --- | --- | --- |
| `proxus_config` | `Proxus-config.toml`, NATS kimlik bilgileri ve TLS dosyaları (`nats/`), oturum açmayı koruyan anahtarlar (`keys/`), sertifika deposu anahtarı (`keys/STORE/certificate-store.key`), Edge Gateway'in OPC UA sertifikaları, günlük dosyaları | Tüm uzak Edge Gateway'lerin yeniden kurulması gerekir. Tüm kullanıcıların oturumu kapanır, yapılandırma varsayılan değerlere döner ve veritabanındaki sertifikalar okunamaz. |
| `proxus_proxus-db-volume` | Yapılandırma veritabanı (PostgreSQL): cihazlar, profiller, veri noktaları, alarm kuralları, işlem akışları, kullanıcılar, roller, sertifikalar, lisans, değişiklik geçmişi | Merkez sunucuda yaptığınız tüm tanımlar kaybolur. |
| `proxus_clickhouse_data` | Telemetri veritabanı (ClickHouse): saklanan tüm değerler ve sistem günlükleri | Tüm geçmiş kaybolur: trendler, raporlar, günlükler. |
| `proxus_nats` | NATS sunucusunda bekleyen mesajlar ve hesap verileri | Henüz iletilmemiş mesajlar kaybolur. |
| `proxus_proxus_modules` | Merkez sunucuya kurulan eklenti modülleri | Eklentilerin yeniden kurulması gerekir. |

Kendi değişikliklerinizi içeren `docker-compose.yml` dosyasının da bir kopyasını saklayın.

> **Tehlike:**
`config` birimi ile yapılandırma veritabanı birbirine bağlıdır. İkisini aynı anda yedekleyin, birlikte geri yükleyin.
Edge Gateway'ler, `config` içindeki NATS kimlik bilgilerine güvenir. Bu bilgiler kaybolursa tüm uzak uç
cihazların yeniden kaydedilmesi gerekir. Veritabanında şifreli saklanan özel anahtarlar da `config` içindeki
sertifika deposu anahtarıyla çözülür. Bu anahtar kaybolursa tüm sertifikaların yeniden oluşturulması ya da
yüklenmesi gerekir: platform CA'sı, merkez sunucunun HTTPS ve NATS sertifikaları, Edge Gateway sertifikaları ve veri
hedefi sertifikaları.

Makinedeki birim adlarını kontrol edin:

```bash
docker volume ls --filter name=proxus_
```

Sertifika deposu anahtarını merkez sunucuya dosyayla değil, `PROXUS_CERTIFICATE_STORE_KEY` ortam değişkeniyle
veriyorsanız bu değeri de yedeklerinizle birlikte saklayın.

## Tam yedek alın (yığın durdurulmuşken)

Yığın dururken alınan birim kopyası tutarlıdır, çünkü veritabanları o sırada yazma yapmaz. Yığın durduğunda
cihazlar da okunmaz. Bu yüzden tam yedeği üretim saatleri dışına planlayın, örneğin her gece ya da her hafta.

```bash
BACKUP=/backup/proxus/$(date +%F)
mkdir -p "$BACKUP"
cp /opt/proxus/docker-compose.yml "$BACKUP/"

docker compose -p proxus stop

for v in config proxus-db-volume clickhouse_data nats proxus_modules; do
  docker run --rm -v proxus_$v:/data:ro -v "$BACKUP":/backup alpine \
    tar czf /backup/$v.tar.gz -C /data .
done

docker compose -p proxus start
```

Klasörü yedekleme konumuna kopyalayın ve birkaç farklı tarihe ait yedeği saklayın.

## Yapılandırma veritabanını çalışırken yedekleyin

İki tam yedek arasında yapılandırmayı güvence altına almak için hiçbir hizmeti durdurmadan yapılandırma
veritabanının dökümünü alın ve `config` birimini kopyalayın. Bu işlemi her gün ya da büyük bir değişiklikten önce
çalıştırın:

```bash
BACKUP=/backup/proxus/$(date +%F-%H%M)
mkdir -p "$BACKUP"
docker exec postgresql pg_dump -U proxus -p 5442 -d proxus -Fc > "$BACKUP/proxus-db.dump"
docker run --rm -v proxus_config:/data:ro -v "$BACKUP":/backup alpine \
  tar czf /backup/config.tar.gz -C /data .
```

Bu yedek, saklanan değerleri içermez. Saklanan değerler için tam yedeği kullanın.

Compose dosyasında veritabanı kullanıcısını, parolasını ya da adını değiştirdiyseniz komutlarda `proxus` yerine
kendi değerlerinizi yazın.

## Aynı makinede geri yükleyin

Yığını durdurun, her birimin içeriğini yedekteki içerikle değiştirin ve yığını yeniden başlatın. Aşağıdaki örnek,
`$BACKUP` klasöründeki bir tam yedeği kullanır:

```bash
docker compose -p proxus stop

for v in config proxus-db-volume clickhouse_data nats proxus_modules; do
  docker run --rm -v proxus_$v:/data -v "$BACKUP":/backup alpine \
    sh -c "find /data -mindepth 1 -delete && tar xzf /backup/$v.tar.gz -C /data"
done

docker compose -p proxus start
```

Ardından oturum açın; cihazları, trendleri ve kullanıcıları kontrol edin.

Bir `pg_dump` dosyasından yalnızca yapılandırma veritabanını geri yüklemek için merkez sunucuyu ve Edge Gateway'i
durdurun, geri yüklemeyi yapın ve ikisini yeniden başlatın:

```bash
docker compose -p proxus stop proxus-ui proxus-server
docker exec -i postgresql pg_restore -U proxus -p 5442 -d proxus --clean --if-exists < "$BACKUP/proxus-db.dump"
docker compose -p proxus start proxus-ui proxus-server
```

## Yeni bir makinede geri yükleyin

1. Docker'ı kurun ve yedekteki `docker-compose.yml` dosyasını `/opt/proxus` klasörüne kopyalayın.
2. Konteynerleri ve birimleri başlatmadan oluşturun. Bunun için `/opt/proxus` klasöründe
   `docker compose -p proxus create` komutunu çalıştırın.
3. Boş birimleri yukarıdaki `for` döngüsüyle doldurun (`stop` satırı olmadan). Ardından yığını
   `docker compose -p proxus start` ile başlatın.
4. Yeni makinenin adresi farklıysa Edge Gateway'lerin merkez sunucuya ulaştığı adresi (`7422` portu) DNS'te güncelleyin
   ya da Edge Gateway'leri yeniden kurun. Merkez sunucunun sertifikaları makinenin adlarını ve adreslerini kapsar. Uç
   cihazların ve kullanıcıların kullandığı adresi `[Service]` `PublicHostNames` ayarına ekleyin ve yeniden
   başlatın. Tarayıcılar ad uyuşmazlığı bildirirse merkez sunucunun HTTPS sertifikasını
   **Güvenlik > Sertifika deposu** ekranında yenileyin.
5. Oturum açın. **Lisans kimliği** değiştiği için lisans kabul edilmezse yeni bir lisans anahtarı isteyin.
   Ayrıntılar için [Lisans](https://proxus.io/tr/docs/administer/license) sayfasına bakın.

## Kubernetes

Kubernetes'te merkez sunucunun ve her Edge Gateway'in kalıcı birimlerini (`/app/config`) kümenin birim yedekleme
çözümüyle yedekleyin. Veritabanları için operatörlerin yedekleme özelliklerini kullanın: PostgreSQL için
CloudNativePG, ClickHouse için ClickHouse operatörü. Burada da aynı kural geçerlidir: merkez sunucunun yapılandırma
birimini (sertifika deposu anahtarıyla birlikte) ve yapılandırma veritabanını aynı ana ait yedekten geri yükleyin.

## Geri yüklemeyi deneyin

Hiç geri yüklenmemiş bir yedek, yedek değil umuttur. Ara sıra yedeği bir test makinesine geri yükleyin, oturum açın
ve cihazların, trendlerin ve kullanıcıların yerinde olduğunu kontrol edin.

## Sonraki adımlar

- [Yükseltme](https://proxus.io/tr/docs/operate/upgrade): yedek aldıktan sonra yeni sürüme geçme.
- [Güvenlik](https://proxus.io/tr/docs/operate/security): `config` birimini ve kimlik bilgilerini koruma.
