Tak, gdy baza danych ma stabilną sieć zewnętrzną, oddzielne bazy danych i użytkowników, jasno określoną odpowiedzialność za cykl życia oraz kopie zapasowe niezależne od któregokolwiek projektu aplikacji.
Decyzja ma znaczenie, gdy dwie aplikacje hostowane samodzielnie powinny ponownie wykorzystać jeden kontener PostgreSQL lub MariaDB, aby oszczędzić pamięć. Dwa konkurencyjne warianty to współdzielona usługa z izolacją dzierżawców oraz zależne od siebie aktualizacje, dane uwierzytelniające, ponowne uruchamianie i rywalizacja o zasoby. Zacznij od zapisanej konfiguracji i danych możliwych do usunięcia, obserwuj jednorazowo tylko jedną gałąź i przerwij, jeśli test zwiększa ryzyko utraty danych, uprawnień lub dostępności.
Zdefiniuj warunki decyzji dotyczącej współdzielonej usługi bazy danych między projektami Compose
Zapisz stan środowiska przed wprowadzeniem zmian: wersje oprogramowania i oprogramowania układowego, tożsamości urządzeń, ścieżkę montowania lub sieciową, wolne miejsce, uprawnienia oraz obserwowany objaw. Punkt odniesienia musi zachować wystarczająco dużo szczegółów, aby odtworzyć sytuację, w której dwie aplikacje hostowane samodzielnie powinny ponownie wykorzystać jeden kontener PostgreSQL lub MariaDB, aby oszczędzić pamięć.
Pierwszym kandydatem jest współdzielona usługa z izolacją dzierżawców. Drugim są zależne od siebie aktualizacje, dane uwierzytelniające, ponowne uruchamianie i rywalizacja o zasoby. Obecne zewnętrzne sieci Compose definiują mechanizm lub granicę polecenia używaną w teście; nie zastępują jednak obserwacji z tego konkretnego serwera domowego.
Zapisz warunek akceptacji i warunek przerwania przed uruchomieniem testu rozstrzygającego. Wynik pozytywny musi zmienić dowody przewidywane przez jedną z gałęzi, pozostawiając niepowiązane usługi bez zmian; wynik negatywny musi przywrócić system do zapisanego stanu, zamiast uruchamiać łańcuch spekulatywnych poprawek.
Przetestuj twierdzenie bez obniżania pierwotnego wymagania
Użyj następującego testu rozstrzygającego: połącz każdy projekt przez zewnętrzną sieć, utwórz użytkowników z minimalnymi uprawnieniami, a następnie zatrzymaj i zaktualizuj jedną aplikację, gdy druga działa. Zachowaj stałe obciążenie, klienta, ścieżkę, zestaw plików i czas, aby wynik można było przypisać zmienionej zmiennej.
Użyj cyklu życia sieci Compose, aby wybrać pole, które rzeczywiście może rozdzielić te gałęzie, a następnie zapisz jego znacznik czasu, kod zakończenia, treść błędu, tożsamość urządzenia lub migawki, opóźnienie, liczbę przesłanych bajtów, uprawnienia i stan odzyskiwania. Pomyślne zakończenie polecenia nie wystarczy, gdy testowane twierdzenie dotyczy tożsamości, trwałości lub stanu aplikacji.
Powtórz test raz po ponownym uruchomieniu, ponownym połączeniu, ponownym zamontowaniu lub opróżnieniu pamięci podręcznej, jeśli takie zdarzenie należy do pierwotnego warunku. Jeśli pierwszy przebieg jest destrukcyjny lub nie można przywrócić środowiska, przerwij i odtwórz test na kopii przeznaczonej do usunięcia.
networks:
database-net:
external: true
# Cykl życia bazy danych należy do oddzielnego projektu infrastruktury
Interpretuj wyniki pozytywne, negatywne i wyjątkowe
WYNIK POZYTYWNY: każda aplikacja ma dostęp wyłącznie do własnego schematu lub bazy danych, a jeden projekt może zostać ponownie wdrożony bez odtwarzania współdzielonej bazy danych. Zapisz dokładną wersję, tożsamość i obciążenie, dla których uzyskano wynik pozytywny, aby wniosek pozostał warunkowy, a nie stał się uniwersalnym twierdzeniem.
WYNIK NEGATYWNY: polecenie Compose down usuwa współdzielony stan, jeden użytkownik może odczytywać inną bazę danych albo migracje i skoki zużycia zasobów wpływają na oba systemy. Wynik negatywny nie dowodzi automatycznie przeciwnej gałęzi, gdy na oba systemy mogą wpływać sieć, pamięć, uprawnienia lub spójność źródła; przed eskalacją odizoluj te wspólne zależności.
WYNIK WYJĄTKOWY LUB NIEJEDNOZNACZNY: rozdziel bazy danych albo wdroż dedykowany projekt Compose infrastruktury, który będzie właścicielem współdzielonej usługi. Zachowaj dzienniki i nie uruchamiaj poleceń naprawczych, prune, destroy, repartition ani rekurencyjnych poleceń zmiany właściciela, dopóki nie będzie dostępna możliwa do odzyskania kopia.
Potwierdź decyzję przy pierwotnym obciążeniu
Zastosuj działanie odpowiadające zaobserwowanej gałęzi, a następnie powtórz pierwotny warunek, a nie jego uproszczony zamiennik. Decyzja jest prawidłowa tylko wtedy, gdy każda aplikacja ma dostęp wyłącznie do własnego schematu lub bazy danych, a jeden projekt może zostać ponownie wdrożony bez odtwarzania współdzielonej bazy danych przez dwa cykle lub podczas odpowiedniego ponownego uruchomienia, uśpienia, przerwania albo przejścia obciążenia.
Użyj dedykowanych sieci Docker, aby sprawdzić najbliższy zależny przepływ pracy, ale zachowaj pierwotny wyzwalacz bez zmian. Niepowiązane zestawy danych, udziały, kontenery, użytkownicy i punkty odzyskiwania muszą zachować wcześniejszy dostęp i czas działania.
Granica przerwania jest jasno określona: jeśli polecenie Compose down usuwa współdzielony stan, jeden użytkownik może odczytywać inną bazę danych albo migracje i skoki zużycia zasobów wpływają na oba systemy, wróć do ostatniej zweryfikowanej konfiguracji, zachowaj dowody i eskaluj do głębszego testu platformy lub sprzętu tylko wtedy, gdy dana gałąź daje się powtórzyć.
Po uzyskaniu docelowego wyniku porównaj go z zasadami ponownego uruchamiania usług, aby poprawka nie przeniosła ryzyka do sąsiedniej usługi. Pomyślny test docelowy z nową awarią kopii zapasowej, tożsamości, limitu czasu lub dostępności nadal oznacza nieudaną zmianę.
FAQ
W przypadku współdzielonej usługi bazy danych między projektami Compose pozostałe wyszukiwania zwykle dotyczą tego, czy depends_on może zarządzać bazą danych w innym projekcie, czy obie aplikacje powinny współdzielić jednego użytkownika bazy danych oraz kto wykonuje kopie zapasowe i aktualizacje bazy danych. Poniższe odpowiedzi oddzielają te przypadki brzegowe od głównej decyzji.
Granica akceptacji pozostaje niezmieniona: każda aplikacja ma dostęp wyłącznie do własnego schematu lub bazy danych, a jeden projekt może zostać ponownie wdrożony bez odtwarzania współdzielonej bazy danych. Jeśli kolejny warunek zmienia system plików, tożsamość, ścieżkę sieciową lub wersję aplikacji, powtórz tylko test rozstrzygający dotyczący tej zmiany.
Przerwij rozszerzanie eksperymentu, gdy polecenie Compose down usuwa współdzielony stan, jeden użytkownik może odczytywać inną bazę danych albo migracje i skoki zużycia zasobów wpływają na oba systemy. W takiej sytuacji rozdziel bazy danych albo wdroż dedykowany projekt Compose infrastruktury, który będzie właścicielem współdzielonej usługi; zachowaj dowody przed eskalacją do właściciela platformy, pamięci masowej lub sprzętu.
Czy depends_on może zarządzać bazą danych w innym projekcie?
Nie bezpośrednio między niezależnymi modelami projektu; zamiast tego użyj kontroli stanu i ponawiania prób po stronie aplikacji.
Czy obie aplikacje powinny współdzielić jednego użytkownika bazy danych?
Nie. Użyj oddzielnych danych uwierzytelniających i uprawnień zgodnych z zasadą minimalnych uprawnień, aby zapewnić audyt i ograniczenie skutków awarii.
Kto wykonuje kopie zapasowe i aktualizacje bazy danych?
Dedykowany właściciel infrastruktury lub projekt, a nie aplikacja, która akurat uruchomi się jako pierwsza.
W przypadku współdzielonej usługi bazy danych między projektami Compose praktyczna odpowiedź pozostaje warunkowa: każda aplikacja ma dostęp wyłącznie do własnego schematu lub bazy danych, a jeden projekt może zostać ponownie wdrożony bez odtwarzania współdzielonej bazy danych. Gdy polecenie Compose down usuwa współdzielony stan, jeden użytkownik może odczytywać inną bazę danych albo migracje i skoki zużycia zasobów wpływają na oba systemy, rozdziel bazy danych albo wdroż dedykowany projekt Compose infrastruktury, który będzie właścicielem współdzielonej usługi; częściowy sukces, który nie przetrwa pierwotnego obciążenia, nie jest zgodnością.
Wsparcie i wskazówki
Więcej do przeczytania

Czy można wymienić hałaśliwy wentylator w mini-PC bez zmiany kontroli temperatury?
Tak - o ile zamiennik jest zgodny z interfejsem elektrycznym, przepływem powietrza i sygnałami sprzężenia zwrotnego; samo dopasowanie złącza nie zapewnia zachowania kontroli termicznej.

Czy serwer domowy może wznowić działanie usług w kolejności zależności po przywróceniu zasilania przez UPS?
Tak - używaj jawnych zależności uruchamiania i kontroli gotowości; same zasady ponownego uruchamiania nie gwarantują, że usługi staną się użyteczne we właściwej kolejności.

Czy można używać funkcji Wake-on-LAN po całkowitym odcięciu zasilania?
Czasami funkcja WOL wymaga zasilania w trybie czuwania oraz odpowiedniego stanu oprogramowania układowego/karty sieciowej, aby odzyskać działanie po przywróceniu zasilania sieciowego; nie może wybudzić...

