# 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 **Ansible** ile otomatize edilmiştir (`test-db-post-stack.yml`). **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: - `/opt/iklimco/db/mongodb/config/` dizinini oluşturur - `mongod.conf` dosyasını yerleştirir `iklim-app-01` üzerinde: - `/opt/iklimco/stacks/db.yml` stack dosyasını oluşturur (şifreler vault'tan enjekte edilir) - `docker stack deploy` ile PostgreSQL ve MongoDB servislerini başlatır ## 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).