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.comniedostępne- frontend ładuje się ale i18n wisi (
auth.login_to_you_accountjako klucz zamiast tekstu) /api/i18n/langsw 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łęduWeryfikacja:
ssh root@94.23.26.113 "docker ps --format '{{.Names}}: {{.Status}}' | grep nginx"
# Oczekiwane: nginx-proxy: Up X seconds | nginx-proxy-letsencrypt: Up X secondsKrok 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 razKrok 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 → 200Dlaczego 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.conf → DNS=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ę