# Docker

> Merkez sunucuyu hazır docker-compose.yml ile çalıştırın. Hizmetler, birimler ve portlar; yığını başlatma, durdurma ve tesise göre ayarlama.

Kaynak: https://proxus.io/tr/docs/operate/docker

Bu kılavuzu tamamladığınızda Proxus merkez sunucusu tek makinede Docker Compose ile çalışır. Yığın sabit bir proje
adı taşır, tesisin saat dilimini ve ayarlarını kullanır. İlk deneme kurulumu için daha kısa olan
[Proxus'u kurun](https://proxus.io/tr/docs/get-started/install) sayfası yeterlidir.

## Başlamadan önce

- [Sistem gereksinimlerini](https://proxus.io/tr/docs/get-started/system-requirements) karşılayan bir Linux makinesi gerekir. Docker
  Desktop yüklü bir Windows ya da macOS makinesi de kullanılabilir.
- Docker Engine ve Docker Compose eklentisi kurulu olmalıdır. `docker compose version` komutu bir sürüm numarası
  yazdırmalıdır.
- Proxus 2.0.0'ın `docker-compose.yml` dosyasını ayrı bir klasöre koyun, örneğin `/opt/proxus`.
- `proxusplatform/proxus-ui` ve `proxusplatform/proxus-server` imajları Docker Hub'da yayımlanır. Makinenin Docker
  Hub'a erişimi olmalı ya da imajlar önceden `docker load` ile yüklenmiş olmalıdır. Bkz.
  [İnternet erişimi olmadan kurulum](https://proxus.io/tr/docs/operate/offline-install).

> **Not:**
Eski Proxus paketlerinde Redis, ayrı bir API hizmeti ve TimescaleDB içeren bir `Deployment/docker-compose.yml`
dosyası da vardı. 2.0.0 bu dosyayı kullanmaz. Sürümle birlikte gelen `docker-compose.yml` dosyasını kullanın.

## Compose dosyası neleri çalıştırır

| Hizmet | İmaj | Dışa açılan portlar | Veri |
| --- | --- | --- | --- |
| `proxus-ui` (merkez sunucu) | `proxusplatform/proxus-ui` | `8443` HTTPS ve `8080` HTTP: web arayüzü, REST API, MCP | `config`, `proxus_modules` birimleri |
| `proxus-server` (**SYSTEM** Edge Gateway'i) | `proxusplatform/proxus-server` | `8083` Edge Gateway HTTP, `1883` MQTT, `8883` TLS üzerinden MQTT | `config` birimi |
| `hub-server` (NATS sunucusu) | `nats` | `4222` istemciler ve `7422` Edge Gateway'ler (ikisi de TLS), `8222` izleme | `nats`, `config` birimleri |
| `postgresql` (yapılandırma veritabanı) | `postgres:16` | `5442` | `proxus-db-volume` birimi |
| `clickhouse` (telemetri veritabanı) | `bitnamilegacy/clickhouse` | `8123`, `9000`, `9004`, `9005` | `clickhouse_data` birimi, `./clickhouse-logs` klasörü |

Duran her hizmet kendiliğinden yeniden başlar (`restart: always`). Merkez sunucu, Edge Gateway ve
veritabanları için çalışma durumu denetimi tanımlıdır.

`config` birimini merkez sunucu, Edge Gateway ve NATS sunucusu birlikte kullanır. Bu birimde yapılandırma dosyası,
NATS kimlik bilgileri ve TLS sertifikası, oturum açmayı koruyan anahtarlar ve sertifika deposu
anahtarı (`keys/STORE/certificate-store.key`) bulunur. Sertifika deposu anahtarı olmadan veritabanındaki
sertifikalar okunamaz. Bu yüzden `config` birimini her zaman veritabanıyla birlikte yedekleyin. Ayrıntılar için
[Yedekleme ve geri yükleme](https://proxus.io/tr/docs/operate/backup-and-restore) sayfasına bakın.

`proxus-ui` konteynerine Docker soketi (`/var/run/docker.sock`) de bağlanır. Merkez sunucu, yapılandırma
değiştiğinde yığını bu soket üzerinden yeniden başlatır.

## Yığını başlatın

Yığını `proxus` proje adıyla çalıştırın. [Yapılandırma düzenleyici](https://proxus.io/tr/docs/administer/configuration) ekranındaki
**Yeniden başlat** düğmesi yalnızca bu adı taşıyan projenin konteynerlerini bulur. Bu belgelerde geçen birim adları
da (`proxus_config` gibi) bu proje adına göre verilmiştir.

```bash
cd /opt/proxus
docker compose -p proxus up -d
```

İlk başlatmada merkez sunucu, NATS kimlik bilgilerini `config` birimine yazar. Bu iş bitene kadar
`hub-server` iki saniyede bir "Waiting for Proxus UI to create the NATS trust" mesajını yazar. Bu mesaj normaldir.

Tüm hizmetlerin çalıştığını kontrol edin:

```bash
docker compose -p proxus ps
```

`proxus-ui`, `proxus-server` ve `postgresql` hazır olduğunda durumları `healthy` olur. Ardından
`https://<host>:8443` adresini açın ve oturum açın. HTTPS varsayılan olarak açıktır. Sertifikayı platformun kendi
sertifika yetkilisi verir. `http://<host>:8080` adresi yerel erişim için açık kalır. Ayrıntılar için
[Güvenlik](https://proxus.io/tr/docs/operate/security#https) sayfasına bakın.

> **İpucu:**
Compose, klasör adını proje adı olarak kullanır. Bu yüzden klasöre `proxus` adını vermek `-p proxus` ile aynı
sonucu verir. Her seferinde aynı proje adını kullanın. Birimler projeye bağlıdır; farklı bir adla başlatılan yığın
mevcut verilerin hiçbirini bulamaz. Konteyner adları sabit olduğundan bir makinede yalnızca bir Proxus merkez
sunucu yığını çalışabilir.

## Sık kullanılan komutlar

| İş | Komut |
| --- | --- |
| Tüm hizmetleri durdurma (veri korunur) | `docker compose -p proxus stop` |
| Durdurulan hizmetleri yeniden başlatma | `docker compose -p proxus start` |
| Yalnızca merkez sunucuyu yeniden başlatma | `docker compose -p proxus restart proxus-ui` |
| Bir hizmetin çıktısını canlı izleme | `docker compose -p proxus logs -f proxus-ui` |
| Konteynerleri kaldırma (birimler korunur) | `docker compose -p proxus down` |

> **Tehlike:**
`docker compose down -v` birimleri de siler. Tüm cihazlar, alarm kuralları, kullanıcılar ve saklanan değerler
gider. Edge Gateway'lerin bağlanmak için ihtiyaç duyduğu NATS kimlik bilgileri de silinir. Korumak
istediğiniz bir kurulumda `-v` seçeneğini kesinlikle kullanmayın.

## Yığını tesise göre ayarlayın

Aşağıdaki ayarları `docker-compose.yml` dosyasında değiştirin, ardından `docker compose -p proxus up -d` ile
uygulayın. Compose yalnızca ayarı değişen konteynerleri yeniden oluşturur.

**Saat dilimi.** Dosyada merkez sunucu ve Edge Gateway için `TZ: Europe/Istanbul` tanımlıdır. Günlüklerdeki ve
ekrandaki saatler bu dilime göre gösterilir. Değeri tesisin saat dilimine göre değiştirin, örneğin
`TZ: Europe/Paris`.

**Ortam değişkeniyle ayar.** [Yapılandırma dosyasındaki](https://proxus.io/tr/docs/administer/configuration) her anahtar,
`environment:` altında `Section__Key` biçiminde de verilebilir. Burada verilen değerler dosyadaki değerlerin yerine
geçer ve yükseltmelerde kaybolmaz:

```yaml
    environment:
      <<: *dotnet-env
      ASPNETCORE_URLS: http://+:8080
      Service__UI-Port: "8080"
      Logging__Loglevel: "3"
      NATS__BrokerUrl: nats://hub-server:4222
      Security__Lockout__MaxFailedAccessAttempts: "5"
```

**Portlar.** Web arayüzünü makinenin başka bir portundan açmak için yalnızca sol taraftaki değeri değiştirin:
`"80:8080"`. Bir porta yalnızca makinenin kendisinden erişilsin istiyorsanız portu geri döngü adresine bağlayın:
`"127.0.0.1:5442:5442"`. Hizmetler birbirine iç `proxus` ağı üzerinden ulaşır, dışa açılan portlara ihtiyaç duymaz.
Hangi portların açık kalması gerektiğini [Güvenlik](https://proxus.io/tr/docs/operate/security) sayfasında bulabilirsiniz.

**HTTPS.** Merkez sunucu HTTPS'i `8443` portundan sunar. HTTPS'i makinenin başka bir portundan açarsanız, örneğin
`"443:8443"`, `Service__PublicHttpsPort: "443"` değerini de ekleyin. Kullanıcıların merkez sunucuya ulaşmak için
yazdığı adları `Service__PublicHostNames` ile tanımlayın. Merkez sunucunun sertifikaları bu adları da kapsar.

**TLS ile MQTT.** **SYSTEM** Edge Gateway'inin MQTT sunucusu, TLS bağlantıları için `8883` portunu da dinler. Hazır
dosya bu portu `1883` ile birlikte dışa açar. Önceki bir sürümden kalan dosyada bu port yoktur. Bu durumda
`proxus-server` hizmetinin portlarına `"8883:8883"` satırını ekleyin.

**ClickHouse belleği.** `clickhouse` hizmeti en fazla 8 GB bellek kullanabilir (`deploy.resources.limits` altında
`memory: 8g`). Küçük bir makinede bu sınırı düşürün, büyük bir kurulumda yükseltin.

## 2.0.0'a yükselttikten sonra

Merkez sunucu başladıktan sonra NATS sunucusunu bir kez yeniden başlatın. Böylece NATS sunucusu TLS sertifikasını
yükler:

```bash
docker restart hub-server
```

Ardından her uzak Edge Gateway'in kurulum komutunu yeniden çalıştırın. Ayrıntılar için
[Yükseltme](https://proxus.io/tr/docs/operate/upgrade#200a-yükseltme) sayfasına bakın.

## Sonraki adımlar

- [Yükseltme](https://proxus.io/tr/docs/operate/upgrade): yığını yeni bir Proxus sürümüne geçirme adımları.
- [Yedekleme ve geri yükleme](https://proxus.io/tr/docs/operate/backup-and-restore): birimlerin ve veritabanlarının yedeğini alma.
- [Güvenlik](https://proxus.io/tr/docs/operate/security): portları, parolaları ve HTTPS'i üretime hazırlama.
- [Edge Gateway kurma](https://proxus.io/tr/docs/connect/edge-gateways/install-a-gateway): başka bir makineye Edge Gateway kurma.
