[PYTHON] Stellen Sie Django in 3 Minuten mit Docker-Compose bereit

Wir haben eine Docker-Komposition erstellt, die auch für bereits erstellte Projekte verwendet werden kann. Daher werden wir die Spezifikationen in einem Artikel zusammenfassen.

** Die Verwendung ist auf GitHub geschrieben, bitte → GitHub **

(Wenn Sie die Datenbank von der Standard-SQLite ändern, benötigen Sie eine andere Einstellung ... Entschuldigung)

Die Bereitstellungsumgebung ist Django + Nginx + Gunicorn.

Überblick

Informationen zur Verwendung finden Sie in der README-Datei auf GitHub, die oben einen Link enthält.

Um die Bereitstellung zu vereinfachen, habe ich ein Docker-Compose für die Django-Bereitstellung erstellt, das mit der folgenden Verzeichnisstruktur funktioniert.

django-nginx-gunicorn-docker/
      ├ nginx/
      │ └ project.conf
      ├ django/
      │  ├ Dockerfile
      │  ├ requirements.txt
      │  └ [DJANGOPROJECT]
      │     ├ manage.py
      │     ├ …
      │     └ [PROJECTNAME]
      └ docker-compose.yml

Hängen Sie das gesamte Projekt in einen Container ein und führen Sie es aus. Schauen wir uns nun die Einstellungsdatei an.

docker-compose Die verwendeten Container sind diejenigen für Django-Anwendungen (Gunicorn funktioniert auch hier) und Nginx-Container, die als Reverse-Proxy fungieren.

docker-compose.yml


version: '3'
services:
    django:
        build: ./django
        expose:
            - "8000"
        networks:
            - nginx_network
        volumes:
            - ./django:/code
        hostname: django-server
        restart: always
    nginx:
        image: nginx
        ports:
            - "80:80"
        networks:
            - nginx_network
        depends_on:
            - django
        volumes:
            - ./nginx/project.conf:/etc/nginx/conf.d/default.conf
        restart: always
networks:
    nginx_network:
        driver: bridge

Die Projektumgebung ist in den Volumes von Django bereitgestellt. Selbst wenn Sie nach dem Starten des Containers bearbeiten, wird dies durch einen Neustart des Containers wiedergegeben.

Da es sich bei dem Nginx-Container um eine Portweiterleitung um 80:80 Uhr handelt, wird er an den Nginx-Container übergeben, wenn der Zugriff auf Port 80 des lokalen Hosts erfolgt.

Ich habe nichts besonders Kniffliges getan, daher ist die Erklärung des Komponierens beendet.

Dockerfile Eine Beschreibung der Docker-Datei im Django-Verzeichnis.

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
WORKDIR /code/MYPROJECT
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "MYPROJECT.wsgi:application"]

Verwenden Sie das Bild der Python3-Serie. Ich lade Django und Gunicorn in RUN in Zeile 6 herunter. (Ich habe auch die Bibliothek für Postgres heruntergeladen, benutze sie aber nicht. Es tut mir leid.)

requirements.txt


Django==2.2.7
gunicorn==19.9.0
psycopg2

Übrigens ist es eine Version von Django, aber als ich anfänglich 2.0 spezifizierte und es Github gab, wurde ich wütend. (Es kamen viele Sicherheitswarnungen. Ich habe auch eine verärgerte Pull-Anfrage vom Bot auf GitHub erhalten.)

project.conf Dies ist die Nginx-Konfigurationsdatei.

project.conf


upstream django {
  server django:8000;
}

server {
    listen  80;
    server_name :localhost;

    location / {
        proxy_pass http://django;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Geben Sie das Ziel der Anforderung im Upstream an. Das Ziel ist der lokale Host des Containers. Der hier genannte wird auch in der Proxy-Pfadeinstellung verwendet.

Auf der Serverseite werden der Überwachungsport und der Proxy festgelegt.

schließlich

Ich blieb in den Porteinstellungen stecken. .. .. Jeder sollte vorsichtig sein ;;

Recommended Posts

Stellen Sie Django in 3 Minuten mit Docker-Compose bereit
CSS-Umgebung in 10 Minuten mit Django erstellt
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
Memo zur Informationsaufzeichnung mit Sitzung in Django
Djangos External Key Tutorial in 10 Minuten
Django Heroku Deploy 1
Django Heroku Deploy 2
Form in Django
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Einfache 3 Minuten TensorBoard in Google Colab (mit TensorFlow 2.x)
Lerne Pandas in 10 Minuten
Modelländerungen in Django
Verstehe in 10 Minuten Selen
CSS-Umgebung in 10 Minuten mit Django erstellt
Versuchen Sie es mit Django templates.html
Selen läuft in 15 Minuten
Erste Schritte und Verwendung von auf Klassenklassen basierenden generischen Ansichten in Django
So generieren Sie eine Abfrage mit dem IN-Operator in Django
Erstellen Sie mit Django ein benutzerfreundliches Folgemodell mit ManyToManyField through
Leistungsoptimierung in Django 3.xx.
PHP var_dump-like in Django-Vorlage
Behandeln Sie Konstanten in Django-Vorlagen
Implementieren Sie die Follow-Funktion in Django
Benennen Sie Tabellenspalten in Django3 um
Stellen Sie Django serverlos mit Lambda bereit
Verwenden von Verticalenv in Shell-Skripten
[Django] Hinweise zur Verwendung der Django-Debug-Symbolleiste
Ausgabe der Tabellenstruktur in Django
DEBUG-Einstellungen bei Verwendung von Django
(Hinweis) Django in Vagrant-Umgebung
Stellen Sie das Django-Projekt für Heroku bereit
Zeigen Sie Django ManyToManyField in der Vorlage
Übersetzt mit Googletrans in Python
Verwenden des Python-Modus in der Verarbeitung
Starten Sie in 5 Minuten GIMP Python-Fu
[Tutorial] Erstellen Sie mithilfe von maschinellem Lernen in 30 Minuten einen einzigartigen Ausdrucksextraktor
Implementierung der JWT-Authentifizierungsfunktion in Django REST Framework mit djoser
Veröffentlichen Sie eine Web-App in 4 Minuten 33 Sekunden mit Heroku x Flasche
Erstellen und Bereitstellen von Django-Apps (PTVS) mithilfe des Azure Table-Speichers
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung