NetSendo
Platform Updates

NetSendo v2.11.1: koniec z błędami 502 po aktualizacji Dockera

NetSendo Team5 min czytania

Uruchamiasz docker compose pull i docker compose up -d, nowe kontenery startują i wszystko wygląda dobrze. Potem otwierasz panel i widzisz 502 Bad Gateway. Sama aktualizacja się udała. Problem polegał na tym, że nginx nadal wysyłał żądania pod adres, którego kontener aplikacji już nie miał.

W dniu wdrożenia aktualizacji do 2.11.0 dotyczyło to 7 z 16 hostowanych instalacji NetSendo. NetSendo v2.11.1 usuwa przyczynę problemu. Serwer WWW uruchamia się teraz ponownie automatycznie za każdym razem, gdy Docker Compose odtwarza kontener aplikacji, więc po aktualizacji nie musisz już restartować go ręcznie.

TL;DR: NetSendo v2.11.1 dodaje restart: true do zależności serwera WWW od aplikacji w docker-compose.yml. W Docker Compose 2.17 lub nowszym nginx restartuje się przy każdym odtworzeniu kontenera aplikacji, więc po aktualizacjach nie pojawiają się błędy 502. Jeśli masz własny plik compose, po każdej aktualizacji uruchom docker compose restart webserver. podman-compose akceptuje to ustawienie, ale je ignoruje.

🚀 Co nowego w v2.11.1

Przyczyna: nginx ustala adres aplikacji tylko raz

Serwer WWW NetSendo przekazuje żądania PHP do kontenera aplikacji dyrektywą w rodzaju fastcgi_pass app:9000. nginx zamienia nazwę hosta app na adres IP tylko raz, przy starcie, i używa tego adresu aż do restartu.

Gdy uruchamiasz docker compose up -d z nowym obrazem, Compose odtwarza kontener aplikacji, a nowy kontener często dostaje inny adres IP w sieci Dockera. nginx ma nadal stary adres, więc każde żądanie kończy się błędem:

connect() failed (111) while connecting to upstream

To tak, jakby kurier raz zapisał Twój adres i nigdy go nie sprawdzał. Przeprowadzasz się, a wszystkie paczki nadal trafiają pod stary dom.

Poprawka: serwer WWW restartuje się razem z aplikacją

Rozszerzona składnia depends_on w Docker Compose ma opcję restart. Gdy ustawisz ją na true, Compose restartuje usługę zależną (serwer WWW) za każdym razem, gdy odtwarza lub restartuje jej zależność (aplikację). Odpowiedni fragment wygląda tak:

services:
  webserver:
    # ...
    depends_on:
      app:
        condition: service_started
        restart: true

Po restarcie nginx ponownie sprawdza adres app i dostaje nowy, więc żądania od razu trafiają do nowego kontenera.

🔄

Automatyczny restart serwera WWW

nginx restartuje się, gdy Compose odtwarza kontener aplikacji.

🛡️

Koniec z nieaktualnym upstreamem

nginx nie może już wysyłać ruchu pod stary adres IP kontenera.

🐳

Wbudowane w Docker Compose

Standardowa opcja Compose (2.17+). Bez dodatkowych skryptów i sidecarów.

ℹ️ Uwaga: Ta opcja wymaga Docker Compose 2.17 lub nowszego. podman-compose ją akceptuje, ale nic z nią nie robi, więc użytkownicy Podmana nadal muszą restartować serwer WWW ręcznie.

💼 Komu pomaga ta poprawka

  • ✅ Brak błędów 502 po rutynowych aktualizacjach
  • ✅ Brak ręcznego kroku po docker compose up -d
  • ✅ Bezpieczniejsze aktualizacje automatyczne i planowane
  • ✅ Mniej zgłoszeń typu „strona nie działa”
🛒

E-commerce: formularze i śledzenie działają dalej

Błąd 502 po aktualizacji oznacza, że formularze zapisu, strony preferencji i linki śledzące przestają odpowiadać. Jeśli zdarzy się to w trakcie wyprzedaży, tracisz:

  • nowych subskrybentów z zapisów przy kasie,
  • dane o kliknięciach z maili o porzuconym koszyku,
  • prośby o wypisanie, co może stanowić ryzyko prawne.
🚀

SaaS: onboarding bez przerw

