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

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 😉

Documentație GUnicorn

Documentația supravegherii


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   f3niX el a spus

    Î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.

    1.    urKh el a spus

      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

  2.   Rodrigo Bravo (goidor) el a spus

    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!

  3.   serv fenriz el a spus

    hahaha ctm ieri am documentat Django și deja treci prin galaxie 999999 Salutări bărbați xD

  4.   daniel2ac el a spus

    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 =)

  5.   ozkar el a spus

    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.

  6.   sgmart el a spus

    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?

    1.    sgmart el a spus

      A mers!!!!

  7.   anime230 el a spus

    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