Rozdział 22 · Tworzenie stron internetowych z Python

Rozwijanie Flask-aplikacji

Serwer deweloperski jest Flask wygodny lokalnie, ale nie dla czegoś, co jest dostępne dla całego Internetu.

Rozdział 22.5 uruchamiał aplikację poleceniem python app.py, która wewnątrz wywołuje app.run(debug=True). To serwer deweloperski (development server) jest wbudowany w Flask, wygodny do eksploatacji lokalnej, ale nie przeznaczonej do rzeczywistej eksploatacji. Rozdział „Deploying to Production”

Środowisko rozwojoweWdrożenie robocze
Kto go używaWy sami, lokalniePrawdziwi użytkownicy przez Internet
SerwerWbudowany serwer Flask deweloperskiOddzielny serwer aplikacji (Rozdział 22.19)
debug=TrueWygodne – szczegółowe błędy, automatyczny restartNiebezpieczny – Może pokazać szczegóły i dane wewnętrznego kodu osobom z zewnątrz
Sekrety (SECRET_KEY itd.)Można użyć tymczasowej wartości do lokalnej pracyWymagana jest osobna, niepublikowana wartość
debug=True w otwartej aplikacji — prawdziwa luka
W trybie debugowania Flask może pokazać interaktywny debugger z pełnym dostępem do wykonania kodu bezpośrednio w przeglądarce, gdy błąd nie zostanie rozwiązany. To ogromna lokalna wygoda i poważne ryzyko, jeśli aplikacja jest dostępna dla kogoś innego — tryb debugowania powinien być wyłączony w każdym wdrożeniu, które nie jest dostępne tylko dla Ciebie.

Ścieżka żądań do aplikacji produkcyjnej

Przeglądarka
użytkownik w sieci
HTTPS/Odwrotne Pełnomocnictwo
Rozdział 22.10
Serwer aplikacji
Gunicorn, Uvicorn… (rozdział 22.19)
Flask-aplikacja
tę samą logikę co lokalnie
Baza danych
Oddzielne, niezawodne przechowywanie
Ten sam kod Flask — ale między przeglądarką a nim jest teraz kilka dodatkowych warstw

Konfiguracja za pomocą zmiennych środowiskowych

Szkic tego rozdziału już odczytuje ścieżkę do bazy danych oraz tajny klucz ze zmiennych środowisko, z wyraźną wartością wpadkową dla rozwoju lokalnego:

app.py
app.config["DATABASE"] = os.environ.get("TODO_APP_DB", str(DEFAULT_DB_PATH))
app.config["SECRET_KEY"] = os.environ.get(
    "TODO_APP_SECRET_KEY", "dev-only-secret-do-not-use-in-production"
)

Ten sam kod działa zarówno lokalnie (bez jednej konfiguracji), jak i w innym środowisku — W razie potrzeby wartości zmiennych środowiskowych są po prostu ustawiane inaczej, bez wpływu na sam kod.

Logi, wiele procesów, trwałość

Istnieją inne praktyczne kwestie związane z pracą w misji, które wykraczają poza tego rozdziału: logi (zapisana historia tego, co się dzieje, aby rozłożyć problemy po fakcie), start wiele procesów lub wątków jednocześnie do obsługi równoległych żądań, i fakt, że baza danych musi fizycznie znajdować się w niezawodnym, nie znikającym magazynie. Świadomie nie zamieniamy tego rozdziału w podręcznik użytkowania — gdzie ten temat jest kontynuowany, pokazuje rozdział 22.36.

Oficjalna dokumentacja: Flask — Deploying to Production.