So stellen Sie eine Django-Anwendung bereit:

Wie wäre es mit Grüßen an alle, dies ist mein erster Artikel in <» DesdeLinux (von mehreren, die ich in meinen Entwürfen habe xD), ich hoffe, es ist nützlich für Sie 😀

Nun, in meinem neuen und aktuellen Job wird gerade die Migration mehrerer Systeme nach Django durchgeführt (wie seltsam eh ?? xD), und eine meiner Aufgaben, abgesehen von der Entwicklung, ist die Produktion dieser Systeme, dann als Guter Lehrling, da ich zum ersten Mal eine Anwendung auf einem echten Server in Produktion gebracht habe: $ Ich begann, das offizielle Dokument aller erforderlichen Pakete des Stapels (vor allem Gunicorn und Supervisord) zu lesen und sah, dass die Tutorials Auf Spanisch waren sie mir in einigen Aspekten nicht sehr klar. Ich beschloss, einen Mini-Leitfaden mit den Schritten zu erstellen, die ich befolgte, um die Anwendung in Produktion zu bringen, basierend auf den Stapeln Django, Gunicorn, Supervisord, Nginx und Postgresql.

In dem Fall, in dem ich arbeite, wird auf den Servern immer noch Debian Squeeze ausgeführt, aber die Anleitung sollte für andere Distributionen vollständig gültig sein. Kommen wir also gleich zum Punkt und beginnen:

Ich werde als Superuser arbeiten. Zunächst sind folgende Pakete erforderlich:

PIP -> Tool zum Installieren und Verwalten von Paketen für Python
aptitude install python-pip

Nginx -> Webserver (wir werden ihn als Reverse-Proxy verwenden und die statischen Dateien 'img, js, css' zwischenspeichern) Wir installieren ihn mit:
aptitude install nginx

Supervisor -> Anwendung zum Verwalten und Überwachen unserer Anwendung, obwohl sie für viel mehr verwendet wird. Wir installieren es mit:
aptitude install supervisor

virtuelle Umgebung -> Es hilft uns, eine angepasste virtuelle Ausführungsumgebung für unsere Anwendung zu erstellen. Wir installieren es mit:
aptitude install python-virtualenv

Gunikorn -> Webserver für Python (wir werden dies noch nicht installieren)

Ich gehe davon aus, dass postgresql bereits installiert und konfiguriert sein sollte

psychopg2 -> Postgresql-Connector für Python (wir werden ihn auch noch nicht installieren)

Erstellen Sie eine virtuelle Umgebung mit virtualenv:

Zuerst werden wir in das Arbeitsverzeichnis wechseln, das wir für die Produktion verwenden werden:
cd /var/www/

Dann erstellen wir in diesem Verzeichnis die virtuelle Umgebung:
virtualenv ENV-nombreApp

Wir wechseln in das Verzeichnis, das ich gerade virtualenv erstellt habe
cd ENV-nombreAPP

Wir kopieren die Anwendung in dieses Verzeichnis und aktivieren nun die Umgebung mit:
source bin/activate

Die Eingabeaufforderung sollte nun so aussehen (ENV)usuario@host:

Dadurch wird nun alles, was wir tun, im Verzeichnis gespeichert / var / www / ENV-Appname / ohne Auswirkungen auf Systempakete

Nun wechseln wir in das Anwendungsverzeichnis:
cd nombreApp

Wir fahren mit der Installation der Liste der Anwendungsabhängigkeiten (falls erforderlich) fort, in der sie in der Datei angegeben sind requirements.txt:
pip install -r requirements.txt

Wir können Pakete auch einzeln installieren, um beispielsweise den Connector von zu installieren postgresql:
pip install psycopg2

Installation und Konfiguration von GUnicorn:

Um es zu installieren, machen wir es auf die gleiche Weise:
pip install gunicorn

