Suche…


Django-Anwendung mit Gunicorn ausführen

  1. Installieren Sie Gunicorn

    pip install gunicorn

  1. 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

  1. 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

  1. Laden Sie Heroku Toolbelt herunter.

  2. Navigieren Sie zum Stammverzeichnis der Django-App. Sie brauchen tk

  3. heroku create [app_name] . Wenn Sie keinen App-Namen angeben, generiert Heroku zufällig einen Namen für Sie. Ihre App-URL http://[app name].herokuapp.com

  4. Procfile Sie eine Textdatei mit dem Namen Procfile . 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>

  5. 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.
  1. Es ist Bereitstellungszeit!

    1. 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.

    1. heroku ps:scale web=1

    Dies skaliert die Anzahl der Web-"Dynos" auf eins. Mehr über Dynos erfahren Sie hier.

    1. heroku open oder navigieren Sie zu http://app-name.herokuapp.com

    Tipp: heroku open öffnet die URL Ihrer Heroku-App im Standardbrowser.

  2. 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.

  1. nginx - freier, quelloffener Open-Source-HTTP-Server und Reverse-Proxy mit hoher Leistung;
  2. gunicorn - 'Green Unicorn' ist ein Python-WSGI-HTTP-Server für UNIX (zur Verwaltung Ihres Servers erforderlich).
  3. 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 .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow