* 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`.
88 lines
3.4 KiB
Markdown
88 lines
3.4 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 **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ı 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:
|
||
- `/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).
|