Starten Sie mit Docker eine Python-Webanwendung auf Nginx + Gunicorn

Verfassung

Vereinbarung von Begriffen

Was ist ein WSGI-Server?

--WSGI steht für Web Server Gateway Interface, ein Protokoll für die Kommunikation zwischen einem Webserver und einem AP-Server in Python.

Was ist ein UNIX-Domain-Socket?

--Kommunikationsmethode zur Suche nach einem Kommunikationspartner über den Pfad des Dateisystems

Bauen

Gunicorn

Projekterstellung

$ 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

Starten Sie den Gunicorn-Container

--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
スクリーンショット 2020-01-12 20.57.11.png

Einstellungen zur Verwendung von UNIX-Domain-Sockets mit Nginx

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.

Einstellungen zur Verwendung des UNIX-Domain-Sockets mit Gunicorn

Befehl zum Starten des Containers

WSGI-Einstellungen

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.

UNIX Domain Socket Einstellungen

gunicorn django_project.wsgi --bind=unix:/var/run/gunicorn/gunicorn.sock

Doickerfile beheben

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 .

Geben Sie einen Host an, der auf das Django-Projekt zugreifen kann

Erstellen Sie ein Volume, das mit UNIX-Domain-Socket-Kommunikation bereitgestellt werden soll

docker-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).

Operation

--Starten Sie mit dem folgenden Befehl

$ docker-compose up -d
Starting gunicorn ... done
Starting nginx    ... done
スクリーンショット 2020-02-08 14.44.28.png

--OK wenn der Bildschirm angezeigt wird

Quellcode

Referenz

Recommended Posts

Starten Sie mit Docker eine Python-Webanwendung auf Nginx + Gunicorn
Führen Sie eine Python-Webanwendung mit Docker aus
[Python] Eine schnelle Webanwendung mit Bottle!
Starten Sie mit Docker einen einfachen Python-Webserver
Starten Sie einen Webserver mit Python und Flask
Webanwendung mit Python + Flask ② ③
Webanwendung mit Python + Flask ④
Ein Memo zum Erstellen einer Django (Python) -Anwendung mit Docker
Stellen Sie die Django-Anwendung mit Docker bereit
Erstellen Sie eine Webanwendung mit Django
Anwendungsentwicklung mit Docker + Python + Flask
Stellen Sie die Django-Anwendung auf EC2 mit Nginx + Gunicorn + Supervisor bereit
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
Erstellen Sie mit Docker eine Python + uWSGI + Nginx-Umgebung
Starten Sie die Umgebung mit LineBot + Heroku + Docker + Python
Erstellen Sie ein Webframework mit Python! (1)
Erstellen Sie einen Webdienst mit Docker + Flask
Starten Sie die Flask-Anwendung mit Docker auf Heroku
Erstellen Sie ein Webframework mit Python! (2)
Ich habe eine WEB-Bewerbung bei Django gemacht
Erstellen Sie mit pyenv unter Ubuntu 12.04 schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen
[GCP] Verfahren zum Erstellen einer Webanwendung mit Cloud-Funktionen (Python + Flask)
[Streamlit] Ich hasse JavaScript, deshalb erstelle ich eine Webanwendung nur mit Python
Implementieren Sie eine einfache Anwendung mit Python Full Scratch ohne Verwendung eines Webframeworks.
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Schritte zum Entwickeln einer Webanwendung in Python
Erstellen Sie mit Docker eine Umgebung aus Nginx + uWSGI + Python (Django)
Führen Sie Flask unter CentOS mit Python3.4, Gunicorn + Nginx aus.
Erstellen Sie einfach eine Python-Konsolenanwendung mit Click
Extrahieren Sie mit Python Daten von einer Webseite
Verwenden Sie Python mit Docker
Stellen Sie Docker in Windows Home und führen Sie einen einfachen Webserver mit Python aus
Erstellen Sie mit venv unter Ubuntu 14.04 LTS schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Analysieren und visualisieren Sie JSON (Webanwendung ⑤ mit Python + Flask)
Webanwendung erstellt mit Python3.4 + Django (Teil.1 Umgebungskonstruktion)
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Starten Sie Django auf einem Docker-Container mit Docker-Compose Up
Web Scraping mit Python + JupyterLab
Erstellen Sie eine Webanwendung mit Django
Bereiten Sie die Python3-Umgebung mit Docker vor
Web-API mit Python + Falcon
Machen Sie eine Lotterie mit Python
Web Scraping Anfänger mit Python
Erstellen Sie ein Verzeichnis mit Python
Python-Servereinstellungen (Nginx + Gunicorn)
Optimieren Sie die Websuche mit Python
Erstellen Sie eine Rails-Anwendung mit Docker
[Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 2]
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Webanwendung mit Python3.3.1 + Flasche (1) - Ändern Sie die Vorlagen-Engine in jinja2
[Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 1]
Webseite mit FastAPI + uvicorn + Nginx anzeigen (SSL / HTTPS-Konvertierung)
[Python] Was ist eine with-Anweisung?