Django
Einsatz
Suche…
Django-Anwendung mit Gunicorn ausführen
Installieren Sie Gunicorn
pip install gunicorn
Führen Sie im django-Projektordner (im selben Ordner, in dem sich manage.py befindet) den folgenden Befehl aus, um das aktuelle django-Projekt mit gunicorn auszuführen
gunicorn [projectname].wsgi:application -b 127.0.0.1:[port number]
--env
Option--env
können Sie den Pfad zum Laden der Einstellungen--env
gunicorn --env DJANGO_SETTINGS_MODULE=[projectname].settings [projectname].wsgi
oder als Daemon-Prozess mit der Option
-D
ausführen
Bei erfolgreichem Start von gunicorn erscheinen die folgenden Zeilen in der Konsole
Starting gunicorn 19.5.0
Listening at: http://127.0.0.1:[port number] ([pid])
....
(weitere zusätzliche Informationen zum gunicorn-Server)
Bereitstellen mit Heroku
Laden Sie Heroku Toolbelt herunter.
Navigieren Sie zum Stammverzeichnis der Django-App. Sie brauchen tk
heroku create [app_name]
. Wenn Sie keinen App-Namen angeben, generiert Heroku zufällig einen Namen für Sie. Ihre App-URLhttp://[app name].herokuapp.com
Procfile
Sie eine Textdatei mit dem NamenProcfile
. Setzen Sie keine Erweiterung am Ende.web: <bash command to start production server>
Wenn Sie einen Arbeitsprozess haben, können Sie ihn auch hinzufügen. Fügen Sie eine weitere Zeile im Format hinzu:
worker-name: <bash command to start worker>
Fügen Sie eine Requirements.txt hinzu.
- Wenn Sie eine virtuelle Umgebung verwenden, führen Sie
pip freeze > requirements.txt
- Ansonsten besorgen Sie sich eine virtuelle Umgebung! . Sie können die benötigten Python-Pakete auch manuell auflisten, dies wird jedoch in diesem Lernprogramm nicht behandelt.
Es ist Bereitstellungszeit!
-
git push heroku master
Heroku benötigt ein Git-Repository oder einen Dropbox-Ordner für die Bereitstellung. Sie können alternativ das automatische Neuladen über ein GitHub-Repository auf
heroku.com
In diesem Lernprogramm wird das jedoch nicht behandelt.-
heroku ps:scale web=1
Dies skaliert die Anzahl der Web-"Dynos" auf eins. Mehr über Dynos erfahren Sie hier.
-
heroku open
oder navigieren Sie zuhttp://app-name.herokuapp.com
Tipp:
heroku open
öffnet die URL Ihrer Heroku-App im Standardbrowser.-
Add -Ons hinzufügen Sie müssen Ihre Django-App so konfigurieren, dass sie mit Datenbanken verbunden wird, die in Heroku als "Add-Ons" bereitgestellt werden. Dieses Beispiel behandelt dies nicht, aber ein weiteres Beispiel ist in Vorbereitung auf die Bereitstellung von Datenbanken in Heroku.
Einfache Remote-Bereitstellung von fabfile.py
Fabric ist eine Python (2.5-2.7) -Bibliothek und ein Befehlszeilenprogramm zur Rationalisierung der Verwendung von SSH für Anwendungsbereitstellung oder Systemadministrationsaufgaben. Sie können beliebige Python-Funktionen über die Befehlszeile ausführen.
Fabric über pip install fabric
Erstellen Sie fabfile.py
in Ihrem Stammverzeichnis:
#myproject/fabfile.py
from fabric.api import *
@task
def dev():
# details of development server
env.user = # your ssh user
env.password = #your ssh password
env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
env.key_filename = # pass to ssh key for github in your local keyfile
@task
def release():
# details of release server
env.user = # your ssh user
env.password = #your ssh password
env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
env.key_filename = # pass to ssh key for github in your local keyfile
@task
def run():
with cd('path/to/your_project/'):
with prefix('source ../env/bin/activate'):
# activate venv, suppose it appear in one level higher
# pass commands one by one
run('git pull')
run('pip install -r requirements.txt')
run('python manage.py migrate --noinput')
run('python manage.py collectstatic --noinput')
run('touch reload.txt')
Um die Datei auszuführen, verwenden Sie einfach den Befehl fab
:
$ fab dev run # for release server, `fab release run`
Hinweis: Sie können keine ssh-Schlüssel für github konfigurieren. Geben Sie einfach login und password manuell ein, während fabfile mit den Schlüsseln ausgeführt wird.
Heroku Django Starter Template verwenden.
Wenn Sie Ihre Django-Website auf Heroku hosten möchten, können Sie Ihr Projekt mit der Heroku Django Starter-Vorlage starten:
django-admin.py startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile YourProjectName
Es verfügt über eine produktionsbereite Konfiguration für statische Dateien, Datenbankeinstellungen, Gunicorn usw. und Verbesserungen an Djangos statischen Dateiservices über WhiteNoise. Das spart Zeit, es ist alles bereit für das Hosting auf Heroku. Bauen Sie Ihre Website ganz oben auf diese Vorlage
So stellen Sie diese Vorlage auf Heroku bereit:
git init
git add -A
git commit -m "Initial commit"
heroku create
git push heroku master
heroku run python manage.py migrate
Das ist es!
Anweisungen zur Django-Bereitstellung. Nginx + Gunicorn + Supervisor unter Linux (Ubuntu)
Drei grundlegende Werkzeuge.
- nginx - freier, quelloffener Open-Source-HTTP-Server und Reverse-Proxy mit hoher Leistung;
- gunicorn - 'Green Unicorn' ist ein Python-WSGI-HTTP-Server für UNIX (zur Verwaltung Ihres Servers erforderlich).
- Supervisor - Ein Client / Server-System, mit dem Benutzer eine Reihe von Prozessen auf UNIX-ähnlichen Betriebssystemen überwachen und steuern können. Wird verwendet, wenn eine App oder ein System abstürzt, startet Ihre Django / Sellerie / Sellerie-Kamera usw .;
Um es einfach zu machen, nehmen wir an, Ihre App befindet sich in diesem Verzeichnis: /home/root/app/src/
und wir werden root
Benutzer verwenden (Sie sollten jedoch einen separaten Benutzer für Ihre App erstellen). Auch unsere virtuelle Umgebung befindet sich in /home/root/app/env/
path.
NGINX
Beginnen wir mit Nginx. Wenn nginx noch nicht auf dem Computer installiert ist, installieren Sie es mit sudo apt-get install nginx
. Später müssen Sie eine neue Konfigurationsdatei in Ihrem /etc/nginx/sites-enabled/yourapp.conf
Verzeichnis /etc/nginx/sites-enabled/yourapp.conf
. Wenn eine Datei namens default.conf
entfernen Sie sie.
Geben Sie den Code in eine Nginx-Conf-Datei ein, die versucht, Ihren Dienst mit der Socket-Datei auszuführen. Später wird es eine Konfiguration von Gunicorn geben. Socket-Datei wird hier verwendet, um zwischen nginx und gunicorn zu kommunizieren. Es kann auch mit Ports gearbeitet werden.
# your application name; can be whatever you want
upstream yourappname {
server unix:/home/root/app/src/gunicorn.sock fail_timeout=0;
}
server {
# root folder of your application
root /home/root/app/src/;
listen 80;
# server name, your main domain, all subdomains and specific subdomains
server_name yourdomain.com *.yourdomain.com somesubdomain.yourdomain.com
charset utf-8;
client_max_body_size 100m;
# place where logs will be stored;
# folder and files have to be already located there, nginx will not create
access_log /home/root/app/src/logs/nginx-access.log;
error_log /home/root/app/src/logs/nginx-error.log;
# this is where your app is served (gunicorn upstream above)
location / {
uwsgi_pass yourappname;
include uwsgi_params;
}
# static files folder, I assume they will be used
location /static/ {
alias /home/root/app/src/static/;
}
# media files folder
location /media/ {
alias /home/root/app/src/media/;
}
}
GUNICORN
Nun unser GUNICORN-Skript, das für die Ausführung der Django-Anwendung auf dem Server verantwortlich ist. Zuerst müssen Sie gunicorn in einer virtuellen Umgebung mit pip install gunicorn
.
#!/bin/bash
ME="root"
DJANGODIR=/home/root/app/src # django app dir
SOCKFILE=/home/root/app/src/gunicorn.sock # your sock file - do not create it manually
USER=root
GROUP=webapps
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=yourapp.yoursettings
DJANGO_WSGI_MODULE=yourapp.wsgi
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/root/app/env/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Gunicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/root/app/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name root \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
Um das gunicorn-Startskript ausführen zu können, muss der Ausführungsmodus aktiviert sein
sudo chmod u+x /home/root/app/src/gunicorn_start
Jetzt können Sie Ihren Gunicorn-Server einfach mit ./gunicorn_start
SUPERVISOR
Wie anfangs gesagt, möchten wir, dass unsere Anwendung erneut gestartet wird, wenn sie von einem Supervisor ausfällt. Wenn der Supervisor noch nicht auf dem Server installiert ist, installieren Sie ihn mit sudo apt-get install supervisor
.
Installieren Sie zunächst den Supervisor. Erstellen Sie dann eine .conf
Datei in Ihrem Hauptverzeichnis /etc/supervisor/conf.d/your_conf_file.conf
Inhalt der Konfigurationsdatei:
[program:yourappname]
command = /home/root/app/src/gunicorn_start
user = root
stdout_logfile = /home/root/app/src/logs/gunicorn_supervisor.log
redirect_stderr = true
Am Anfang ist eine kurze [program:youappname]
erforderlich, dies ist unsere Kennung. Auch stdout_logfile
ist eine Datei, in der Protokolle gespeichert werden, sowohl Zugriff als auch Fehler.
Nachdem dies erledigt ist, müssen wir unserem Vorgesetzten mitteilen, dass wir gerade eine neue Konfigurationsdatei hinzugefügt haben. Um dies zu tun, gibt es unterschiedliche Verfahren für unterschiedliche Ubuntu-Versionen.
Für Ubuntu version 14.04 or lesser
Sie einfach die folgenden Befehle aus:
sudo supervisorctl reread
-> liest alle Konfigurationsdateien innerhalb des Supervisor-Katalogs erneut aus, die ausgedruckt werden sollen: yourappname: available
sudo supervisorctl update
-> aktualisiert Supervisor für neu hinzugefügte Konfigurationsdateien; sollte Ihren App-Namen ausgeben: Prozessgruppe hinzugefügt
Für Ubuntu 16.04
Run:
sudo service supervisor restart
und um zu überprüfen, ob Ihre App korrekt ausgeführt wird, führen Sie sie einfach aus
sudo supervisorctl status yourappname
Dies sollte anzeigen:
yourappname RUNNING pid 18020, uptime 0:00:50
Um dieses Verfahren live vorzuführen, surfen Sie in diesem Video .
Lokale Bereitstellung ohne Einrichtung von Apache / Nginx
Die empfohlene Art der Produktionsbereitstellung erfordert die Verwendung von Apache / Nginx zum Bereitstellen des statischen Inhalts. Wenn also DEBUG
falsch ist, werden statische Inhalte nicht geladen. Wir können jedoch den statischen Inhalt in der Bereitstellung laden, ohne den Apache / Nginx-Server für unsere App einrichten zu müssen:
python manage.py runserver --insecure
Diese staticfiles
ist nur für die lokale Bereitstellung (z. B. LAN) vorgesehen und sollte niemals in der Produktion verwendet werden. Sie ist nur verfügbar, wenn sich die staticfiles
App in der Projekteinstellung INSTALLED_APPS
.