# Der Tunnel, und sonst nichts. # # Ein eigenes, winziges Abbild ist der ganze Sinn dieses Containers. wg0 lebte # bisher im Container des Provisionierungs-Arbeiters, also in `clupilot-app`, # und das wird bei fast jeder Freigabe neu gebaut. Ein neu gebauter Container # bekommt eine neue Adresse im Compose-Netz, die Weiterleitung für den # WireGuard-Port wird neu geschrieben, und jede bestehende Sitzung reisst ab. # Der Tunnel hing damit am Veröffentlichungstakt der Anwendung — und daran, dass # ein Warteschlangen-Arbeiter nicht abstürzt. # # Dieses Abbild aendert sich fast nie. Damit fasst `docker compose up -d` den # Container bei einem gewoehnlichen Update nicht mehr an, und der Tunnel steht # einfach. # # Alpine mit fester Nebenversion, nicht `alpine:latest`: ein Abbild, das sich # unter der Hand erneuert, ist genau das, was hier nicht passieren soll. FROM alpine:3.20 # wireguard-tools bringt `wg` und `wg-quick`. wg-quick ist ein Bash-Skript und # ruft `ip` auf — beides muss mit. iptables ist nicht für uns, sondern für den # Fall, dass eine wg0.conf eines Tages PostUp-Regeln mitbringt: dann scheitert # der Start sonst an einem fehlenden Programm, und das faellt erst im Betrieb auf. RUN apk add --no-cache \ wireguard-tools \ bash \ iproute2 \ iptables COPY entrypoint.sh /usr/local/bin/vpn-hub RUN chmod +x /usr/local/bin/vpn-hub # Gesund, wenn wg0 steht — oder wenn es (noch) gar keine Konfiguration gibt. # Eine Installation ohne eingerichteten Tunnel ist kein Fehlerzustand, und ein # dauerhaft „unhealthy" gemeldeter Container waere eine Warnung, die niemand # mehr liest. HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD sh -c '[ -f /etc/wireguard/wg0.conf ] || exit 0; wg show wg0 >/dev/null 2>&1' ENTRYPOINT ["/usr/local/bin/vpn-hub"]