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 😉
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.
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
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!
hahaha ctm Ich habe gestern Django dokumentiert und du gehst schon durch die Galaxie 999999 Grüße Männer xD
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 =)
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.
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?
Es funktionierte!!!!
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