- 01: Add WireGuard 51820/udp to public ingress table; add 9000/tcp (APISIX Dashboard) to admin CIDR row in test private rules - 02: Fix admin_ssh_public_key_path (id_rsa.pub, not id_ed25519.pub); add WireGuard 51820/udp to DB firewall table; clarify 9000/9180 port descriptions (app subnet access + SWAG proxy) - 03: Update file structure with new roles (db_stack, wireguard, act_runner) and playbooks (test-app/db-post-stack.yml); add floating IP systemd service to base role description; clarify node labels - 04: Clarify two-phase deployment (Ansible prepares dirs/config, Gitea CI/CD deploys stack); add WireGuard setup info - 05: Add system user column to runner table; fix runner name in acceptance criteria (iklim-test-app → test-runner)
3.8 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.
Kurulum iki aşamalıdır:
- Hazırlık (Ansible):
test-db-post-stack.ymlplaybook'u DB dizinlerini,mongod.confkonfigürasyonunu ve WireGuard VPN servisini kurar. - Deploy (Gitea CI/CD):
deploy-test.ymlworkflow'udocker-stack-infra.ymlüzerinden PostgreSQL ve MongoDB servislerini Swarm'a deploy eder.
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
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.mdher 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_passwordtanı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:
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 (db_stack ve wireguard rolleri):
/opt/iklimco/db/mongodb/config/dizinini oluştururmongod.confdosyası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 workflowdocker-stack-infra.ymlaracı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 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 named volume'lardan korunur (
docker volume lsile kontrol).