Jetzt werden wir es konfigurieren, dafür werden wir eine Datei namens erstellen gunicorn-deploy.py im Stammverzeichnis unserer Anwendung (obwohl der Name alles sein kann) mit folgendem Inhalt:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

Supervisord-Konfiguration:

Jetzt setzen wir die Supervisor, dafür generieren wir die Konfigurationsdatei mit

echo_supervisord_conf > /etc/supervisord.conf

Jetzt bearbeiten wir die Konfigurationsdatei:
vim /etc/supervisord.conf

Und wir kommentieren die folgenden Zeilen aus, indem wir die entfernen; (Semikolon):

[unix_http_server] file = / tmp / Supervisor.sock [Supervisord] Logfile = / var / log / Supervisord.log Logfile_maxbytes = 50 MB Logfile_backups = 10 loglevel = Debug pidfile = / var / run / Supervisord.pid nodaemon = false minfds = 1024 min = 200 [rpcinterface: Supervisor] Supervisor.rpcinterface_factory = Supervisor.rpcinterface: make_main_rpcinterface [Supervisorctl] serverurl = Unix: [Programm: Anwendungsname] Befehl = / var / www / ENV-Anwendungsname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Benutzername redirect_stderr = true stdout_logfile = / var / www / logs / appname / Supervisord.log

Jetzt erstellen wir das Skript für Supervisorord, um mit dem System zu beginnen. Dazu erstellen wir die Datei:
vim /etc/init.d/supervisord

Und wir fügen folgenden Inhalt hinzu:

 # Supervisord Autostart # # Beschreibung: Startet Supervisord # Prozessname: Supervisord # PID-Datei: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / Supervisord SUPERVISORCTL = / usr / local / bin / Supervisorctl case $ 1 in start) echo -n "Supervisord wird gestartet:" $ SUPERVISORD echo ;; stop) echo -n "Supervisor stoppen:" $ SUPERVISORCTL Shutdown Echo ;; Neustart) echo -n "Supervisor stoppen:" $ SUPERVISORCTL Shutdown Echo Echo -n "Supervisord starten:" $ SUPERVISORD echo ;; dieses C

Und jetzt erteilen wir der Datei Ausführungsberechtigungen, damit sie mit dem System beginnen kann:
sudo chmod +x /etc/init.d/supervisord

Wir aktualisieren die Links, um den Dienst zu starten:
sudo update-rc.d supervisord defaults

Wir starten den Service:
sudo /etc/init.d/supervisord start

Nginx einrichten:

Dieser Schritt ist auch ganz einfach, wir werden die folgende Konfigurationsdatei von erstellen für unsere Bewerbung:

vim /etc/nginx/sites-enabled/nombreApp

Und wir werden Ihnen den folgenden Inhalt hinzufügen

