Murat ÖZDEMİR 67dc2986dd docs(infra): restructure and update infrastructure setup documentation
- Anglicized setup and facts markdown file names for better consistency.

- Updated 01-swarm-init-multinode.md to highlight Ansible automation of Swarm initialization and labeling.

- Overhauled 03-infra-stack-changes.md to describe the single monolithic file strategy and reflect current Redis, RabbitMQ, and etcd cluster configurations.

- Fixed minor overrides and typos in Patroni templates and Ansible bootstrap documents.

- Restructured README and roadmap mapping to align with the renamed setup documents.
2026-06-15 16:42:18 +03:00

112 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# iklim.co Altyapı ve Sunucu Yönetimi
Bu depo, `iklim.co` test ve production ortamlarını provision etmek, yapılandırmak, işletmek ve modernize etmek için kullanılan Infrastructure-as-Code varlıklarını, kurulum runbook'larını, operasyonel facts dokümanlarını ve planlama notlarını içerir.
Altyapı yönetimi Hetzner Cloud üzerinde Terraform ile kaynak provisioning, Ansible ile işletim sistemi ve Swarm bootstrap, Docker Swarm üzerinde altyapı ve uygulama servislerinin deploy edilmesi süreçlerini kapsar.
## Depo Yapısı
### Terraform (`terraform/`)
Terraform, uzak test ve production ortamları için Hetzner Cloud kaynaklarını tanımlar:
- `terraform/hetzner/test`: test sunucuları, network, firewall, Floating IP, placement ve outputs.
- `terraform/hetzner/prod`: production app/service node'ları, DB node'ları, private networking, firewall'lar, placement group'lar, Floating IP ve outputs.
Dev ortamı lokal ve Docker Compose tabanlıdır; bu Terraform stack'leri tarafından provision edilmez.
### Ansible (`ansible/`)
Ansible, Terraform provisioning sonrası uzak host'ları hazırlar:
- `ansible/test`: test bootstrap playbook'ları, inventory ve ortama özel değişkenler.
- `ansible/prod`: production bootstrap playbook'ları, inventory, değişkenler ve prod'a özel rol override'ları.
- `ansible/roles`: `base`, `hardening`, `docker`, `swarm`, `node_dirs`, `storagebox`, `storagebox_ssh_key`, `act_runner` ve ortak `db_stack` gibi paylaşılan roller.
Production, `ansible/prod/ansible.cfg` içinde `roles_path = roles:../roles` kullanır. Bu nedenle `ansible/prod/roles/db_stack` gibi prod-local roller mevcut olduğunda paylaşılan rollerden önce çalışır.
### Setup Runbook'ları (`setup/`)
Setup dokümanları, ortamları ayağa kaldırmak veya büyük altyapı değişikliklerini uygulamak için kullanılan kanonik uygulama runbook'larıdır. Güncel dosyalar:
- [setup/00-general-roadmap.md](./setup/00-general-roadmap.md)
- [setup/01-private-network-port-matrix.md](./setup/01-private-network-port-matrix.md)
- [setup/02-test-terraform-iac.md](./setup/02-test-terraform-iac.md)
- [setup/03-test-ansible-bootstrap.md](./setup/03-test-ansible-bootstrap.md)
- [setup/04-test-db-docker-setup.md](./setup/04-test-db-docker-setup.md)
- [setup/05-test-runner-and-deploy-prerequisites.md](./setup/05-test-runner-and-deploy-prerequisites.md)
- [setup/06-prod-terraform-iac.md](./setup/06-prod-terraform-iac.md)
- [setup/07-prod-ansible-bootstrap.md](./setup/07-prod-ansible-bootstrap.md)
- [setup/08-prod-db-cluster-setup.md](./setup/08-prod-db-cluster-setup.md)
- [setup/09-prod-runner-ha-and-swarm.md](./setup/09-prod-runner-ha-and-swarm.md)
Bu dokümanlar Terraform, Ansible, Swarm label'ları, StorageBox path'leri, runner ön koşulları, DB servisleri ve production Swarm deploy modelinin birlikte nasıl çalıştığınııklar.
### Roadmap (`roadmap/`)
Roadmap dokümanları test ve production değişiklikleri için gereksinimleri, tasarım hedeflerini ve migration planlarınııklar:
- [roadmap/test-env/](./roadmap/test-env/)
- [roadmap/prod-env/](./roadmap/prod-env/)
Roadmap dokümanlarını amaç ve tasarım bağlamı için kullanın. Güncel uygulama akışı için setup runbook'larını kullanın.
### Setup vs Roadmap Map
[setup-vs-roadmap-map.md](./setup-vs-roadmap-map.md), roadmap maddelerini bu maddeleri hayata geçiren setup dokümanları ve implementation alanları ile eşler.
### Facts (`facts/`)
Facts dokümanları güncel durum detaylarını ve operasyonel geçmişi korur:
- [facts/firewall.md](./facts/firewall.md): aktif firewall ve port bilgileri.
- [facts/node-recovery-failover.md](./facts/node-recovery-failover.md): node recovery ve failover prosedürleri.
- [facts/prod-kurulum-gecmisi.md](./facts/prod-kurulum-gecmisi.md): production kurulum geçmişi ve güncel production notları.
Facts dokümanlarını “sistem şu an nasıl çalışıyor?” sorusu, tarihsel bağlam ve setup sonrası doğrulama için kullanın.
### Hetzner Sizing Report
[hetzner-sizing-report.md](./hetzner-sizing-report.md), altyapı servisleri, veritabanları, broker'lar ve uygulama workload'ları için sunucu sizing, CPU/RAM seçimleri ve maliyet/performans değerlendirmelerini açıklar.
### Confluence Export (`confluence-wiki/`)
`confluence-wiki/`, altyapı notlarının repository dışına yayınlanması veya mirror edilmesi gerektiğinde kullanılan wiki odaklı/export edilmiş dokümantasyon materyallerini içerir.
## Güncel Production Modeli
Production şu anda ayrık altyapı modeli kullanır:
- Ana infra ve DB stack: root `docker-stack-infra_db-prod.yml`.
- Vault stack: root `docker-stack-vault.yml`.
- Vault bootstrap: root `init/vault/vault-bootstrap.sh`; production deploy akışında `init-infra-prod.sh` üzerinden çağrılır.
- Production pipeline source of truth: root `.gitea/workflows/deploy-prod.yml` ve root `prod_env-ci_dc-pipeline.md`.
`docker-stack-infra_db-prod.yml` bilinçli olarak karma bir stack'tir:
- Patroni/PostgreSQL, MongoDB ve etcd gibi DB/cluster servisleri `iklim-db-*` node'larında çalışır ve gerektiği yerde host-mode cluster portları kullanır.
- Redis, Redis Sentinel ve RabbitMQ gibi service-node altyapı servisleri `node.labels.type == service` app/service node'larında çalışır ve stack veya reverse proxy tarafından açıkça expose edilmedikçe Docker overlay network üzerinde kalır.
## Kanonik Kurulum Akışı
Yeni bir ortam veya büyük bir altyapı güncellemesi için:
1. [hetzner-sizing-report.md](./hetzner-sizing-report.md) dosyasını inceleyin.
2. Tasarım amacını anlamak için ilgili `roadmap/` dokümanlarını inceleyin.
3. Her roadmap maddesinin hangi setup runbook'u ile uygulandığını görmek için [setup-vs-roadmap-map.md](./setup-vs-roadmap-map.md) dosyasını kontrol edin.
4. Hedef ortam için numaralı `setup/` runbook'larını sırayla takip edin.
5. Güncel davranışı, recovery prosedürlerini, firewall durumunu ve production geçmişini doğrulamak için `facts/` dokümanlarını kullanın.
## Gerekli Araçlar
- Terraform `>= 1.6`
- Ansible
- Hedef ortam için Hetzner Cloud API token
- Sunucu erişimi için yetkili SSH key pair
## Notlar
- Dev ortamı lokal ve Docker Compose tabanlıdır; uzak Terraform/Ansible otomasyonu test ve production ortamlarını hedefler.
- Test daha küçük bir uzak ortamdır ve single-node DB/App varsayımlarına dayanır.
- Production üç app/service node ve üç DB node içeren high-availability uzak ortamdır.