Cum să implementați o aplicație Django:

Ce zici de salutări tuturor, acesta este primul meu articol în <» FromLinux (dintre câteva pe care le am în schițele mele xD), sper să vă fie de folos 

Ei bine, în noua și actuala mea slujbă, în acest moment se efectuează migrarea mai multor sisteme către Django (cât de ciudat eh ?? xD) și una dintre sarcinile mele, în afară de dezvoltare, este punerea acestora în producție, așa cum bun ucenic, deoarece a fost prima oară când pun o aplicație în producție pe un server real: $ Am început să citesc documentul oficial al fiecăruia dintre pachetele necesare ale stivei (Gunicorn și Supervisord mai ales) și văzând că tutorialele În spaniolă nu mi-au fost foarte clare în anumite aspecte, am decis să creez un mini ghid cu pașii pe care i-am urmat pentru a pune aplicația în producție, pe baza stivei Django, Gunicorn, Supervisord, Nginx și Postgresql.

În cazul în care lucrez, serverele încă rulează Debian Squeeze, dar ghidul ar trebui să fie pe deplin valabil pentru alte distribuții ... așa că hai să trecem direct la subiect și să începem:

Voi lucra ca super utilizator. În primul rând, sunt necesare următoarele pachete:

PIP -> Instrument pentru instalarea și gestionarea pachetelor pentru Python
aptitude install python-pip

nginx -> Server web (îl vom folosi ca un proxy invers și pentru a memora în cache fișierele statice „img, js, css”) Îl instalăm cu:
aptitude install nginx

Supervizor -> Aplicație pentru gestionarea și monitorizarea aplicației noastre, deși este utilizată pentru mult mai mult. Îl instalăm cu:
aptitude install supervisor

virtualenv -> Ne ajută să creăm un mediu de execuție virtual personalizat pentru aplicația noastră. Îl instalăm cu:
aptitude install python-virtualenv

Gunicorn -> Server web pentru Python (nu îl vom instala încă)

Presupun că ar trebui să aibă deja postgresql instalat și configurat

psycopg2 -> conector PostgreSQL pentru Python (nici nu îl vom instala încă)

Creați un mediu virtual cu virtualenv:

Mai întâi vom trece la directorul de lucru pe care îl vom folosi pentru punerea în producție:
cd /var/www/

Apoi, în acest director, vom crea mediul virtual:
virtualenv ENV-nombreApp

Ne mutăm în directorul pe care tocmai l-am creat virtualenv
cd ENV-nombreAPP

Copiem aplicația în acest director și acum procedăm la activarea mediului cu:
source bin/activate

Solicitarea ar trebui să arate acum (ENV)usuario@host:

Acest lucru va asigura că tot ceea ce facem este acum stocat în directorul /var/www/ENV-appname/ fără a afecta pachetele de sistem.

Acum trecem la directorul aplicației:
cd nombreApp

Procedăm la instalarea listei dependențelor aplicației (dacă este necesar), în care sunt specificate în fișier cerințe.txt:
pip install -r requirements.txt

De asemenea, putem instala pachete individual, de exemplu, pentru a instala conectorul PostgreSQL:
pip install psycopg2

Instalare și configurare GUnicorn:

Pentru ao instala, o facem în același mod:
pip install gunicorn

Acum haideți să-l configurăm. Pentru a face acest lucru, vom crea un fișier numit gunicorn-deploy.py în rădăcina aplicației noastre (deși numele poate fi oricare) cu următorul conținut:

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

Configurare supraveghere:

Acum haideți să configurăm supervisord-ul ; pentru asta, generăm fișierul de configurare cu

echo_supervisord_conf > /etc/supervisord.conf

Acum edităm fișierul de configurare:
vim /etc/supervisord.conf

Și decomentăm următoarele rânduri eliminând; (punct şi virgulă):

[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] 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

Acum vom crea scriptul pentru supervord pentru a începe cu sistemul, pentru asta vom crea fișierul:
vim /etc/init.d/supervisord

Și adăugăm următorul conținut:

 # 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 la început) echo -n "Început supraveghere:" $ SUPERVISORD echo ;; stop) echo -n "Stopping supervisord:" $ SUPERVISORCTL shutdown echo ;; restart) echo -n "Oprirea supravegherii:" $ SUPERVISORCTL shutdown echo echo -n "Pornirea supravegherii:" $ SUPERVISORD echo ;; că C

Și acum acordăm permisiuni de executare fișierului, astfel încât acesta să poată începe cu sistemul:
sudo chmod +x /etc/init.d/supervisord

Actualizăm linkurile pentru a porni serviciul:
sudo update-rc.d supervisord defaults

Începem serviciul:
sudo /etc/init.d/supervisord start

Configurarea nginx:

Acest pas este, de asemenea, destul de simplu; vom crea următorul fișier de configurare nginx pentru aplicația noastră:

vim /etc/nginx/sites-enabled/nombreApp

Și vă vom adăuga următorul conținut

server {asculta 9001; # portul în care doresc ca nginx să asculte server_name www.domain.com; # sau 192.168.0.100, adresa la care vom accesa access_log /var/log/nginx/Appname.access.log; # unde vom avea locația jurnalului aplicației / {# unde va apela nginx la accesarea www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Gazdă $ http_host; } locație / static / {# unde va accesa nginx când intrăm pe www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

Și repornim nginx:
service nginx restart

Configurarea Django:

Să modificăm fișierul de configurare django:
vim nombreApp/settings.py

Căutăm linia care spune DEBUG = True și îi modificăm valoarea , lăsând DEBUG = False.

Adăugăm parametrii DB:

DATABASES = {'implicit': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # sau mysql, sau orice altceva pe care îl folosesc 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'parolă DB', 'HOST': 'localhost', # sau cel de care au nevoie 'PORT': '', # sau cel pe care îl folosesc}}

Căutăm linia ALLOWED_HOSTS=[] și adăugăm domeniul sau adresa prin care o vom accesa, rezultând ceva de genul ALLOWED_HOSTS=['www.domain.com']

Configurăm directorul pentru fișierele statice, căutăm linia care spune STATIC_ROOT = ' ' și schimbăm valoarea, plasând calea absolută unde vrem să fie fișierele noastre statice, în cazul meu l-am lăsat mai mult sau mai puțin așa STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Aproape terminat, executăm următoarea comandă:
./manage.py collectstatic

Aceasta va crea un folder numit „ statics” în calea specificată în settings.py , unde vor fi localizate toate fișierele noastre statice.

Și, în cele din urmă, repornim supervizorul pentru a lua noile modificări:
supervisorctl restart nombreApp

Și asta ar fi, până la urmă nu a fost așa de mare lucru, nu? Mi s-a părut simplu 

Sper să vă fie de folos, salutări 

Documentație GUnicorn

Documentația supravegherii


Adăugați ca sursă preferată în Google