feat: universal zero-downtime migration from legacy WireGuard/Go stack to operator-docker

This commit is contained in:
Zenaku 2026-09-06 23:32:10 +02:00
parent d83265843e
commit 32967b3658
3 changed files with 31 additions and 18 deletions

View file

@ -76,6 +76,8 @@ ok "Legacy WireGuard: $LEGACY_WG"
sep sep
info "Detecting legacy stack location..." info "Detecting legacy stack location..."
LEGACY_COMPOSE_DIR="" LEGACY_COMPOSE_DIR=""
# Search in known paths first
for DIR in "$LINUX_HOME/sp-env-wireguard" \ for DIR in "$LINUX_HOME/sp-env-wireguard" \
"$LINUX_HOME/sp-env-wireguard-ipv6" \ "$LINUX_HOME/sp-env-wireguard-ipv6" \
"$LINUX_HOME/wireguard" \ "$LINUX_HOME/wireguard" \
@ -88,6 +90,15 @@ for DIR in "$LINUX_HOME/sp-env-wireguard" \
break break
fi fi
done done
# Fallback: search entire home directory
if [ -z "$LEGACY_COMPOSE_DIR" ]; then
LEGACY_COMPOSE_DIR=$(find "$LINUX_HOME" -maxdepth 6 -name "docker-compose.yml" 2>/dev/null | \
while read -r f; do
grep -q "wireguard" "$f" 2>/dev/null && dirname "$f" && break
done | head -1)
fi
[ -z "$LEGACY_COMPOSE_DIR" ] && fail "Legacy docker-compose.yml not found." [ -z "$LEGACY_COMPOSE_DIR" ] && fail "Legacy docker-compose.yml not found."
ok "Legacy stack: $LEGACY_COMPOSE_DIR" ok "Legacy stack: $LEGACY_COMPOSE_DIR"
echo "$LEGACY_COMPOSE_DIR" > "$BACKUP_DIR/legacy_compose_dir" echo "$LEGACY_COMPOSE_DIR" > "$BACKUP_DIR/legacy_compose_dir"
@ -244,4 +255,4 @@ echo " Once SP authorizes access, run:"
echo " bash 01-migrate-user.sh" echo " bash 01-migrate-user.sh"
echo "" echo ""
echo " Log: cat $LOG" echo " Log: cat $LOG"
echo "=========================================" echo "========================================="

View file

@ -9,18 +9,6 @@ if [ "$EUID" -eq 0 ]; then
exit 1 exit 1
fi fi
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; RESET='\033[0m'
#!/bin/bash -eu
# =============================================================================
# 01-migrate-user.sh — Run as Linux user (not root)
# Installs operator-docker and prepares for peer migration
# Auto-rollback: restores nginx, certs and legacy stack on failure
# =============================================================================
if [ "$EUID" -eq 0 ]; then
echo "[X] Run as your Linux user, not root"
exit 1
fi
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; RESET='\033[0m' RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; RESET='\033[0m'
BACKUP_DIR="$HOME/.wg-migration" BACKUP_DIR="$HOME/.wg-migration"
@ -79,7 +67,14 @@ echo "[START-01] $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG"
sep sep
info "Checking prerequisites..." info "Checking prerequisites..."
docker info &>/dev/null || fail "No Docker access. Run: sudo usermod -aG docker $USER && newgrp docker" if ! docker info &>/dev/null; then
if groups | grep -q docker; then
fail "Docker socket not accessible. Try logging out and back in."
else
warn "No Docker access — re-launching with docker group..."
exec newgrp docker "$0" "$@"
fi
fi
[ -f "$BACKUP_DIR/private_key" ] || fail "No backup found. Run: sudo bash 00-migrate-root.sh" [ -f "$BACKUP_DIR/private_key" ] || fail "No backup found. Run: sudo bash 00-migrate-root.sh"
[ -f "$BACKUP_DIR/wg0-legacy.conf" ] || fail "No peer backup found. Run: sudo bash 00-migrate-root.sh" [ -f "$BACKUP_DIR/wg0-legacy.conf" ] || fail "No peer backup found. Run: sudo bash 00-migrate-root.sh"
@ -246,4 +241,4 @@ echo "========================================="
echo " Installation complete" echo " Installation complete"
echo " Next: bash 02-migrate-peers.sh" echo " Next: bash 02-migrate-peers.sh"
echo "=========================================" echo "========================================="
echo "" echo ""

View file

@ -64,7 +64,14 @@ echo "[START-02] $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG"
sep sep
info "Checking prerequisites..." info "Checking prerequisites..."
docker info &>/dev/null || fail "No Docker access. Run: sudo usermod -aG docker $USER && newgrp docker" if ! docker info &>/dev/null; then
if groups | grep -q docker; then
fail "Docker socket not accessible. Try logging out and back in."
else
warn "No Docker access — re-launching with docker group..."
exec newgrp docker "$0" "$@"
fi
fi
[ -f "$BACKUP_DIR/private_key" ] || fail "No private key backup found." [ -f "$BACKUP_DIR/private_key" ] || fail "No private key backup found."
[ -f "$BACKUP_DIR/wg0-legacy.conf" ] || fail "No peer backup found." [ -f "$BACKUP_DIR/wg0-legacy.conf" ] || fail "No peer backup found."
@ -142,7 +149,7 @@ echo "[WIREGUARD-START] $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG"
cd "$OPERATOR_DIR" cd "$OPERATOR_DIR"
sudo modprobe ip6table_filter 2>/dev/null || true sudo modprobe ip6table_filter 2>/dev/null || true
docker compose up -d wireguard docker compose up -d --force-recreate wireguard
info "Waiting for startup..." info "Waiting for startup..."
sleep 8 sleep 8
@ -267,4 +274,4 @@ echo " Existing users reconnect automatically"
echo " without new configuration." echo " without new configuration."
echo "" echo ""
echo " Log: cat $LOG" echo " Log: cat $LOG"
echo "=========================================" echo "========================================="