Zpět na domů

Docker Compose pro servery IaC: nastavení

Přístup využívá Docker Compose pro IaC osobních serverů: skripty bootstrap a host-facts, idempotentní firewall nftables, WireGuard s cleanup. Nasazení přes rsync+ssh, aktualizace Renovate. Šablona repo pro DNS/VPN/monitorování.

IaC serverů: Docker Compose up bez Ansible
Advertisement 728x90

Správa osobních serverů s Docker Compose jako IaC

Z vlastní zkušenosti vím, že správa 1–5 serverů pomocí docker compose up zjednodušuje infrastrukturní kód bez Ansible. Tento přístup vyžaduje znalost docker-compose.yml, zkušenosti s ruční konfigurací a vůli k automatizaci. Klíčové komponenty jsou skript pro nasazení přes rsync a ssh, a ukládání tajemství v gitu (např. fnox nebo git-secret). Docker Compose zajišťuje idempotentnost, minimalizuje manuální úsilí.

Repozitář s šablonou demonstruje nastavení DNS/email (primární/sekundární), VPN (WireGuard), firewallu nftables, monitorování Netdata s Telegram upozorněními. Struktura zahrnuje dokumentaci a diagramy infrastruktury.

Počáteční nastavení a bootstrap

Pro nový server vytvořte bootstrap.sh — minimální skript pro instalaci Dockeru. Spusťte jej ručně nebo přes cloud-init. Příklad minimalizuje změny: aktualizace OS (do-release-upgrade) nebo konzolové nástroje (nvim-config) vyžadují vzácné úpravy.

Google AdInline article slot
# bootstrap.sh zjednodušený fragment
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
docker compose version

Skript se vyhýbá duplikaci ručních akcí, soustředí se na Docker.

Idempotentní firewall s nftables

Docker mění pravidla nftables v rodině ip/ip6. Ukládejte své v inet pro vyhnutí se konfliktům. bootstrap.sh vytvoří /etc/nftables.conf, kontejner aplikuje migrate.nft při up.

Rendering přes dockerize dosazuje proměnné (IP z host-facts.sh). Plná idempotentnost:

Google AdInline article slot
flush ruleset inet
flush chain ip filter DOCKER-USER
flush chain ip6 filter DOCKER-USER

table inet filter {
    chain prerouting-before-docker {
        type filter hook prerouting priority dstnat - 2;
        # Filtrace před Docker NAT
    }
}

Zpracování WireGuard a systémových e-mailů

WireGuard vytváří kernel-interface: odstraňujte při zastavení kontejneru.

finish() {
    wg-quick down "$INTERFACE"
}
trap finish EXIT
wg-quick up "$INTERFACE"
sleep inf

Systémové e-maily (systemd, unattended-upgrades) jsou doručovány přes bind-mount /var/spool/postfix v kontejneru postfix. Společná fronta hostitele a kontejneru.

host-facts.sh pro specifika serverů

Skript generuje env-proměnné pro docker-compose.yml: IP, UID/GID, interface.

Google AdInline article slot
uid() { getent passwd "$1" | cut -d: -f3; }
gid() { getent group "$1" | cut -d: -f3; }
metadata() { curl -s "http://169.254.169.254/metadata/v1$1"; }

set -euo pipefail

if test -z "${DEVEL:-}"; then
    WAN_IP="$(metadata /interfaces/public/0/ipv4/address)"
    UID_POSTFIX="$(uid postfix)"
    GID_POSTFIX="$(gid postfix)"
else
    WAN_IP=0.0.0.0
    UID_POSTFIX=1001
    GID_POSTFIX=1001
fi
for _var in WAN_IP UID_POSTFIX GID_POSTFIX; do eval "export $_var=\"$${_var}\""; done

Podpora DEVEL pro CI/lokální sestavení bez reálného hostitele.

Skript pro nasazení a HEALTHCHECK

Jednotný skript: rsync + docker compose up.

rsync --recursive --links --delete "./$proj/" "${destination}:.myserver"
ssh -t "${destination}" 'set -euo pipefail
    cd ~/.myserver
    docker compose up --build --detach --remove-orphans --wait'

--wait čeká na healthy HEALTHCHECK. Přidávejte je ručně v obrazech bez vestavěných. Rollback: git checkout @~ + redeploy.

  • Výhody ručního nasazení: Viditelnost logů, rychlé ladění pro 2–5 serverů.
  • Rezervace: Primární/sekundární minimalizuje downtime.

Aktualizace a CI-testování

unattended-upgrades pro hostitele. Pro kontejnery — Renovate: aktualizuje FROM, obrazy compose, apk-pakety, externí binárky (postgrey) přes regex-managery. Repo na GitHubu.

CI: mise pro lintry (shellcheck, hadolint), lokální sestavení bez tajemství.

Co je důležité

  • Docker Compose řeší idempotentnost, skripty — počáteční instalaci a host-specificitu.
  • Idempotentní firewall v inet, WireGuard s trap na EXIT.
  • host-facts.sh + dockerize pro dynamické proměnné.
  • Povinné HEALTHCHECK a --wait pro spolehlivé nasazení.
  • Renovate pro automatizaci aktualizací obrazů/paketů.

Tento přístup je vhodný pro migraci existujících serverů: přenášejte služby postupně. Dokumentace v repu zjednodušuje audit.

— Editorial Team

Advertisement 728x90

Číst dál