# 04 - Test DB Docker Kurulumu (Swarm Worker) Bu aşamanın amacı `iklim-db-01` node'unu Swarm'a worker olarak eklemek ve PostgreSQL ile MongoDB'yi Swarm servisi olarak çalıştırmaktır. ## Mimari Karar Yol haritasında DB'lerin "manuel" kurulacağı belirtilmiştir. Test ortamında bu "manuel" süreç, DB'lerin işletim sistemine doğrudan kurulması yerine, **Swarm Worker** üzerinde Docker konteynerleri olarak ayağa kaldırılması şeklinde uygulanacaktır. Kurulum **iki aşamalıdır:** 1. **Hazırlık (Ansible):** `test-db-post-stack.yml` playbook'u DB dizinlerini, `mongod.conf` konfigürasyonunu ve WireGuard VPN servisini kurar. 2. **Deploy (Gitea CI/CD):** `deploy-test.yml` workflow'u `docker-stack-infra.yml` üzerinden PostgreSQL ve MongoDB servislerini Swarm'a deploy eder. **Neden?** 1. **Yönetim Kolaylığı:** Docker ile versiyon geçişleri ve konfigürasyon yönetimi çok daha hızlıdır. 2. **Overlay Network:** Uygulama servisleri (`iklim-app-01`), DB'lere `iklimco-net` overlay network üzerinden şifreli ve izole bir şekilde erişebilir. 3. **Veri Kalıcılığı:** Veriler `iklim-db-01` üzerindeki Docker named volume'larında saklanır. StorageBox yalnızca backup için kullanılır. ## Ön Koşullar - `03-test-ansible-bootstrap.md` her iki node'da tamamlanmış olmalı. - Docker `iklim-db-01` üzerinde kurulu olmalı (Bootstrap role bunu yapar). - Ansible vault'unda `vault_postgres_root_user`, `vault_postgres_password`, `vault_mongo_root_user`, `vault_mongo_root_password` tanımlı olmalı. ## 1. Firewall Güncellemesi `iklim-db-01`'in Swarm'a katılabilmesi ve uygulama trafiğini kabul etmesi için `terraform/hetzner/test/firewall.tf` dosyasına kurallar eklenmelidir. ### Swarm İletişimi (App Subnet <-> DB Subnet) Swarm yönetimi için `2377/tcp`, `7946/tcp/udp` ve `4789/udp` portları her iki subnet arasında karşılıklı açık olmalıdır. ### DB Erişimi (App Subnet -> DB Subnet) - **PostgreSQL:** `5432/tcp` - **MongoDB:** `27017/tcp` Güncellemeyi yaptıktan sonra: ```bash cd terraform/hetzner/test terraform apply ``` ## 2. Vault Güncellemesi ```bash cd ansible/test ansible-vault edit group_vars/all/vault.yml ``` Şu değişkenleri ekle: ```yaml vault_postgres_root_user: "postgres" vault_postgres_password: "GÜÇLÜ_ŞİFRE" vault_mongo_root_user: "mongoadmin" vault_mongo_root_password: "GÜÇLÜ_ŞİFRE" ``` ## 3. Ansible ile Kurulum ```bash cd ansible/test ansible-playbook -i inventory/generated/test.yml test-db-post-stack.yml --ask-vault-pass ``` **Playbook ne yapar?** `iklim-db-01` üzerinde (`db_stack` ve `wireguard` rolleri): - `/opt/iklimco/db/mongodb/config/` dizinini oluşturur - `mongod.conf` dosyasını yerleştirir - WireGuard VPN sunucusunu kurar ve yapılandırır (`51820/udp`) > DB servislerinin (PostgreSQL, MongoDB) Swarm'a deploy edilmesi Ansible'ın değil, Gitea CI/CD workflow'unun (`deploy-test.yml`) sorumluluğundadır. Bu workflow `docker-stack-infra.yml` aracılığıyla tüm servisleri tek seferde deploy eder. ## 4. Volume ve Veri Yapısı DB verileri `iklim-db-01` üzerindeki Docker named volume'larında tutulur: | Volume | İçerik | |---|---| | `iklim-db_postgresql_data` | PostgreSQL veri dosyaları | | `iklim-db_mongodb_data` | MongoDB veri dosyaları | MongoDB log'ları stdout'a yazılır (`docker logs` ile izlenir). Konfigürasyon: `/opt/iklimco/db/mongodb/config/mongod.conf` > StorageBox DB verisi için **kullanılmaz**. Yalnızca backup stratejisinde görev alır. ## 5. Kabul Kriterleri - `docker node ls` komutunda `iklim-db-01` Ready ve Active görünür. - `docker stack services iklim-db` her iki servisi 1/1 replica ile gösterir. - Uygulama node'undan `iklim-db_postgresql` ve `iklim-db_mongodb` DNS isimleriyle erişim sağlanır. - Reboot sonrası veriler named volume'lardan korunur (`docker volume ls` ile kontrol).