Jeśli Twoja aplikacja wywołuje API NetSendo przy rejestracji użytkownika, nieaktualny upstream w nginx sprawia, że te wywołania po cichu się nie udają. Maile powitalne nie wychodzą, a nowi użytkownicy mają gorsze pierwsze wrażenie. W v2.11.1 API jest dostępne, gdy tylko nowy kontener wystartuje.

🏢

Agencje: aktualizacja wielu instalacji naraz

Jeśli prowadzisz NetSendo dla wielu klientów, awaria w 7 na 16 przypadków oznacza sprawdzanie i restartowanie serwerów jeden po drugim. Dzięki automatycznemu restartowi serwera WWW możesz aktualizować wszystkie instalacje skryptem, bez tej ręcznej rundy.

🛠️ Krok po kroku: aktualizacja do v2.11.1

  1. Sprawdź wersję Compose

    Uruchom docker compose version. Opcja restart: true działa od wersji 2.17. Stary samodzielny program docker-compose (v1) jej nie obsługuje.

  2. Zaktualizuj plik compose

    Jeśli używasz standardowego docker-compose.yml z repozytorium, pobierz wersję z v2.11.1. Jeśli masz własny, zmodyfikowany plik, dodaj restart: true w sekcji depends_on → app serwera WWW, jak w przykładzie powyżej.

  3. Pobierz obrazy i odtwórz kontenery
    docker compose pull
    docker compose up -d
  4. Sprawdź działanie

    Uruchom docker compose ps i sprawdź, czy czas działania serwera WWW zgadza się z czasem działania aplikacji. Potem otwórz panel. Jeśli nadal widzisz błędy 502, poszukaj komunikatu „connect() failed (111)” w docker compose logs webserver.

  5. Rozwiązanie awaryjne dla własnych konfiguracji i Podmana

    Jeśli nie możesz użyć nowej opcji, po każdej aktualizacji zrestartuj serwer WWW, zgodnie z README → Updates:

    docker compose restart webserver
⚠️ Częsty błąd: Samo przeniesienie nowego tagu obrazu do własnego pliku compose nie usunie problemu. Poprawka jest w konfiguracji compose, a nie w obrazie, więc potrzebujesz też linii restart: true.

🎯 Wskazówki eksperckie

1
Sprawdzaj stronę po każdej aktualizacji

Zakończ skrypt aktualizacji poleceniem w rodzaju curl -fsS https://twoja-domena/ > /dev/null. Jeśli się nie powiedzie, cały skrypt zwróci błąd, więc o nieudanej aktualizacji dowiesz się od razu, a nie od użytkowników.

2
Trzymaj własny plik compose blisko wersji z repozytorium

Zamiast edytować główny plik, umieść lokalne zmiany w docker-compose.override.yml. Wtedy poprawki takie jak ta dotrą do Ciebie, gdy pobierzesz główny plik.

3
Podman: dodaj restart do skryptu

Ponieważ podman-compose ignoruje restart: true, dodaj restart serwera WWW na końcu skryptu aktualizacji.

4
Aktualizuj przy małym ruchu

Nawet z tą poprawką aplikacja jest przez chwilę niedostępna, gdy kontener jest odtwarzany. Planuj aktualizacje poza godzinami wysyłki kampanii.

✅ Podsumowanie

v2.11.1 to małe wydanie, które usuwa realny problem. Ponieważ nginx ustalał adres aplikacji tylko raz, odtworzenie kontenera aplikacji po aktualizacji mogło sprawić, że serwer WWW wysyłał ruch pod adres, który już nie istniał. Dzięki restart: true w docker-compose.yml Docker Compose 2.17+ restartuje teraz serwer WWW razem z aplikacją.

Co zrobić:

  • Upewnij się, że masz Docker Compose 2.17 lub nowszy.
  • Użyj zaktualizowanego pliku compose albo dodaj restart: true do własnego.
  • Jeśli masz własny plik compose lub używasz Podmana, po każdej aktualizacji uruchom docker compose restart webserver.

Szczegóły konfiguracji znajdziesz w dokumentacji. Aby połączyć NetSendo z innymi narzędziami, zajrzyj do integracji.

Gotowy na aktualizację?

Zaktualizuj NetSendo do v2.11.1, aby aktualizacje przebiegały bez błędów 502.

#docker#docker-compose#nginx#bugfix#self-hosted#updates
Udostępnij