Environment_Infrastructure/setup/07-prod-ansible-bootstrap.md
Murat ÖZDEMİR bf8f011e43 Restructure setup documentation and refine environment bootstrapping
This commit introduces a reordered and renumbered set of setup documentation files to better reflect the deployment stages for both test and production environments.

Key changes include:
*   A new `setup-vs-roadmap-map.md` file to provide a clear mapping between roadmap tasks and their corresponding setup phases.
*   Significantly expanded Ansible bootstrap documentation for both test and production, detailing Docker, Swarm, security hardening, and StorageBox SSH key management roles.
*   Formalized database Docker and Swarm cluster setup instructions for test and production, including explicit steps for Swarm worker integration of DB nodes.
*   Updated roadmap documentation (`roadmap/prod-env/*`) to align with the refined setup, incorporating correct private IP addresses for Swarm joins, new node labels, and floating IP usage for GoDaddy DNS records.
2026-05-11 17:47:30 +03:00

5.7 KiB
Raw Blame History

07 - Prod Ansible Bootstrap

Bu aşamanın amacı Terraform ile oluşturulan prod makinelerini Linux, security hardening, Docker ve Swarm açısından hazır hale getirmektir. DB cluster yazılımı bu playbook tarafından kurulmaz; ancak DB node'ları Swarm'a worker olarak katılır.

Ansible Kurulumu

Ansible, kontrol makinesinde (kendi bilgisayarınızda) yüklü olmalıdır. Hedef sunuculara herhangi bir ajan kurulmaz, sadece SSH erişimi yeterlidir.

İşletim Sistemine Göre Kurulum

  • Ubuntu / Debian:

    sudo apt update  
    sudo apt install -y pipx python3-venv  
    
    pipx ensurepath  
    export PATH="$HOME/.local/bin:$PATH"  
    
    pipx install --include-deps ansible
    
  • Fedora / Rocky Linux / RHEL:

    sudo dnf install -y pipx python3-virtualenv
    
    pipx ensurepath
    export PATH="$HOME/.local/bin:$PATH"
    
    pipx install --include-deps ansible
    
  • macOS (Homebrew):

    brew install ansible
    
  • Python Pip ile (Her platformda):

    pipx install --include-deps ansible
    

Kurulumun Doğrulanması

Hangi yöntemle kurarsanız kurun, kurulumun başarılı olduğunu doğrulamak için aşağıdaki komutları kullanın:

# Ansible versiyonunu ve yapılandırma yollarını kontrol edin
ansible --version

# Ansible binarysinin hangi konumdan çalıştığını kontrol edin
which -a ansible

Ansible Komutlarını Çalıştırma

Tüm komutlar projenin ansible/ dizini altından çalıştırılmalıdır.

1. Bağlantı Testi (Ping)

Sunuculara erişimi doğrulamak için:

ansible -i inventory/generated/prod.yml all -m ping

2. Bootstrap Playbook'unu Çalıştırma

Tüm rolleri (base, hardening, docker, swarm vb.) uygulamak için:

ansible-playbook -i inventory/generated/prod.yml playbooks/prod-bootstrap.yml --ask-vault-pass

Hedef Makineler

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

Önerilen Dosya Yapısı

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

Base Role

Tüm prod node'larına uygulanır:

  • Paket cache update
  • Temel paketler (sırasıyla kurulur):
    • epel-release — fail2ban ve davfs2 bu repo'dan gelir; önce kurulur
    • curl
    • wget
    • git
    • jq
    • tar
    • unzip
    • bash-completion
    • gettext — envsubst için; CI/CD deploy pipeline'larında gerekli
    • tree
    • ca-certificates
    • fail2ban
    • firewalld
    • chrony
    • python3
    • python3-pip
    • htop — interaktif proses izleme (EPEL)
    • btop — kaynak monitörü, grafik arayüz (EPEL)
  • timezone: Europe/Istanbul
  • hostname ayarı
  • chrony/NTP aktif

Security Hardening Role

Tüm prod node'larına uygulanır:

  • SSH password auth kapatılır.
  • Root SSH login kapatılır.
  • Sadece SSH key auth kalır.
  • PermitEmptyPasswords no
  • MaxAuthTries 3
  • fail2ban aktif edilir.
  • dnf-automatic ile otomatik güvenlik güncelleştirmeleri aktif edilir.
  • firewalld default: incoming deny (drop zone), outgoing allow.
  • SSH sadece admin CIDR'dan açılır.
  • DB portları public açılmaz.

Hetzner Cloud Firewall asıl perimeter kabul edilir. firewalld host üzerinde ikinci savunma katmanıdır.

Docker Role

Tüm prod node'larında (hem app hem db) zorunludur. DB node'ları Swarm Worker olarak ağa dahil olacağı için Docker Engine her makinede kurulu olmalıdır.

Kurulacak paketler:

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

Kurulum resmi Docker dnf repository üzerinden yapılacak (https://download.docker.com/linux/rhel/docker-ce.repo).

Swarm Role

Prod Swarm 3 manager ile kurulacak:

  1. iklim-app-01 üzerinde docker swarm init (Advertise/data path addr: 10.20.10.11)
  2. iklim-app-02 ve iklim-app-03 manager olarak join olur.
  3. iklim-db-01/02/03 worker olarak join olur.
  4. Overlay network oluşturulur: iklimco-net
  5. Node etiketleri:
    • iklim-app-* -> type=service
    • iklim-db-* -> role=db
  6. Tüm node'lar AVAILABILITY=Active kalır.

Node Directory Role

Tüm iklim-app-* node'larında:

/opt/iklimco/ssl
/opt/iklimco/init
/opt/iklimco/stacks

DB node'larında:

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

StorageBox DAVFS Mount Role

Her node'a uygulanır (tüm iklim-app-* ve iklim-db-*).

Prod Sub-Account

Parametre Değişken Değer
Ana hesap storagebox_account u469968
Sub-account storagebox_user u469968-sub5
WebDAV URL storagebox_url https://u469968-sub5.your-storagebox.de/
Mount point storagebox_mount_point /mnt/storagebox

StorageBox SSH Key Role

Her node'a uygulanır. Sunucu üzerinde ed25519 SSH anahtar çifti üretilir ve StorageBox ana hesabına yüklenir.

Kabul Kriterleri

  • ansible -i inventory/generated/prod.yml all -m ping başarılı olur.
  • 3 Swarm manager node docker node ls içinde Leader/Reachable görünür.
  • 3 DB node docker node ls içinde Worker olarak görünür.
  • Manager quorum sağlanır (3 manager, 1 kayıp tolere edilir).
  • iklimco-net overlay network vardır.
  • Node etiketleri (type=service, role=db) inspect ile doğrulanır.
  • Her node'da /mnt/storagebox mount edilmiştir.
  • Public firewall sadece 22, 80, 443 ingress'e izin verir.