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