Environment_Infrastructure/setup/04-test-db-docker-kurulum.md
Murat ÖZDEMİR 2198f932cd Implement: Gitea Actions runner, automated DB stack, and Turkish localization
*   Introduces an Ansible role for installing and registering `act_runner` for Gitea Actions.
*   Automates PostgreSQL and MongoDB deployment on Docker Swarm in the test environment, leveraging Docker named volumes for data persistence.
*   Translates core documentation, including `README.md` and `setup/04-test-db-docker-kurulum.md`, to Turkish.
*   Adds comprehensive documentation for firewall architecture (`facts/firewall.md`) and Docker Swarm node recovery (`facts/swarm-node-recovery.md`).
*   Enhances security hardening by ensuring `fail2ban` is enabled and streamlining admin SSH key management via Ansible.
*   Updates Ansible vault structure to support new secret variables and adds `.vault_pass` to `.gitignore`.
2026-05-12 18:34:24 +03:00

3.4 KiB
Raw Blame History

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ıık olmalıdır.

DB Erişimi (App Subnet -> DB Subnet)

  • PostgreSQL: 5432/tcp
  • MongoDB: 27017/tcp

Güncellemeyi yaptıktan sonra:

cd terraform/hetzner/test
terraform apply

2. Vault Güncellemesi

cd ansible/test
ansible-vault edit group_vars/all/vault.yml

Şu değişkenleri ekle:

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

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).