Playbook: bms-1 Post-Restart Recovery (w3 + w4)

Created: 2026-07-06 Applies to: bms-1 (94.23.26.113) — Pinbox24 production Issue: DNS + kontenery bez restart: unless-stopped → ręczny start po każdym restarcie serwera


Trigger

bms-1 zrestartował się (planowo lub awaryjnie) i:

  • w4.pinbox24.com / w3.pinbox24.com niedostępne
  • frontend ładuje się ale i18n wisi (auth.login_to_you_account jako klucz zamiast tekstu)
  • /api/i18n/langs w zakładce Network → (pending) / timeout

Diagnoza wstępna

# Z Windows dev machine
ssh -o ConnectTimeout=10 -o BatchMode=yes root@94.23.26.113 'echo alive; docker ps --format "{{.Names}}: {{.Status}}" | sort'

Jeśli bms-1 odpowiada ale lista kontenerów jest krótka (tylko v31-prod, v41-prod, cadvaisor, portainer) → serwer się zrestartował, kontenery trzeba uruchomić ręcznie.


Krok 1 — Sprawdź DNS

ssh root@94.23.26.113 'nslookup kr40258-001.dbaas.ovh.net 2>&1 | head -5'

Jeśli DNS nie działa (timeout / no servers could be reached):

# Sprawdź resolved.conf
ssh root@94.23.26.113 'resolvectl status eno1 | grep DNS'
 
# Ustaw 1.1.1.1 jeśli brakuje (powinno być permanentne od 2026-07-06)
ssh root@94.23.26.113 'resolvectl dns eno1 1.1.1.1 8.8.8.8 && systemctl restart systemd-resolved'

Uwaga: Od 2026-07-06 Tailscale jest ODINSTALOWANY z bms-1. DNS powinien być zawsze OK (1.1.1.1/8.8.8.8 w /etc/systemd/resolved.conf). Jeśli DNS znowu nie działa, sprawdź czy ktoś nie zainstalował Tailscale ponownie.


Krok 2 — Uruchom nginx-proxy

nginx-proxy musi być pierwsza — bez niej żaden ruch nie dochodzi do kontenerów.

ssh root@94.23.26.113 'docker start nginx-proxy nginx-proxy-letsencrypt'
# Oczekiwany wynik: oba nazwy wypisane bez błędu

Weryfikacja:

ssh root@94.23.26.113 "docker ps --format '{{.Names}}: {{.Status}}' | grep nginx"
# Oczekiwane: nginx-proxy: Up X seconds  |  nginx-proxy-letsencrypt: Up X seconds

Krok 3 — Uruchom stos w4

ssh root@94.23.26.113 'docker start v42-prod v42-notify-prod s3-v42-prod s3-v2-v42-prod mailgun-v42-prod pdf-gen-v42-prod git-deploy-v42-prod wkhtml-v42-prod'

Krok 4 — Uruchom stos w3

ssh root@94.23.26.113 'docker start v32-prod v32-prod-socket v32-prod-reso s3-v32-prod s3-v32-prod-renamed s3-v32-prod-socket s3-v32-prod-reso cron-v32-prod cron-v32-prod-socket cron-v32-prod-reso'

Krok 5 — Sprawdź PM2 i uruchom jeśli brakuje procesów

ssh root@94.23.26.113 'docker exec v42-prod pm2 list'

Jeśli lista jest pusta (No process found):

ssh root@94.23.26.113 'docker exec v42-prod pm2 start /app/ecosystem.config.js'

Odczekaj ~10 sekund i sprawdź logi:

ssh root@94.23.26.113 'docker exec v42-prod tail -15 /var/log/v42-prod/pm2/pm2_v42-prod_production_out.log'

Szukaj: Mongoose connected + Redis is connected — oba muszą się pojawić.

Jeśli Redis ciągle failuje po poprawce DNS: PM2 startował gdy DNS był martwy i zapamiętał błąd. Fix:

ssh root@94.23.26.113 'docker exec v42-prod pm2 restart all'
# Odczekaj 8s, sprawdź logi jeszcze raz

Krok 6 — Weryfikacja końcowa

# Z Windows dev machine
$urls = @(
    "https://w4.pinbox24.com",
    "https://api.w4.pinbox24.com/api/i18n/langs",
    "https://w3.pinbox24.com",
    "https://api.w3.pinbox24.com/api/i18n/langs"
)
foreach ($url in $urls) {
    try {
        $r = Invoke-WebRequest $url -TimeoutSec 15 -UseBasicParsing -ErrorAction Stop
        Write-Host "$url$($r.StatusCode)"
    } catch {
        Write-Host "$url → FAIL: $($_.Exception.Message)"
    }
}
# Oczekiwane: wszystkie → 200

Dlaczego kontenery nie startują automatycznie?

Większość kontenerów na bms-1 ma politykę restart: no (pusta = brak polityki). Tylko v31-prod i v41-prod mają restart: always — dlatego frontendy wstają ale API nie.

Nie zmieniaj na restart: unless-stopped — w przeszłości powodowało to pętle restartów gdy backend crashował z powodu błędnych credentiali (np. REDIS_PASSWORD). Ręczny start po restarcie jest bezpieczniejszy niż automatyczny crash-loop.


Dlaczego DNS był martwy?

Tailscale instaluje się jako manager /etc/resolv.conf i ustawia DNS na 100.100.100.100 (własny resolver). Po restarcie serwera gdy Tailscale nie działa — DNS jest martwy dla całego serwera i wszystkich kontenerów.

Fix trwały (2026-07-06): Tailscale odinstalowany z bms-1. DNS permanentnie przez /etc/systemd/resolved.confDNS=1.1.1.1 8.8.8.8.


Jeśli coś nadal nie działa

  • 504 na API → sprawdź pinbox24-w3-w4-outage-diagnosis.md (MongoDB/RabbitMQ)
  • 502 na API → nginx-proxy nie widzi kontenera → sprawdź Docker network (test-net)
  • PM2 restart loop → sprawdź pinbox24-bms1-redis-wrongpass.md
  • Certyfikat SSL niedostępny → nginx-proxy-letsencrypt potrzebuje ~2 min na regenerację