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.
4.3 KiB
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?
- Yönetim Kolaylığı: Docker ile versiyon geçişleri ve konfigürasyon yönetimi çok daha hızlıdır.
- Overlay Network: Uygulama servisleri (
iklim-app-01), DB'lereiklimco-netoverlay network üzerinden şifreli ve izole bir şekilde erişebilir. - 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.mdher iki node'da tamamlanmış olmalı.- StorageBox
/mnt/storageboxolarak 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ı açı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 lskomutundaiklim-db-01Ready ve Active görünür.docker stack services iklim-dbher iki servisi 1/1 replica ile gösterir.- Uygulama node'undan
iklim-db_postgresqlveiklim-db_mongodbDNS isimleriyle erişim sağlanır. - Reboot sonrası veriler
/mnt/storageboxüzerinden korunur.