Environment_Infrastructure/setup/05-prod-ansible-bootstrap.md
2026-05-09 16:26:06 +03:00

3.6 KiB

05 - Prod Ansible Bootstrap

Bu asamanin amaci Terraform ile olusturulan prod makinelerini Linux, security hardening, Docker ve Swarm acisindan hazir hale getirmektir. DB cluster yazilimi manuel kurulacaktir; bu playbook DB node'larinda sadece OS ve temel guvenlik hazirligini yapar.

Hedef Makineler

Host Rol
prod-swarm-01 Swarm manager + app worker
prod-swarm-02 Swarm manager + app worker
prod-swarm-03 Swarm manager + app worker
prod-db-01 Manuel DB cluster node
prod-db-02 Manuel DB cluster node
prod-db-03 Manuel DB cluster node

Onerilen Dosya Yapisi

ansible/
  ansible.cfg
  inventory/
    generated/
      prod.yml
  group_vars/
    all.yml
    prod.yml
  playbooks/
    prod-bootstrap.yml
  roles/
    base/
    hardening/
    docker/
    swarm/
    node_dirs/

Base Role

Tum prod node'larina uygulanir:

  • Paket cache update
  • Temel paketler:
    • curl
    • wget
    • git
    • jq
    • unzip
    • ca-certificates
    • gnupg
    • lsb-release
    • ufw
    • fail2ban
    • chrony
    • python3
    • python3-pip
  • timezone: Europe/Istanbul
  • hostname ayari
  • chrony/NTP aktif

Security Hardening Role

Tum prod node'larina uygulanir:

  • SSH password auth kapatilir.
  • Root SSH login kapatilir.
  • Sadece SSH key auth kalir.
  • PermitEmptyPasswords no
  • MaxAuthTries 3
  • fail2ban aktif edilir.
  • unattended-upgrades aktif edilir.
  • UFW default incoming deny, outgoing allow.
  • SSH sadece admin CIDR'dan acilir.
  • DB portlari public acilmaz.

Hetzner Cloud Firewall asil perimeter kabul edilir. UFW host uzerinde ikinci savunma katmanidir.

Docker Role

Sadece prod-swarm-* node'larinda zorunludur.

Kurulacak paketler:

  • docker-ce
  • docker-ce-cli
  • containerd.io
  • docker-buildx-plugin
  • docker-compose-plugin

Kurulum resmi Docker apt repository uzerinden yapilacak. Convenience script kullanilmayacak.

DB node'larinda Docker zorunlu degildir. DB manuel kurulum stratejisi container tabanli olacaksa daha sonra ayri DB dokumaninda ele alinmalidir.

Swarm Role

Prod Swarm 3 manager ile kurulacak:

  1. prod-swarm-01 uzerinde docker swarm init
  2. Advertise/data path addr: 10.20.10.11
  3. Manager join token alinir.
  4. prod-swarm-02 ve prod-swarm-03 manager olarak join olur.
  5. Overlay network olusturulur:
    • iklimco-net
    • driver: overlay
    • attachable: true
  6. Tum 3 node type=service label'i ile isaretlenir:
    for node in prod-swarm-01 prod-swarm-02 prod-swarm-03; do
      docker node update --label-add type=service "$node"
    done
    
  7. Hicbir node drain edilmez. 3 node da AVAILABILITY=Active kalir; hem manager hem app worker olarak calisir.

DB node'lari (prod-db-*) Swarm'a join ettirilmez. DB cluster ayri yonetilir.

Node Directory Role

Tum prod-swarm-* node'larinda:

/opt/iklimco
/opt/iklimco/ssl
/opt/iklimco/init
/opt/iklimco/init/postgresql
/opt/iklimco/init/mongodb

DB node'larinda manuel DB kurulumu icin:

/opt/iklimco
/opt/iklimco/db
/opt/iklimco/backup

Kabul Kriterleri

  • ansible -i inventory/generated/prod.yml all -m ping basarili olur.
  • 3 Swarm node docker node ls icinde manager olarak gorunur; hepsi AVAILABILITY=Active.
  • Manager quorum saglanir (3 manager, 1 kayip tolere edilir).
  • iklimco-net overlay network vardir.
  • docker node inspect prod-swarm-01 --format '{{.Spec.Labels}}' ciktisi map[type:service] icerir.
  • DB node'lari docker node ls ciktisinda gorunmez.
  • Public firewall sadece 22, 80, 443 ingress'e izin verir.
  • DB node'lari public DB portu acmaz.
  • DB yazilimi kurulumu bu playbook tarafindan yapilmaz.