--WSGI steht für Web Server Gateway Interface, ein Protokoll für die Kommunikation zwischen einem Webserver und einem AP-Server in Python.
--Kommunikationsmethode zur Suche nach einem Kommunikationspartner über den Pfad des Dateisystems
Gunicorn
$ pip install Django==3.0.2
--Erstellen Sie ein Projekt in Ihrer Arbeitsumgebung
$ django-admin.py startproject django_project .
--Hier erstellen Sie ein Projekt mit dem Namen django_project
$ tree
.
├── django_project
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
--Erstellen Sie eine Docker-Datei
FROM python:3.8.0-alpine
WORKDIR /usr/src/app
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt
--requirements.txt lautet wie folgt
requirements.txt
Django==3.0.2
gunicorn==20.0.4
--Bauen
$ docker build -t gunicorn:tmp .
version: '3.7'
services:
gunicorn:
image: gunicorn:tmp
container_name: gunicorn
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/usr/src/app/
ports:
- 8000:8000
gunicorn.conf
upstream gunicorn-django {
server unix:///var/run/gunicorn/gunicorn.sock;
}
server {
listen 80;
server_name localhost;
location / {
try_files $uri @gunicorn;
}
location @gunicorn {
proxy_pass http://gunicorn-django;
}
}
--``` Upstream Gunicorn-Django {…} `` `Inhalte sind UNIX Domain Socket Einstellungen --Kommunizieren Sie mit Gunicorn über die Socket-Datei im beschriebenen Pfad
version: '3.7'
services:
nginx:
image: nginx:1.17.7
container_name: nginx
ports:
- "80:80"
volumes:
- ./gunicorn.conf:/etc/nginx/conf.d/default.conf
--Mount in Nginx mit dem Namen `/ etc / nginx / conf.d / default.conf``` --Nginx liest /etc/nginx/nginx.conf beim Start und sagt
include /etc/nginx/conf.d / *. Conf;
in diese Datei, also
Wenn Sie die unter `/ etc / nginx / conf.d``` erstellte conf-Datei mounten, wird sie beim Start zusammen gelesen.
gunicorn django_project.wsgi
--Dies liest wsgi.py unter django_project, das erstellt wird, wenn Sie dieses Mal ein Projekt namens django_project erstellen. --Manage.py wurde beim lokalen Start gestartet, dieser Befehl ist jedoch für die Kommunikation mit WSGI erforderlich.
gunicorn django_project.wsgi --bind=unix:/var/run/gunicorn/gunicorn.sock
Dockerfile
FROM python:3.8.0-alpine
WORKDIR /usr/src/app
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt
RUN mkdir -p /var/run/gunicorn
CMD ["gunicorn", "django_project.wsgi", "--bind=unix:/var/run/gunicorn/gunicorn.sock"]
$ docker build -t gunicorn:latest .
ALLOWED_HOSTS = []
in settings.py an, das unter django_project erstellt wurdedocker-compose.yaml
version: '3.7'
services:
gunicorn:
image: gunicorn:latest
container_name: gunicorn
volumes:
- .:/usr/src/app/
- gunicorn:/var/run/gunicorn
nginx:
image: nginx:1.17.7
container_name: nginx
depends_on:
- gunicorn
ports:
- "80:80"
volumes:
- ./gunicorn.conf:/etc/nginx/conf.d/default.conf
- gunicorn:/var/run/gunicorn
volumes:
gunicorn:
driver: local
--Erstelle ein Volume namens Gunicorn und montiere es in jeden Container (diesmal ist in beiden Containern / var / run / gunicorn
angegeben).
--Starten Sie mit dem folgenden Befehl
$ docker-compose up -d
Starting gunicorn ... done
Starting nginx ... done
localhost
zuzugreifen--OK wenn der Bildschirm angezeigt wird
Recommended Posts