40 lines
1.8 KiB
Docker
40 lines
1.8 KiB
Docker
# 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"]
|