Ce zici de salutări tuturor, acesta este primul meu articol în <» DesdeLinux (din mai multe 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
psicopg2 -> 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 face acum ca tot ceea ce facem să fie stocat în director / 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 o vom configura, pentru aceasta vom crea un fișier numit gunicorn-deploy.py în rădăcina aplicației noastre, (deși numele poate fi orice) 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 să setăm supraveghetor, pentru aceasta 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 al 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 = Adevărat și schimbăm valoarea, rămas DEBUG = Fals
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 vom accesa, lăsâ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 dosar cu numele „statică în calea pe care o specificăm în settings.py ", acolo vor fi 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 tot, până la urmă nu era atât de adevărat? mi s-a părut simplu 😀
Sper să vă fie de folos, salutări 😉
Înțeleg că aplicația Django nu trebuie plasată în rădăcina folderului serverului web (/ var / www)? Pentru securitate, nu știu dacă mă înșel.
Salutări.
In regula !!! A fost ceva de care nu eram total conștient, voi actualiza intrarea 😛 și imediat ce mă întorc luni voi face modificări în aplicația xD
Mulţumiri
Frate Epale tutorial bun. Recent am fost și eu la fel, dar în Debian 7, a trebuit să caut și să citesc mai mult sau mai puțin. Vă recomand să creați mediul virtual virtualenv în casa utilizatorului într-un folder ascuns.
Salutări!
hahaha ctm ieri am documentat Django și deja treci prin galaxie 999999 Salutări bărbați xD
Articol foarte bun =) acum doar o săptămână mi-am implementat aplicația django dar am făcut-o cu uwsgi și nginx, știi ce avantaj are gunicorn? Am văzut că am menționat multe.
Este frumos să văd că django devine foarte popular, adevărul este cel mai bun cadru pe care l-am văzut =)
Pentru STATIC_ROOT ceea ce fac este să definesc o variabilă globală. Ceva de genul:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
Unde backend este o aplicație pe care am creat-o. În acest fel, mă asigur că acolo unde implementez proiectul, calea globală este aceeași.
Interesant, voi încerca în viitor.
Apropo, știe cineva cum să activeze accentele și caracterele non-ascii într-o aplicație django?
Am căutat peste tot, nici una dintre următoarele metode nu funcționează pentru mine:
sys.setdefaultencoding ('utf-8') # în sites.py
# - * - codare: utf-8 - * - # în fiecare fișier python
Editarea site.py și punerea utf-8 în loc de ascii ar trebui să funcționeze, dar $ file models.py mă informează că fișierul meu este încă un ascii.
Orice sugestii?
A mers!!!!
un tutorial foarte bun, dar ați putea face una dintre modalitățile de încărcare a aplicației mele pe un server web deja în producție
Gracias