Slik distribuerer du en Django-applikasjon:

Hva med hilsener til alle, dette er min første artikkel i <» FromLinux (av flere som jeg har i mine utkast xD), jeg håper den er nyttig for deg 

Vel, i min nye og nåværende jobb, for øyeblikket blir migrering av flere systemer til Django utført (hvor rart ikke ?? xD) og en av oppgavene mine, bortsett fra utvikling, er å sette disse i produksjon, så hvor bra lærling, siden det var første gang jeg satte en applikasjon i produksjon på en ekte server: $ Jeg begynte å lese det offisielle dokumentet til hver av de nødvendige pakkene i bunken (Gunicorn og Supervisord mest av alt), og så at veiledningene i Spansk de var ikke veldig klare for meg i noen aspekter, jeg bestemte meg for å lage en miniguide med trinnene jeg fulgte for å sette applikasjonen i produksjon, basert på Django, Gunicorn, Supervisord, Nginx og Postgresql stack.

I tilfelle der jeg jobber, kjører serverne fremdeles Debian Squeeze, men guiden skal være fullstendig gyldig for andre distribusjoner ... så la oss komme rett til poenget og komme i gang:

Jeg skal jobbe som superbruker. Først og fremst kreves følgende pakker:

PIP -> Verktøy for å installere og administrere pakker for Python
aptitude install python-pip

Nginx -> Webserver (vi vil bruke den som en omvendt proxy og til å cache de statiske filene 'img, js, css') Vi installerer den med:
aptitude install nginx

Veileder -> Søknad for å administrere og overvåke applikasjonen vår, selv om den brukes til mye mer. Vi installerer den med:
aptitude install supervisor

virtualenv -> Det hjelper oss å lage et tilpasset virtuelt kjøringsmiljø for applikasjonen vår. Vi installerer den med:
aptitude install python-virtualenv

Gunicorn -> Webserver for Python (vi installerer ikke dette ennå)

Jeg antar at de allerede skal ha postgresql installert og konfigurert

psycopg2 -> PostgreSQL-kobling for Python (vi installerer den heller ikke ennå)

Opprett virtuelt miljø med virtualenv:

Først skal vi flytte til arbeidskatalogen som vi vil bruke til å sette i produksjon:
cd /var/www/

Så i denne katalogen vil vi lage det virtuelle miljøet:
virtualenv ENV-nombreApp

Vi flytter til katalogen som jeg nettopp opprettet virtualenv
cd ENV-nombreAPP

Vi kopierer applikasjonen i denne katalogen, og nå fortsetter vi med å aktivere miljøet med:
source bin/activate

Prompten skal nå se ut (ENV)usuario@host:

Dette vil sikre at alt vi gjør nå lagres i /var/www/ENV-appname/ -katalogen uten å påvirke systempakkene

Nå går vi til applikasjonskatalogen:
cd nombreApp

Vi fortsetter å installere listen over applikasjonsavhengigheter (hvis nødvendig), der de er spesifisert i filen krav.txt:
pip install -r requirements.txt

Vi kan også installere pakker individuelt, for eksempel for å installere kontakten til PostgreSQL:
pip install psycopg2

GUnicorn installasjon og konfigurasjon:

For å installere det gjør vi det på samme måte:
pip install gunicorn

La oss nå konfigurere det. For å gjøre dette, oppretter vi en fil kalt gunicorn-deploy.py i roten av applikasjonen vår (selv om navnet kan være hva som helst) med følgende innhold:

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-konfigurasjon:

La oss nå konfigurere supervisord ; for det genererer vi konfigurasjonsfilen med

echo_supervisord_conf > /etc/supervisord.conf

Nå redigerer vi konfigurasjonsfilen:
vim /etc/supervisord.conf

Og vi kommenterer følgende linjer ved å fjerne; (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 = falske minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appnavn] 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 = Brukernavn redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Nå skal vi lage skriptet for supervisord for å starte med systemet, for det skal vi lage filen:
vim /etc/init.d/supervisord

Og vi legger til følgende innhold:

 # 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 "Starter tilsyn:" $ SUPERVISORD ekko ;; stop) echo -n "Stopping supervisord:" $ SUPERVISORCTL shutdown echo ;; start på nytt) echo -n "Stopper supervisord:" $ SUPERVISORCTL shutdown echo echo -n "Starter supervisord:" $ SUPERVISORD echo ;; at C

Og nå gir vi kjennetillatelser til filen slik at den kan starte med systemet:
sudo chmod +x /etc/init.d/supervisord

Vi oppdaterer lenkene for å starte tjenesten:
sudo update-rc.d supervisord defaults

Vi starter tjenesten:
sudo /etc/init.d/supervisord start

Sette opp nginx:

Dette trinnet er også ganske enkelt; vi vil opprette følgende nginx -konfigurasjonsfil for applikasjonen vår:

vim /etc/nginx/sites-enabled/nombreApp

Og vi vil legge til følgende innhold til deg

server {listen 9001; # port der de vil at nginx servernavn skal lytte www.domain.com; # eller 192.168.0.100, adresse som vi får tilgang til access_log /var/log/nginx/Appname.access.log; # hvor vi vil ha applikasjonsloggplasseringen / {# hvor nginx vil ringe når du får tilgang til www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Vert $ http_host; } location / static / {# hvor nginx får tilgang når vi skriver inn www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

Og vi starter nginx på nytt:
service nginx restart

Sette opp Django:

La oss endre django-konfigurasjonsfilen:
vim nombreApp/settings.py

Vi ser etter linjen som sier DEBUG = True og endrer verdien , slik at DEBUG = False blir igjen.

Vi legger til DB-parametrene:

DATABASES = {'standard': {'MOTOR': 'django.db.backends.postgresql_psycopg2', # eller mysql, eller hva de bruker 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'passord DB', 'HOST': 'localhost', # eller den de trenger 'PORT': '', # eller den de bruker}}

Vi ser etter linjen ALLOWED_HOSTS=[] og legger til domenet eller adressen vi skal bruke for å få tilgang til den. Dette resulterer i noe sånt som ALLOWED_HOSTS=['www.domain.com']

Vi konfigurerer katalogen for de statiske filene, vi ser etter linjen som sier STATIC_ROOT = ' ' og vi endrer verdien, plasserer den absolutte banen der vi vil at våre statiske filer skal være, i mitt tilfelle la jeg den mer eller mindre slik STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Nesten ferdig utfører vi følgende kommando:
./manage.py collectstatic

Dette vil opprette en mappe med navnet « statics» i banen vi spesifiserte i settings.py , som er der alle de statiske filene våre vil bli plassert.

Og til slutt starter vi veilederen på nytt for å ta de nye endringene:
supervisorctl restart nombreApp

Og det ville være det, til slutt var det ikke så stor sak, ikke sant? Det virket enkelt for meg 

Jeg håper det er nyttig for deg, hilsen 

GUnicorn dokumentasjon

Veiledningsdokumentasjon


Legg til som foretrukket kilde i Google