From dcebf21e033e8023334bd48acfb5506527143436 Mon Sep 17 00:00:00 2001 From: Deploy Bot Date: Thu, 30 Jul 2026 00:30:18 +0100 Subject: [PATCH] fix: restart-safe entrypoints, remove obsolete compose version - Add wg0 interface cleanup before startup (prevents 'already exists' crash) - Always regenerate wg0.conf to pick up key changes - Remove obsolete 'version' from docker-compose files - Fix read-only /proc/sys writes (host-level ip_forward already set) --- client/entrypoint.sh | 13 +++++++++++-- docker-compose.client.yml | 1 - docker-compose.server.yml | 1 - server/entrypoint.sh | 14 +++++++++++--- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/client/entrypoint.sh b/client/entrypoint.sh index e202b73..5604735 100644 --- a/client/entrypoint.sh +++ b/client/entrypoint.sh @@ -48,9 +48,10 @@ generate_keys() { # ── Создание конфигурации WireGuard ──────────────────────────────────────── create_wg_config() { + # Всегда пересоздаём конфиг — ключи или эндпоинт могли измениться if [[ -f "$WG_CONF" ]]; then - log "INFO" "Конфигурация ${WG_CONF} уже существует, пропускаем создание" - return 0 + log "INFO" "Обновление конфигурации ${WG_CONF}..." + rm -f "$WG_CONF" fi mkdir -p "$(dirname "$WG_CONF")" @@ -78,6 +79,14 @@ WGCONF # ── Запуск WireGuard ─────────────────────────────────────────────────────── start_wireguard() { log "INFO" "Запуск WireGuard интерфейса wg0..." + + # Удаляем старый интерфейс если остался от предыдущего запуска + if ip link show wg0 &>/dev/null; then + log "INFO" "Удаление старого интерфейса wg0..." + ip link del wg0 2>/dev/null || true + sleep 1 + fi + wg-quick up wg0 log "INFO" "WireGuard интерфейс wg0 запущен" log "INFO" "Публичный ключ клиента: ${CLIENT_PUBLIC_KEY}" diff --git a/docker-compose.client.yml b/docker-compose.client.yml index d196f9d..ecd3d10 100644 --- a/docker-compose.client.yml +++ b/docker-compose.client.yml @@ -2,7 +2,6 @@ # docker-compose.client.yml — Клиент (домашний сервер / Raspberry Pi за NAT) # Запуск: docker compose -f docker-compose.client.yml up -d # ============================================================================= -version: "3.8" services: wireguard-client: diff --git a/docker-compose.server.yml b/docker-compose.server.yml index 124329c..9093d63 100644 --- a/docker-compose.server.yml +++ b/docker-compose.server.yml @@ -2,7 +2,6 @@ # docker-compose.server.yml — VPS (сервер с публичным IP) # Запуск: docker compose -f docker-compose.server.yml up -d # ============================================================================= -version: "3.8" services: wireguard-server: diff --git a/server/entrypoint.sh b/server/entrypoint.sh index a940c30..2a83da5 100644 --- a/server/entrypoint.sh +++ b/server/entrypoint.sh @@ -55,9 +55,10 @@ generate_keys() { # ── Создание конфигурации WireGuard ──────────────────────────────────────── create_wg_config() { + # Всегда пересоздаём конфиг — ключи или порты могли измениться if [[ -f "$WG_CONF" ]]; then - log "INFO" "Конфигурация ${WG_CONF} уже существует, пропускаем создание" - return 0 + log "INFO" "Обновление конфигурации ${WG_CONF}..." + rm -f "$WG_CONF" fi if [[ -z "${CLIENT_PUBLIC_KEY:-}" ]]; then @@ -106,10 +107,17 @@ WGCONF start_wireguard() { log "INFO" "Запуск WireGuard интерфейса wg0..." - # Включаем IP-форвардинг + # Включаем IP-форвардинг (может быть read-only в Docker, хост уже настроен) echo 1 > /proc/sys/net/ipv4/ip_forward 2>/dev/null || true echo 1 > /proc/sys/net/ipv6/conf/all/forwarding 2>/dev/null || true + # Удаляем старый интерфейс если остался от предыдущего запуска + if ip link show wg0 &>/dev/null; then + log "INFO" "Удаление старого интерфейса wg0..." + ip link del wg0 2>/dev/null || true + sleep 1 + fi + wg-quick up wg0 log "INFO" "WireGuard интерфейс wg0 запущен"