feat: universal zero-downtime migration from legacy WireGuard/Go stack to operator-docker
This commit is contained in:
parent
d83265843e
commit
32967b3658
3 changed files with 31 additions and 18 deletions
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue