Deployment Django

Deployment to proces przenoszenia aplikacji z środowiska developerskiego do środowiska produkcyjnego, tak aby była dostępna dla użytkowników. Wymaga przygotowania aplikacji, konfiguracji środowiska, bazy danych i serwera.


1. Przygotowanie aplikacji do wdrożenia

1.1. DEBUG

  • W środowisku produkcyjnym należy ustawić DEBUG = False w settings.py.
  • Gdy DEBUG = True, Django wyświetla szczegółowe błędy, które mogą ujawniać wrażliwe informacje.

1.2. SECRET_KEY

  • SECRET_KEY jest kluczem kryptograficznym używanym do podpisywania ciasteczek, tokenów itp.
  • Nie należy umieszczać go w repozytorium.
  • W produkcji najlepiej używać zmiennych środowiskowych:

1.3. ALLOWED_HOSTS

  • Lista hostów, które mogą obsługiwać aplikację Django.
  • W środowisku produkcyjnym musi zawierać domenę aplikacji:

2. Konfiguracja bazy danych produkcyjnej

  • W środowisku produkcyjnym zaleca się użycie PostgreSQL zamiast SQLite.
  • Instalacja zależności:

Przykładowa konfiguracja settings.py:

  • Po zmianie bazy danych należy wykonać migracje:

3. Serwowanie plików statycznych i multimedialnych

3.1. Pliki statyczne

  • W środowisku produkcyjnym Django nie serwuje plików statycznych samodzielnie.
  • Należy je zebrać w jednym katalogu:
  • W settings.py definiujemy:

3.2. Pliki multimedialne (uploads)

  • Serwowanie plików multimedialnych w produkcji zazwyczaj realizuje serwer WWW (Nginx, Apache) lub system cloud storage (np. AWS S3).

4. Deployment na popularnych platformach

4.1. Heroku

  • Popularna platforma PaaS (Platform as a Service).
  • Kroki deploymentu:
    • Zainstalować Heroku CLI.
    • Utworzyć plik Procfile:
web: gunicorn myproject.wsgi --log-file -
  • Skonfigurować requirements.txt i runtime.txt.
  • Włączyć addon PostgreSQL w Heroku:
  • Wysłać kod do repozytorium Heroku:
  • Wykonać migracje:

4.2. VPS (np. Ubuntu)

  • Na VPS instaluje się Python, pip, virtualenv, PostgreSQL, Nginx i Gunicorn.
  • Konfiguracja serwera:

  • Utworzyć virtualenv i zainstalować wymagania.

  • Skonfigurować Gunicorn do obsługi WSGI.
  • Skonfigurować Nginx jako reverse proxy:

    • obsługuje ruch HTTP/HTTPS,
    • serwuje pliki statyczne i media.
  • Warto skonfigurować systemd do automatycznego uruchamiania Gunicorn.


4.3. Docker

  • Docker pozwala opakować aplikację z wszystkimi zależnościami w kontener.
  • Przykładowy Dockerfile dla Django:
  • W połączeniu z docker-compose.yml można uruchamiać:

    • aplikację Django,
    • bazę PostgreSQL,
    • serwer Nginx.

5. Dodatkowe dobre praktyki

  • HTTPS – korzystać z certyfikatu SSL (np. Let's Encrypt).
  • Logowanie błędów – skonfigurować logging w settings.py.
  • Monitorowanie – np. Sentry, NewRelic.
  • Zmienna środowiskowa DEBUG=False zawsze w produkcji.
  • Używać menedżera procesów (Gunicorn + systemd / Supervisor) do stabilnego uruchamiania serwera.