Environment_Infrastructure/setup/04-test-db-docker-kurulum.md
Murat ÖZDEMİR bf8f011e43 Restructure setup documentation and refine environment bootstrapping
This commit introduces a reordered and renumbered set of setup documentation files to better reflect the deployment stages for both test and production environments.

Key changes include:
*   A new `setup-vs-roadmap-map.md` file to provide a clear mapping between roadmap tasks and their corresponding setup phases.
*   Significantly expanded Ansible bootstrap documentation for both test and production, detailing Docker, Swarm, security hardening, and StorageBox SSH key management roles.
*   Formalized database Docker and Swarm cluster setup instructions for test and production, including explicit steps for Swarm worker integration of DB nodes.
*   Updated roadmap documentation (`roadmap/prod-env/*`) to align with the refined setup, incorporating correct private IP addresses for Swarm joins, new node labels, and floating IP usage for GoDaddy DNS records.
2026-05-11 17:47:30 +03:00

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

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 Hetzner StorageBox (/mnt/storagebox) üzerinde saklanarak host bağımsızlığı sağlanır.

Ön Koşullar

  • 03-test-ansible-bootstrap.md her iki node'da tamamlanmış olmalı.
  • StorageBox /mnt/storagebox olarak her iki node'da mount edilmiş olmalı.
  • Docker iklim-db-01 üzerinde kurulu olmalı (Bootstrap role bunu yapar).

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. DB Node'u Swarm'a Ekleme

iklim-app-01 üzerinde (Manager) join token alın:

docker swarm join-token worker

iklim-db-01 üzerinde (Worker) Swarm'a katılın:

docker swarm join --token <TOKEN> 10.10.10.11:2377

iklim-app-01 üzerinde node'u etiketleyin:

docker node update --label-add role=db iklim-db-01

3. StorageBox Dizin Yapısı

iklim-db-01 üzerinde:

mkdir -p /mnt/storagebox/test/db/postgresql/data
mkdir -p /mnt/storagebox/test/db/mongodb/data
mkdir -p /mnt/storagebox/test/db/mongodb/log
mkdir -p /mnt/storagebox/test/db/mongodb/config

4. Veritabanı Konfigürasyonları

MongoDB Config (mongod.conf)

/mnt/storagebox/test/db/mongodb/config/mongod.conf dosyasını oluşturun:

storage:
  dbPath: /data/db
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path: /data/log/mongod.log
net:
  port: 27017
  bindIp: 0.0.0.0
security:
  authorization: enabled

5. DB Stack Kurulumu

/opt/iklimco/stacks/db.yml (iklim-app-01 üzerinde):

version: "3.8"

networks:
  iklimco-net:
    external: true

services:
  postgresql:
    image: postgis/postgis:17-3.5
    environment:
      POSTGRES_USER: "${DATABASE_POSTGRES_ROOT_USER}"
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
      POSTGRES_DB: postgres
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - /mnt/storagebox/test/db/postgresql/data:/var/lib/postgresql/data
    networks:
      - iklimco-net
    deploy:
      placement:
        constraints:
          - node.labels.role == db

  mongodb:
    image: mongo:8
    environment:
      MONGO_INITDB_ROOT_USERNAME: "${DATABASE_MONGO_ROOT_USER}"
      MONGO_INITDB_ROOT_PASSWORD: "${MONGO_ROOT_PASSWORD}"
    volumes:
      - /mnt/storagebox/test/db/mongodb/data:/data/db
      - /mnt/storagebox/test/db/mongodb/log:/data/log
      - /mnt/storagebox/test/db/mongodb/config/mongod.conf:/etc/mongod.conf
    command: ["--config", "/etc/mongod.conf"]
    networks:
      - iklimco-net
    deploy:
      placement:
        constraints:
          - node.labels.role == db

Deploy

# .env dosyasını oluşturun (Hassas veriler için)
# DATABASE_POSTGRES_ROOT_USER, POSTGRES_PASSWORD, DATABASE_MONGO_ROOT_USER, MONGO_ROOT_PASSWORD

docker stack deploy -c /opt/iklimco/stacks/db.yml iklim-db

6. 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 /mnt/storagebox üzerinden korunur.