--Serveur Web - nginx
--WSGI signifie Web Server Gateway Interface, qui est un protocole de communication entre un serveur Web et un serveur AP en Python.
Gunicorn
--Installez Django
$ pip install Django==3.0.2
--Créez un projet dans votre environnement de travail
$ django-admin.py startproject django_project .
$ tree
.
├── django_project
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
--Créer un 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
--requirements.txt se présente comme suit
requirements.txt
Django==3.0.2
gunicorn==20.0.4
--Construire
$ 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
python manage.py runserver 0.0.0.0: 8000
démarre un serveur de test simple
$ docker-compose up -d```, accédez à localhost: 8000, et si l'écran Django est affiché, c'est OK.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 {…}
le contenu est les paramètres de socket de domaine UNIX
--Communiquer avec gunicorn via le fichier socket dans le chemin décrit
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
--Monter dans Nginx avec le nom
/ etc / nginx / conf.d / default.conf --Nginx lit /etc/nginx/nginx.conf au démarrage et dit
inclure /etc/nginx/conf.d / *. Conf; `` dans ce fichier, donc
Si vous montez le fichier de configuration que vous avez créé sous
/ etc / nginx / conf.d```, il sera lu ensemble au démarrage.
gunicorn django_project.wsgi
--Ceci lit wsgi.py sous django_project, qui est construit lorsque vous créez un projet appelé django_project cette fois. --Manage.py a été démarré lors du démarrage local, mais cette commande est requise lors de la communication avec WSGI.
--Spécifiez le chemin du fichier de socket de démarrage avec
--bind``` pour communiquer avec les sockets de domaine UNIX
gunicorn django_project.wsgi --bind=unix:/var/run/gunicorn/gunicorn.sock
--Changed CMD of Dockerfile basé sur le contenu ci-dessus
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"]
--Construire à nouveau
$ docker build -t gunicorn:latest .
--Spécifiez dans ʻALLOWED_HOSTS = [] dans setting.py créé sous django_project --Il devrait être restreint normalement, mais ici il est défini sur ʻALLOWED_HOSTS = [*]
pour permettre l'accès de tous les hôtes.
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
--Créez un volume appelé gunicorn et montez-le dans chaque conteneur (cette fois, / var / run / gunicorn
est spécifié dans les deux conteneurs)
$ docker-compose up -d
Starting gunicorn ... done
Starting nginx ... done
localhost
après le démarrage--OK si l'écran est affiché
Recommended Posts