Server {Listen 9001; # Port, an dem Nginx den Servernamen abhören soll www.domain.com; # oder 192.168.0.100, Adresse, auf die wir zugreifen werden access_log /var/log/nginx/Appname.access.log; # wo wir den Speicherort des Anwendungsprotokolls haben / {# wo nginx beim Zugriff auf www.dominio.com/proxy_pass http://127.0.0.1:8001 anruft; proxy_set_header Host $ http_host; } location / static / {#, auf den nginx zugreifen wird, wenn wir www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles / eingeben; }}

Und wir starten nginx neu:
service nginx restart

Django einrichten:

Lassen Sie uns die Django-Konfigurationsdatei ändern:
vim nombreApp/settings.py

Wir suchen nach der Zeile, die sagt DEBUG = wahr und wir ändern den Wert, verbleibend DEBUG = Falsch

Wir fügen die DB-Parameter hinzu:

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # oder mysql oder was auch immer sie verwenden 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'Passwort DB', 'HOST': 'localhost', # oder das, das sie benötigen 'PORT': '', # oder das, das sie verwenden}}

Wir suchen die Linie ALLOWED_HOSTS = [] und wir fügen die Domain oder die Adresse hinzu, über die wir zugreifen werden, und lassen so etwas wie ALLOWED_HOSTS = ['www.domain.com']

Wir konfigurieren das Verzeichnis für die statischen Dateien und suchen nach der Zeile mit der Aufschrift STATIC_ROOT = ' ' und wir ändern den Wert und platzieren den absoluten Pfad dort, wo unsere statischen Dateien sein sollen. In meinem Fall habe ich ihn mehr oder weniger so belassen STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Fast fertig führen wir den folgenden Befehl aus:
./manage.py collectstatic

Dadurch wird ein Ordner mit dem Namen 'Statik in dem Pfad, den wir in der settings.py 'Dort werden alle unsere statischen Dateien gespeichert.

Und schließlich starten wir den Supervisor neu, um die neuen Änderungen zu übernehmen:
supervisorctl restart nombreApp

Und das wäre alles, am Ende war es nicht so sehr wahr? es schien mir einfach 😀

Ich hoffe es ist nützlich für dich, Grüße 😉

GUnicorn Dokumentation

Supervisord-Dokumentation


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   f3niX sagte

    Ich verstehe, dass die Django-App nicht im Stammverzeichnis des Webserver-Ordners (/ var / www) abgelegt werden sollte. Aus Sicherheitsgründen weiß ich nicht, ob ich falsch liege.

    Grüße.

    1.    urKh sagte

      Gut !!! Es war etwas, von dem ich nichts wusste, ich werde den Eintrag aktualisieren 😛 und sobald ich am Montag zurückkomme, werde ich Änderungen in der xD-Anwendung vornehmen
      dank

  2.   Rodrigo Bravo (Goidor) sagte

    Epale Bruder gutes Tutorial. Vor kurzem war ich auch im selben, aber in Debian 7 musste ich mehr oder weniger suchen und lesen. Ich empfehle, dass Sie die virtuelle Umgebung von virtualenv im Haus des Benutzers in einem versteckten Ordner erstellen.

    Viele Grüße!

  3.   Fenriz servieren sagte

    hahaha ctm Ich habe gestern Django dokumentiert und du gehst schon durch die Galaxie 999999 Grüße Männer xD

  4.   daniel2ac sagte

    Sehr guter Artikel =) Vor einer Woche habe ich meine Django-App bereitgestellt, aber ich habe es mit Uwsgi und Nginx gemacht. Weißt du, welchen Vorteil Gunicorn hat? Ich habe gesehen, dass es viel erwähnt wurde.
    Es ist schön zu sehen, dass Django immer beliebter wird. Die Wahrheit ist der beste Rahmen, den ich je gesehen habe =)

  5.   ist ozkan sagte

    Für STATIC_ROOT definiere ich eine globale Variable. Etwas wie das:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

    Wo Backend ist eine App, die ich erstellt habe. Daher stelle ich sicher, dass der globale Pfad bei der Bereitstellung des Projekts derselbe ist.

  6.   sgmart sagte

    Interessant, ich werde es in Zukunft versuchen.

    Weiß übrigens jemand, wie man Akzente und Nicht-ASCII-Zeichen in einer Django-Anwendung aktiviert?

    Ich habe überall gesucht, keine der folgenden Methoden funktioniert für mich:
    sys.setdefaultencoding ('utf-8') # in sites.py

    # - * - Kodierung: utf-8 - * - # in jeder Python-Datei

    Das Bearbeiten von site.py und das Setzen von utf-8 anstelle von ASCII sollte funktionieren, aber $ file models.py informiert mich, dass meine Datei immer noch ein ASCII ist.

    Irgendwelche Vorschläge?

    1.    sgmart sagte

      Es funktionierte!!!!

  7.   anime230 sagte

    Sehr gutes Tutorial, aber Sie können eine Methode zum Hochladen meiner App auf einen Webserver ausführen, der sich bereits in der Produktion befindet
    dank