Explains that SWAG's `fail2ban` configurations reside in a node-local Docker volume, not StorageBox. Details a scenario where Grafana Live WebSocket reconnects can cause 401s, leading to IP bans. Provides an Ansible mitigation strategy and highlights the need to ensure consistent `fail2ban` overrides across all potential failover nodes for smooth recovery.
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_runnerve ortakdb_stackgibi 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/01-private-network-port-matrix.md
- setup/02-test-terraform-iac.md
- setup/03-test-ansible-bootstrap.md
- setup/04-test-db-docker-setup.md
- setup/05-test-runner-and-deploy-prerequisites.md
- setup/06-prod-terraform-iac.md
- setup/07-prod-ansible-bootstrap.md
- setup/08-prod-db-cluster-setup.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 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, 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: aktif firewall ve port bilgileri.
- facts/node-recovery-failover.md: node recovery ve failover prosedürleri.
- 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, 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ışındainit-infra-prod.shüzerinden çağrılır. - Production pipeline source of truth: root
.gitea/workflows/deploy-prod.ymlve rootprod_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 == serviceapp/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:
- hetzner-sizing-report.md dosyasını inceleyin.
- Tasarım amacını anlamak için ilgili
roadmap/dokümanlarını inceleyin. - Her roadmap maddesinin hangi setup runbook'u ile uygulandığını görmek için setup-vs-roadmap-map.md dosyasını kontrol edin.
- Hedef ortam için numaralı
setup/runbook'larını sırayla takip edin. - 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.