Hur man distribuerar en Django-applikation:

Vad sägs om hälsningar till alla, detta är min första artikel i <» FromLinux (av flera som jag har i mina utkast xD), jag hoppas att den är användbar för dig 

Tja, i mitt nya och nuvarande jobb, för tillfället genomförs migrering av flera system till Django (hur konstigt va ?? xD) och en av mina uppgifter, förutom utveckling, är att sätta dessa i produktion, så hur bra lärling, eftersom det var första gången jag satte en applikation i produktion på en riktig server: $ Jag började läsa det officiella dokumentet för alla paket som krävs i stacken (Gunicorn och Supervisord mer än alla), och såg att självstudierna i Spanska de var inte så tydliga för mig i vissa aspekter, jag bestämde mig för att skapa en miniguide med de steg som jag följde för att sätta applikationen i produktion, baserad på stacken Django, Gunicorn, Supervisord, Nginx och Postgresql.

I det fall jag arbetar körs servrarna fortfarande på Debian Squeeze, men guiden bör vara helt giltig för andra distributioner ... så låt oss komma direkt till saken och komma igång:

Jag kommer att arbeta som superanvändare. Först och främst krävs följande paket:

PIP -> Verktyg för att installera och hantera paket för Python
aptitude install python-pip

nginx -> Webbserver (vi använder den som en omvänd proxy och för att cache de statiska filerna 'img, js, css') Vi installerar den med:
aptitude install nginx

Supervisord -> Applikation för att hantera och övervaka vår applikation, även om den används för mycket mer. Vi installerar det med:
aptitude install supervisor

virtualenv -> Det hjälper oss att skapa en anpassad virtuell exekveringsmiljö för vår applikation. Vi installerar det med:
aptitude install python-virtualenv

gunicorn -> webbserver för python (vi installerar inte detta ännu)

Jag antar att de redan borde ha installerat och konfigurerat postgresql

psychopg2 -> Postgresql-kontakt för python (vi installerar inte heller än)

Skapa virtuell miljö med virtualenv:

Först ska vi flytta till den arbetskatalog som vi kommer att använda för att sätta i produktion:
cd /var/www/

Sedan skapar vi den virtuella miljön i den här katalogen:
virtualenv ENV-nombreApp

Vi flyttar till katalogen som jag just skapade virtualenv
cd ENV-nombreAPP

Vi kopierar applikationen i den här katalogen och nu fortsätter vi med att aktivera miljön med:
source bin/activate

Prompten ska nu se ut (ENV)usuario@host:

Detta gör att allt vi gör lagras i katalogen / var / www / ENV-appname / utan att påverka systempaket

Nu går vi till applikationskatalogen:
cd nombreApp

Vi fortsätter med att installera listan över applikationsberoenden (om nödvändigt), där de anges i filen requirements.txt:
pip install -r requirements.txt

Vi kan också installera paket individuellt, till exempel för att installera anslutningen till postgresql:
pip install psycopg2

GUnicorn installation och konfiguration:

För att installera det gör vi det på samma sätt:
pip install gunicorn

Nu ska vi konfigurera det, för detta ska vi skapa en fil som heter gunicorn-deploy.py i roten till vår ansökan (även om namnet kan vara vad som helst) med följande innehåll:

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

Övervakningskonfiguration:

Låt oss nu ställa in supervisord, för det genererar vi konfigurationsfilen med

echo_supervisord_conf > /etc/supervisord.conf

Nu redigerar vi konfigurationsfilen:
vim /etc/supervisord.conf

Och vi kommenterar följande rader genom att ta bort; (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 = falska minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appnamn] command = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Username redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Nu skapar vi skriptet för övervakning för att börja med systemet, för det skapar vi filen:
vim /etc/init.d/supervisord

Och vi lägger till följande innehåll:

 # Supervisord auto-start # # description: Auto-starts supervisord # processname: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 i start) echo -n "Startar överordnad:" $ SUPERVISORD echo ;; stop) echo -n "Stoppar övervakaren:" $ SUPERVISORCTL avstängningseko ;; starta om) echo -n "Stoppar övervakaren:" $ SUPERVISORCTL avstängning echo echo -n "Startar övervakaren:" $ SUPERVISORD echo ;; att C

Och nu ger vi filen körbehörigheter så att den kan börja med systemet:
sudo chmod +x /etc/init.d/supervisord

Vi uppdaterar länkarna för att starta tjänsten:
sudo update-rc.d supervisord defaults

Vi startar tjänsten:
sudo /etc/init.d/supervisord start

Ställa in nginx:

Detta steg är också ganska enkelt, vi skapar följande konfigurationsfil av nginx för vår ansökan:

vim /etc/nginx/sites-enabled/nombreApp

Och vi kommer att lägga till följande innehåll till dig

server {lyssna 9001; # port där de vill att nginx server_name ska lyssna på www.domain.com; # eller 192.168.0.100, adress att vi kommer åt access_log /var/log/nginx/Appname.access.log; # där vi kommer att ha applikationsloggplatsen / {# där nginx kommer att ringa vid åtkomst till www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Värd $ http_host; } plats / statisk / {# där nginx kommer åt när vi anger www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

Och vi startar om nginx:
service nginx restart

Ställa in Django:

Låt oss ändra django-konfigurationsfilen:
vim nombreApp/settings.py

Vi letar efter linjen som säger DEBUG = Sant och vi ändrar värdet, återstående DEBUG = Falskt

Vi lägger till DB-parametrarna:

DATABASES = {'default': {'MOTOR': 'django.db.backends.postgresql_psycopg2', # eller mysql, eller vad som helst 'NAME': 'DBName', 'USER': 'DBUser', 'LÖSENORD' använder: 'lösenord DB', 'HOST': 'localhost', # eller det de behöver 'PORT': '', # eller det de använder}}

Vi letar efter linjen ALLOWED_HOSTS = [] och vi lägger till domänen eller adressen som vi kommer åt genom att lämna något liknande ALLOWED_HOSTS = ['www.domän.com']

Vi konfigurerar katalogen för de statiska filerna, vi letar efter raden som säger STATIC_ROOT = ' ' och vi ändrar värdet, placerar den absoluta sökvägen där vi vill att våra statiska filer ska vara, i mitt fall lämnade jag det mer eller mindre så här STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Nästan färdigt utför vi följande kommando:
./manage.py collectstatic

Detta skapar en mapp med namnet 'statik i den sökväg som vi anger i settings.py ', det är där alla våra statiska filer kommer att vara.

Och slutligen startar vi om handledaren för att ta de nya ändringarna:
supervisorctl restart nombreApp

Och det skulle vara det, i slutändan var det inte så stor sak, eller hur? Det verkade enkelt för mig 

Jag hoppas att det är användbart för dig, hälsningar 

GUnicorn-dokumentation

Supervisordokumentation


Lägg till som prioriterad källa i Google