- 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)
91 lines
3.8 KiB
Markdown
91 lines
3.8 KiB
Markdown
# 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:**
|
||
1. **Hazırlık (Ansible):** `test-db-post-stack.yml` playbook'u DB dizinlerini, `mongod.conf` konfigürasyonunu ve WireGuard VPN servisini kurar.
|
||
2. **Deploy (Gitea CI/CD):** `deploy-test.yml` workflow'u `docker-stack-infra.yml` üzerinden PostgreSQL ve MongoDB servislerini Swarm'a deploy eder.
|
||
|
||
**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 (`db_stack` ve `wireguard` rolleri):
|
||
- `/opt/iklimco/db/mongodb/config/` dizinini oluşturur
|
||
- `mongod.conf` dosyası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 workflow `docker-stack-infra.yml` aracı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 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).
|