- 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.
112 lines
6.4 KiB
Markdown
112 lines
6.4 KiB
Markdown
# 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ı açıklar.
|
||
|
||
### Roadmap (`roadmap/`)
|
||
|
||
Roadmap dokümanları test ve production değişiklikleri için gereksinimleri, tasarım hedeflerini ve migration planlarını açı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.
|