[PYTHON] Déployez Django en 3 minutes à l'aide de docker-compose

Nous avons créé un docker-compose qui peut être utilisé même pour des projets qui ont déjà été créés, nous allons donc résumer les spécifications dans un article.

** Comment utiliser est écrit sur GitHub, alors s'il vous plaît → GitHub **

(Si vous modifiez la base de données de la sqlite par défaut, vous aurez besoin d'un autre paramètre ... désolé)

L'environnement de déploiement est Django + Nginx + Gunicorn.

Aperçu

Veuillez consulter le README sur GitHub, qui contient un lien ci-dessus, pour savoir comment l'utiliser.

Pour faciliter le déploiement, j'ai créé un déploiement docker-compose pour Django qui fonctionne avec la structure de répertoires suivante.

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

Montez le projet entier dans un conteneur et exécutez-le. Regardons maintenant le fichier de paramètres.

docker-compose Les conteneurs utilisés sont ceux des applications Django (Gunicorn fonctionne également dans ce cas) et les conteneurs Nginx qui agissent comme proxy inverse.

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

L'environnement du projet est monté dans les volumes de django. Même si vous modifiez après le démarrage du conteneur, cela sera reflété par le redémarrage du conteneur.

De plus, comme le conteneur nginx effectue une redirection de port à 80:80, il sera remis au conteneur nginx lorsque l'accès viendra au port 80 de l'hôte local.

Je n'ai rien fait de particulièrement délicat, donc l'explication de la composition est terminée.

Dockerfile Une description du Dockerfile dans le répertoire django.

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"]

Utilisez l'image de la série python3. Je télécharge Django et Gunicorn dans RUN sur la ligne 6. (J'ai également téléchargé la bibliothèque pour Postgres, mais je ne l'utilise pas. Je suis désolé.)

requirements.txt


Django==2.2.7
gunicorn==19.9.0
psycopg2

Au fait, c'est une version de Django, mais quand j'ai initialement spécifié 2.0 et donné à Github, je me suis mis en colère. (De nombreux avertissements de sécurité sont venus. J'ai également reçu une demande d'extraction en colère du Bot sur GitHub.)

project.conf Il s'agit du fichier de configuration nginx.

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;
    }
}

Spécifiez la destination de la demande en amont. La destination est l'hôte local du conteneur. En outre, celui nommé ici est utilisé dans le paramètre de chemin du proxy.

Côté serveur, le port d'écoute et le proxy sont définis.

à la fin

Je suis resté coincé dans les paramètres du port. .. .. Tout le monde devrait être prudent ;;

Recommended Posts

Déployez Django en 3 minutes à l'aide de docker-compose
Environnement CSS créé en 10 minutes avec Django
Comment déployer une application Django sur heroku en seulement 5 minutes
Mémo d'enregistrement d'informations en utilisant la session dans Django
Tutoriel de clé externe de Django en 10 minutes
Django Heroku Deploy 1
Django Heroku Deploy 2
Formulaire à Django
Créez un environnement Django avec Vagrant en 5 minutes
TensorBoard facile de 3 minutes dans Google Colab (en utilisant TensorFlow 2.x)
Apprenez les pandas en 10 minutes
Modifications du modèle dans Django
Comprendre en 10 minutes le sélénium
Environnement CSS créé en 10 minutes avec Django
Essayez d'utiliser Django templates.html
Le sélénium fonctionne en 15 minutes
Prise en main et utilisation d'exemples de vues génériques basées sur des classes dans Django
Comment générer une requête à l'aide de l'opérateur IN dans Django
Créez un modèle de suivi facile à utiliser avec Django en utilisant ManyToManyField via
Optimisation des performances dans Django 3.xx
PHP comme var_dump dans le template Django
Gérer les constantes dans les modèles Django
Implémenter la fonction de suivi dans Django
Renommer les colonnes de table dans Django3
Déployer Django sans serveur avec Lambda
Utilisation de verticalenv dans les scripts shell
[Django] Remarques sur l'utilisation de django-debug-toolbar
Sortie de la structure de table dans Django
Paramètres de DEBUG lors de l'utilisation de Django
(Note) Django dans l'environnement Vagrant
Déployer le projet django sur heroku
Afficher Django ManyToManyField dans un modèle
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Commencez dans 5 minutes GIMP Python-Fu
[Tutoriel] Créez un extracteur d'expressions unique en 30 minutes à l'aide de l'apprentissage automatique
Implémentation de la fonction d'authentification JWT dans Django REST Framework à l'aide de djoser
Publiez une application Web en 4 minutes 33 secondes avec Heroku x Bottle
Création et déploiement d'applications Django (PTVS) à l'aide du stockage Azure Table
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker