Skip to main content

Infrastruktura niezmienna i Cloud-Init

DLA AGENTÓW AIChatGPTClaude

Paradygmat zarządzania serwerami, w którym serwery nigdy nie są modyfikowane ręcznie po wdrożeniu: każda aktualizacja lub zmiana konfiguracji odbywa się poprzez utworzenie nowego, standaryzowanego instancji.

1. Przegląd koncepcji i problem systemowy

Tradycyjne ręczne administrowanie poprzez łączenie się przez SSH nieuchronnie prowadzi do chaosu:

  • Inżynier loguje się na serwer w piątek o 22:00, awaryjnie poprawia jeden wiersz w konfiguracji Nginx, zapomina zanotować tego w dokumentacji i idzie do domu.
  • Po pół roku serwer trzeba przenieść na inny hosting lub przeskalować.
  • Nowy serwer jest wdrażany według starego poradnika — i nic nie działa! Nikt nie pamięta, które dokładnie pakiety były instalowane ręcznie ani jakie uprawnienia nadano w /etc.

Immutable Infrastructure (Infrastruktura Niezmienialna) definitywnie zakazuje mutowania działających serwerów: jeśli trzeba zmienić choćby jedno ustawienie, nie modyfikujesz starego serwera – wdrażasz nowy, gotowy instancja, przełączasz ruch i niszczyłeś stary.

2. Taksonomia architektoniczna i model mentalny

┌─────────────────────────────────────────────────────────────┐
│                 IMMUTABLE PROVISIONING CYCLE                │
├─────────────────────────────────────────────────────────────┤
│ 1. INFRASTRUCTURE AS CODE (Git Repository):                 │
│    • `cloud-init.yaml`: Security hardening, UFW, Docker      │
│    • `docker-compose.prod.yml`: Application stack           │
├─────────────────────────────────────────────────────────────┤
│                          │                                  │
│                          ▼ Trigger: Provision New VPS (API) │
├─────────────────────────────────────────────────────────────┤
│ 2. CLOUD-INIT BOOTSTRAP (< 90 seconds on Hetzner):          │
│    • Disable root login & password authentication           │
│    • Provision non-root user `deployer` with SSH keys       │
│    • Lock down UFW (allow ONLY ports 80, 443, WireGuard)    │
│    • Install Docker Engine & Tailscale daemon               │
├─────────────────────────────────────────────────────────────┤
│ 3. TRAFFIC SWAP & ZERO DOWNTIME CUTOVER:                    │
│    • Healthcheck PASS ➔ Point DNS / Floating IP to NEW VPS  │
│    • Terminate OLD VPS ➔ Zero leftovers, zero drift!        │
└─────────────────────────────────────────────────────────────┘

3. Praktyczne scenariusze inżynierskie w środowisku produkcyjnym

01. Referencyjny skrypt Cloud-Init do zamawiania zabezpieczonego VPS

Przekazywany w polu User Data podczas tworzenia serwera:

#cloud-config
users:
  - name: orlov
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5...
package_update: true
packages:
  - ufw
  - fail2ban
  - docker.io
runcmd:
  - ufw default deny incoming
  - ufw default allow outgoing
  - ufw allow 22/tcp
  - ufw allow 80/tcp
  - ufw allow 443/tcp
  - ufw --force enable
  - systemctl enable --now docker

4. Pułapki, typowe błędy i bezpieczeństwo

  • Próba zachowania stanu lokalnego na niezmienialnym serwerze: Jeśli aplikacja przechowuje pliki przesyłane przez użytkowników bezpośrednio na dysku lokalnym serwera, podczas wymiany instancji dane te zostaną utracone. Cały stan użytkownika musi być przechowywany w dedykowanych magazynach (S3, Cloudflare R2) lub bazach danych.
  • Błędy w skrypcie inicjalizacji: Jeśli w pliku cloud-init.yaml wystąpi błąd składniowy w kluczu SSH, serwer uruchomi się bez dostępu. Zawsze testuj konfiguracje inicjalizacyjne na tanich maszynach testowych.

5. Strategiczny wniosek dla inżyniera roku 2026

Infrastruktura niezmienialna uwalnia inżynierów od lęku przed awariami serwerów. Gdy każdy węzeł Twojego systemu można zniszczyć i podnieść ponownie w ciągu półtorej minuty jednym naciśnięciem klawisza, infrastruktura staje się przewidywalna, łatwa do skalowania i odporna na czynnik ludzki.

/ Najczęściej zadawane pytaniaSchema.org FAQPage

FAQ: Infrastruktura niezmienna i Cloud-Init

Stare podejście (Pets): każdy serwer ma własną unikalną nazwę, administrator latami ręcznie naprawia go, boi się restartu i płacze, gdy się zepsuje. Infrastruktura niezmienna (Cattle): wszystkie serwery to ponumerowane, identyczne kopie. Jeśli serwer zaczyna zawodzić, jest po prostu usuwany, a nowy tworzony w ciągu 60 sekund za pomocą automatycznego skryptu.
/ Linki wewnętrzne
Wszystkie hasła