[PYTHON] Stellen Sie die Django-Anwendung auf EC2 mit Nginx + Gunicorn + Supervisor bereit

Ich habe eine Django-Anwendung mit einer Kombination aus Nginx + Gunicorn + Supervisor gestartet, also ein Memo des Verfahrens Dieses Mal werden wir mit nichts im Betriebssystem beginnen

Umgebung

OS: Amazon Linux AMI Python: 3.6.1 Django: 1.11.4 Nginx: 1.10.3 Gunicorn: 19.7.1 Supervisor: 3.3.3

Nginx-Installation

Nginx-Installation

$ sudo yum install nginx

Starten Sie Nginx

$ sudo nginx

Nginx Autostart-Einstellung

$ sudo chkconfig --add nginx
$ sudo chkconfig nginx on

Bestätigen Sie die automatische Starteinstellung Wenn es wie folgt aussieht, ist es in Ordnung

$ chkconfig | grep nginx
nginx          	0:off	1:off	2:on	3:on	4:on	5:on	6:off

Greifen Sie auf "http: // ip address" zu und überprüfen Sie, ob es ordnungsgemäß ausgeführt wird OK, wenn es wie folgt ist スクリーンショット 2017-08-03 13.40.56.png

Erstellen einer Python-Umgebung

Diesmal wurde es mit Anaconda gebaut Laden Sie die Python 3.6-Version von [hier] herunter (https://www.continuum.io/downloads). Laden Sie das heruntergeladene Paket mit einem FTP-Tool wie Cyberduck auf / home / ec2-user hoch

Installieren Sie Anaconda nach dem Hochladen mit dem folgenden Befehl

$ bash Anaconda3-4.4.0-Linux-x86_64.sh

Fügen Sie die Installation nach Abschluss in Ihren PATH ein, damit Sie Anaconda-Befehle verwenden können.

$ export PATH="$PATH:/home/ec2-user/anaconda3/bin"

Bestätigen Sie mit dem Befehl conda

$ conda info -e
# conda environments:
#
root                  *  /home/ec2-user/anaconda3

Das ist gut

Wenn die Einstellung der Umgebungsvariablen bei der Installation von annaconda zu bashrc hinzugefügt wird

Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /root/.bashrc ? [yes|no]
[no] >>> yes

Die Root-Umgebung Python ist auch 3.6

$ python --version
Python 3.6.1 :: Anaconda 4.4.0 (64-bit)

Erstellen eines Django-Projekts

Dieses Mal werde ich ein Projekt direkt auf EC2 erstellen Ursprünglich sollte eine lokal entwickelte Django-Anwendung git-geklont werden Die Datenbank verwendet ebenfalls das Standard-SQlite, verwendet jedoch Postgresql oder MariaDB, um den eigentlichen Dienst zu veröffentlichen.

Installieren Sie zuerst Django Ob in der Root-Umgebung ausgeführt werden soll oder nicht, ist etwas umstritten. Ich denke, es ist besser, eine separate Umgebung zu erstellen und Django auszuführen. Vorerst werde ich sie jedoch in der Root-Umgebung installieren.

$ pip install django

Erstellen Sie ein Projekt, wenn es kein Problem gibt

$ django-admin startproject test_project

Bestätigen Sie, dass das Projekt erstellt wurde

$ ls -ltr
total 511032
-rw-rw-r--  1 ec2-user ec2-user 523283080 Aug  3 04:50 Anaconda3-4.4.0-Linux-x86_64.sh
drwxrwxr-x 20 ec2-user ec2-user      4096 Aug  3 04:53 anaconda3
drwxrwxr-x  3 ec2-user ec2-user      4096 Aug  3 05:05 test_project

Bearbeiten Sie ALLOW HOST von / test_project / test_project / settings.py wie folgt

settings.py


# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ["IP-Adresse des Servers"]

Starten Sie Django mit dem folgenden Befehl Standardmäßig wird 127.0.0.1:8000 als Bindungsadresse verwendet, daher müssen Sie optional 0.0.0.0: 8000 hinzufügen Darüber hinaus muss Port 8000 in der AWS-Sicherheitsgruppe im Voraus geöffnet werden.

$ cd test_project
$ python manage.py runserver 0.0.0.0:8000

Wenn Sie auf "http: // IP address: 8000" zugreifen, können Sie wie folgt auf die Django-Anwendung zugreifen スクリーンショット 2017-08-03 15.23.25.png

Installieren Sie Gunicorn

Gunicorn ist ein Python WSGI Server Ein WSGI-Server ist ein Server, der einen Webserver und eine Webanwendung verbindet. Stellen Sie sich also eine Konfiguration wie Nginx <-> Gunicorn <-> Django vor.

Installieren Sie zuerst Gunicorn

$ pip install gunicorn

Starten Sie Django mit Gunicorn, sobald es installiert ist

$ gunicorn test_project.wsgi --bind=0.0.0.0:8000

Wie zuvor können Sie eine Verbindung zur Django-Anwendung herstellen, indem Sie auf "http: // IP address: 8000" zugreifen Wenn settings.py in Produktion und Entwicklung unterteilt ist, sieht es wie folgt aus.

$ gunicorn test_project.wsgi.wsgi --env DJANGO_SETTINGS_MODULE=test_project.settings_dev --bind=0.0.0.0:8000

Ändern Sie die Nginx-Einstellungen

Bearbeiten Sie /etc/nginx.conf wie folgt

/etc/nginx.conf



~ Ausgelassen ~

http {
~ Ausgelassen ~

    upstream app_server {
        server 127.0.0.1:8000 fail_timeout=0;
    }

    server {
        #Die folgenden 4 Zeilen sind auskommentiert
        #listen       80 default_server;
        #listen       [::]:80 default_server;
        #server_name  localhost;
        #root         /usr/share/nginx/html;

        #Fügen Sie die folgenden 3 Zeilen hinzu
        listen    80;
        server_Name IP-Adresse oder Domain;
        client_max_body_size    4G;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            #Fügen Sie die folgenden 4 Zeilen hinzu
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass   http://app_server;
        }

~ Folgendes wird weggelassen ~

Starten Sie nginx nach der Bearbeitung mit dem folgenden Befehl neu

$ sudo service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

Damit sind die Reverse-Proxy-Einstellungen in Nginx abgeschlossen Dieses Mal habe ich nginx.conf direkt bearbeitet, aber es ist auch in Ordnung, die Einstellungsdatei an eine andere Stelle zu schreiben und zu laden.

Dann starten Sie Django mit Gunicorn

$ gunicorn test_project.wsgi --bind=0.0.0.0:8000

Wenn Sie als Nächstes auf "http: // IP address" zugreifen, sollte der Django-Bildschirm angezeigt werden.

Demonstrieren Sie einen Prozess mit Supervisor

Wenn Sie im aktuellen Status den Gunicorn-Befehl stoppen oder sich vom Server abmelden, wird die Anwendung gestoppt. Um dies zu lösen, dämonisieren Sie den Gunicorn-Prozess mit Supervisor.

Ich möchte Supervisor sofort installieren, aber Supervisor funktioniert nur mit der Python 2-Serie. Erstellen Sie daher mit Anaconda eine virtuelle Python2-Umgebung und installieren Sie Supervisor in dieser Umgebung.

Erstellen Sie zunächst mit dem folgenden Befehl eine virtuelle Python2-Umgebung für Supervisor

$ conda create -n supervisor python=2.7

Wechseln Sie zur Python2-Systemumgebung und installieren Sie den Supervisor mit pip

$ source activate supervisor
$ pip install supervisor

Wenn Sie es problemlos installieren können, erstellen Sie eine Supervisor-Einstellungsdatei und platzieren Sie sie unter / etc.

$ echo_supervisord_conf > supervisord.conf
$ sudo mv supervisord.conf /etc

Bearbeiten Sie als Nächstes die Datei controlleriscon wie folgt, um den Supervisor festzulegen.

supervisord.conf


~ Ausgelassen ~
[supervisord]
logfile=/var/log/supervisord.log ;Ändern Sie den Protokollspeicherort
;logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log #Auskommentieren
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/var/run/supervisord.pid ;Nachtrag
;pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid #Auskommentieren

~ Ausgelassen ~
#include ist so auskommentiert auskommentiert
[include]
files = supervisord.d/*.conf ;Speicherort der conf-Datei des zu startenden Prozesses
;files = relative/directory/*.ini

Erstellen Sie eine Protokolldatei und legen Sie Berechtigungen fest

$ sudo touch /var/log/supervisord.log
$ sudo chown ec2-user /var/log/supervisord.log
$ sudo chgrp ec2-user /var/log/supervisord.log
$ sudo chmod 774 /var/log/supervisord.log

Stellen Sie außerdem die Protokollrotation ein

$ sudo sh -c "echo '/var/log/supervisord.log {
       missingok
       weekly
       notifempty
       nocompress
}' > /etc/logrotate.d/supervisor"

Erstellen Sie als Nächstes eine Datei, die die Befehle des zu dämonisierenden Prozesses beschreibt. Erstellen Sie zunächst ein Verzeichnis, um diese Dateien zu platzieren

$ sudo mkdir /etc/supervisord.d

Erstellen Sie django_app.conf unter /etc/supervisord.d Schreiben Sie hier die Einstellungen für die Dämonisierung des Gunicorn-Prozesses wie folgt

django_app.conf


[program:django_app]
directory=/home/ec2-user/test_project
command=gunicorn test_project.wsgi --bind=0.0.0.0:8000
numprocs=1
autostart=true
autorestart=true
user=ec2-user
redirect_stderr=true

Geben Sie das Verzeichnis an, das im Verzeichnis ausgeführt werden soll, und geben Sie den Befehl zum Starten des Prozesses im Befehl an

Wenn Sie dies bisher tun können, starten Sie den Supervisor mit dem folgenden Befehl

$ supervisord

Lassen Sie als nächstes die conf-Datei lesen Dies wird immer ausgeführt, wenn conf usw. geändert wird.

$ supervisorctl reread

Starten Sie den Daemon außerdem mit dem folgenden Befehl neu, und conf wird auch zu diesem Zeitpunkt gelesen

$ supervisorctl reload

Dämonisiere den Gunicorn-Prozess mit dem folgenden Befehl

$ supervisorctl start django_app

Wenn die Meldung "django_app: ERROR (bereits gestartet)" angezeigt wird, verwenden Sie den folgenden Befehl, um den Prozess neu zu starten oder zu stoppen, bevor Sie ihn starten.

$ supervisorctl stop django_app #Halt
$ supervisorctl restart django_app #Starten Sie neu

Versuchen Sie nun, sich in diesem Status vom Server abzumelden Und wenn Sie auf "http: // IP address" zugreifen, wird der Django-Bildschirm angezeigt. Der Gunicorn-Prozess wird jetzt vom Supervisor dämonisiert

Es war gut

Recommended Posts

Stellen Sie die Django-Anwendung auf EC2 mit Nginx + Gunicorn + Supervisor bereit
Stellen Sie die Django-Anwendung mit Docker bereit
So stellen Sie eine Django-Anwendung in der Alibaba-Cloud bereit
Stellen Sie die Django-Anwendung in Google App Engine (Python3) bereit.
Starten Sie mit Docker eine Python-Webanwendung auf Nginx + Gunicorn
Stellen Sie die mit PTVS erstellte Django-App in Azure bereit
Stellen Sie die Django-Anwendung auf Heroku bereit
Startete eine Webanwendung auf AWS mit Django und wechselte Jobs
Hinweise zum Aktivieren von PostgreSQL mit Django
Ich habe eine WEB-Bewerbung bei Django gemacht
Bis die mit Flasche erstellte Webanwendung auf Heroku veröffentlicht (bereitgestellt) wird
# 1 Bis zur Bereitstellung der Webanwendung von Django (Erstellen einer Instanz mit EC2 unter AWS)
Hallo Welt mit Nginx + Uwsgi + Python auf EC2
Führen Sie Flask unter CentOS mit Python3.4, Gunicorn + Nginx aus.
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
Stellen Sie Python 3.6 / Django / Postgres-Webanwendungen in Azure bereit
Rückblick auf die Erstellung eines Webdienstes mit Django 1
Rückblick auf die Erstellung eines Webdienstes mit Django 2
Ein Memo zum Erstellen einer Django (Python) -Anwendung mit Docker
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
Stellen Sie Django serverlos mit Lambda bereit
Erstellen Sie eine Homepage mit Django
Erstellen Sie eine Webanwendung mit Django
(Fehler) Stellen Sie eine mit Flask mit Heroku erstellte Web-App bereit
Erstellen Sie mit pyenv unter Ubuntu 12.04 schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen
Erstellen Sie mit Chalice eine flaschen- / flaschenähnliche Webanwendung auf AWS Lambda
# 3 Erstellen Sie eine Python-Umgebung (Django) mit einer EC2-Instanz (ubuntu18.04) von AWS part2
Messen Sie die Abdeckung der Django-Anwendung mit Coverage.py
Django-Tipps - Erstellen Sie eine Ranking-Site mit Django-
Twitter-Posting-Anwendung mit Django gemacht
Implementieren Sie die Django-App auf Hy
Führen Sie python3 Django1.9 mit mod_wsgi aus (deploy)
Machen Sie einen Filter mit einer Django-Vorlage
Erstellen Sie mit Django einen Datei-Uploader
Führen Sie einen Stapel Python 2.7 mit nohup unter Amazon Linux AMI unter EC2 aus
Bis die Django-Anwendung (+ MySQL) auf AWS EC2 veröffentlicht wird (+ RDS (+ S3))
Ich habe ein WebAPI gemacht! Erstellen einer Umgebung aus Django Rest Framework 1 mit EC2
Erstellen Sie mit Ansible einen Proxyserver mit nginx auf mehreren Remote-Servern
Django + Apache mit mod_wsgi unter Windows Server 2016
Ein Memo mit Python2.7 und Python3 in CentOS
Kartenmietinformationen auf einer Karte mit Python
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Stellen Sie die Django-App in Heroku bereit [Teil 1]
Werfen Sie eine Anfrage mit einem Zertifikat auf httpie
Erstellen eines Anmeldebildschirms in Django all auth
[Python] Eine schnelle Webanwendung mit Bottle!
Führen Sie eine Python-Webanwendung mit Docker aus
Starten Sie die Flask-Anwendung mit Docker auf Heroku
Flasche + Gunicorn + Nginx + Supervisor Bis es funktioniert
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)
Versuchen Sie, eine Webanwendung mit Vue.js und Django (Mac Edition) zu erstellen - (1) Umgebungskonstruktion, Anwendungserstellung
Erstellen Sie eine TensorFlow-Entwicklungsumgebung auf Amazon EC2 mit Befehlskopie