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.
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.
Ich blieb in den Porteinstellungen stecken. .. .. Jeder sollte vorsichtig sein ;;
Recommended Posts