Kako rasporediti Django aplikaciju:

Što kažete na pozdrav svima, ovo je moj prvi članak u <» DesdeLinux (de varios que tengo en mis borradores xD), espero les sea de utilidad 😀

Pa, na mom novom i trenutnom poslu, trenutno se provodi migracija nekoliko sustava na Django (koliko je to čudno? XD), a jedan od mojih zadataka, osim razvoja, je stavljanje u proizvodnju tih, zatim kao dobar šegrt, budući da sam prvi put pustio aplikaciju u produkciju na pravom poslužitelju: $ Počeo sam čitati službeni dokument svakog od potrebnih paketa steka (Gunicorn i Supervisord više od svih), i vidjevši da tutoriali Na španjolskom mi u nekim aspektima nisu bili previše jasni, odlučio sam stvoriti mini vodič s koracima koje sam slijedio za puštanje aplikacije u proizvodnju, temeljeno na hrpi Django, Gunicorn, Supervisord, Nginx i Postgresql.

U slučaju kada radim, poslužitelji i dalje rade na Debian Squeezeu, ali vodič bi trebao biti potpuno valjan za ostale distribucije ... pa krenimo odmah na stvar i krenimo:

Radit ću kao super korisnik. Prije svega, potrebni su sljedeći paketi:

PIP -> Alat za instaliranje i upravljanje paketima za Python
aptitude install python-pip

Nginx -> Web poslužitelj (koristit ćemo ga kao obrnuti proxy i za predmemoriranje statičkih datoteka 'img, js, css') Instaliramo ga sa:
aptitude install nginx

Nadglednik -> Aplikacija za upravljanje i nadzor naše aplikacije, iako se koristi za mnogo više. Instaliramo ga sa:
aptitude install supervisor

virtualenv -> Pomaže nam u stvaranju prilagođenog virtualnog okruženja za izvršavanje naše aplikacije. Instaliramo ga sa:
aptitude install python-virtualenv

gunicorn -> web poslužitelj za python (ovo još nećemo instalirati)

Pretpostavljam da bi već trebali instalirati i konfigurirati postgresql

psihopg2 -> Postgresql konektor za python (nećemo ga još ni instalirati)

Stvorite virtualno okruženje s virtualenv:

Prvo ćemo prijeći na radni direktorij koji ćemo koristiti za puštanje u proizvodnju:
cd /var/www/

Tada ćemo u ovom direktoriju stvoriti virtualno okruženje:
virtualenv ENV-nombreApp

Prelazimo na direktorij koji sam upravo stvorio virtualenv
cd ENV-nombreAPP

Kopiramo aplikaciju u ovaj direktorij i sada nastavljamo s aktiviranjem okoline pomoću:
source bin/activate

Upit bi sada trebao izgledati (ENV)usuario@host:

Ovo će sada učiniti da sve što radimo bude pohranjeno u direktoriju / var / www / ENV-appname / bez utjecaja na sistemske pakete

Sada prelazimo na direktorij aplikacija:
cd nombreApp

Nastavljamo s instaliranjem popisa ovisnosti aplikacija (ako je potrebno), u kojem su navedene u datoteci zahtjevi.txt:
pip install -r requirements.txt

Pakete također možemo instalirati pojedinačno, na primjer za instaliranje konektora PostgreSQL:
pip install psycopg2

Instalacija i konfiguracija GUnicorn:

Da bismo ga instalirali, radimo to na isti način:
pip install gunicorn

Sada ćemo ga konfigurirati, za to ćemo stvoriti datoteku pod nazivom gunicorn-deploy.py u korijenu naše aplikacije (iako naziv može biti bilo koji) sa sljedećim sadržajem:

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

Konfiguracija supervizora:

Sada postavimo nadglednik, za to generiramo konfiguracijsku datoteku s

echo_supervisord_conf > /etc/supervisord.conf

Sada uređujemo konfiguracijsku datoteku:
vim /etc/supervisord.conf

I mi komentiramo sljedeće retke uklanjanjem; (točka i zarez):

[unix_http_server] datoteka = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50 MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervizor] 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 direktorij = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Korisničko ime redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Sada ćemo stvoriti skriptu za nadzor da započne sa sustavom, za to ćemo stvoriti datoteku:
vim /etc/init.d/supervisord

I dodajemo sljedeći sadržaj:

 # Automatsko pokretanje supervisorda # # opis: Automatsko pokretanje supervisorda # naziv procesa: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 u startu) echo -n "Pokretanje nadzora:" $ SUPERVISORD echo ;; stop) echo -n "Zaustavljanje nadzora:" $ SUPERVISORCTL isključivanje eha ;; ponovno pokretanje) echo -n "Zaustavljanje nadzora:" $ SUPERVISORCTL zaustavljanje echo -n "Pokretanje nadzora:" $ SUPERVISORD echo ;; da je C

A sada dajemo dozvolu za izvršavanje datoteke kako bi mogla započeti sa sustavom:
sudo chmod +x /etc/init.d/supervisord

Ažuriramo veze za pokretanje usluge:
sudo update-rc.d supervisord defaults

Uslugu započinjemo:
sudo /etc/init.d/supervisord start

Postavljanje nginxa:

Ovaj je korak također prilično jednostavan, stvorit ćemo sljedeću konfiguracijsku datoteku od Nginx za našu prijavu:

vim /etc/nginx/sites-enabled/nombreApp

A mi ćemo vam dodati sljedeći sadržaj

poslužitelj {preslušaj 9001; # priključak na kojem žele da nginx sluša ime poslužitelja www.domain.com; # ili 192.168.0.100, adresa kojoj ćemo pristupiti access_log /var/log/nginx/Appname.access.log; # gdje ćemo imati mjesto dnevnika aplikacija / {# gdje će nginx nazvati prilikom pristupa www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } location / static / {# gdje će nginx pristupiti kada uđemo na www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

I ponovno pokrećemo nginx:
service nginx restart

Postavljanje Djanga:

Izmijenimo konfiguracijsku datoteku django:
vim nombreApp/settings.py

Tražimo crtu koja kaže DEBUG = Istina a mi mijenjamo vrijednost, preostalo DEBUG = Lažno

Dodamo DB parametre:

DATABASE = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # ili mysql, ili bilo što 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' koriste: 'DB password', 'HOST': 'localhost', # ili onaj koji im treba 'PORT': '', # ili onaj koji koriste}}

Tražimo crtu ALLOWED_HOSTS = [] i dodamo domenu ili adresu putem koje ćemo pristupiti, ostavljajući nešto poput ALLOWED_HOSTS = ['www.domena.com']

Konfiguriramo direktorij za statičke datoteke, tražimo redak koji kaže STATIC_ROOT = ' ' i mijenjamo vrijednost, postavljajući apsolutni put tamo gdje želimo da budu naše statičke datoteke, u mom slučaju ostavio sam to više-manje ovako STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Gotovo gotovi, izvršavamo sljedeću naredbu:
./manage.py collectstatic

Ovo će stvoriti mapu s imenom 'statika na putu koji smo naveli u postavke.py ', tu će biti sve naše statičke datoteke.

I na kraju ponovno pokrećemo nadzornika kako bi preuzeo nove promjene:
supervisorctl restart nombreApp

I to bi bilo sve, na kraju to i nije bilo toliko istina? činilo mi se jednostavno 😀

Nadam se da će vam biti od koristi, pozdrav 😉

GUnicorn dokumentacija

Dokumentacija supervizora


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   f3niX dijo

    Razumijem da se aplikacija Django ne smije stavljati u korijen mape web poslužitelja (/ var / www)? Iz sigurnosnih razloga ne znam griješim li.

    Pozdrav.

    1.    urKh dijo

      U redu !!! Bilo je to nešto čega nisam bio potpuno svjestan, ažurirat ću unos 😛 i čim se vratim u ponedjeljak izvršit ću promjene u xD aplikaciji
      hvala

  2.   Rodrigo Bravo (goidor) dijo

    Epale brat dobar tutorial. Nedavno sam također bio u istom, ali u Debianu 7 morao sam pretraživati ​​i čitati manje-više. Preporučujem da kreirate virtualno okruženje virtualenv u korisnikovom domu u skrivenoj mapi.

    Pozdrav!

  3.   služiti fenriz dijo

    hahaha ctm jučer sam dokumentirao Django i već prolazite kroz galaksiju 999999 Pozdrav muškarci xD

  4.   daniel2ac dijo

    Vrlo dobar članak =) prije samo tjedan dana rasporedio sam svoju django aplikaciju, ali učinio sam to s uwsgi i nginx, znate li kakvu prednost ima gunicorn? Vidio sam da se puno spominje.
    Lijepo je vidjeti da django postaje vrlo popularan, istina je najbolji okvir koji sam vidio =)

  5.   ozkar dijo

    Za STATIC_ROOT ono što radim je definiranje globalne varijable. Nešto kao ovo:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

    Gdje je backend aplikacija koju sam kreirao. Stoga osiguravam da je tamo gdje implementiram projekt globalni put isti.

  6.   sgmart dijo

    Zanimljivo, pokušat ću u budućnosti.

    Usput, zna li netko kako omogućiti naglaske i ne-ascii znakove u django aplikaciji?

    Svugdje sam tražio, niti jedna od sljedećih metoda mi ne odgovara:
    sys.setdefaultencoding ('utf-8') # u sites.py

    # - * - kodiranje: utf-8 - * - # u svakoj python datoteci

    Uređivanje site.py i stavljanje utf-8 umjesto ascii trebalo bi raditi, ali $ file models.py me obavještava da je moja datoteka još uvijek ascii.

    Bilo koji prijedlog?

    1.    sgmart dijo

      Upalilo je!!!!

  7.   anime230 dijo

    vrlo dobar vodič, ali biste li mogli učiniti jedno od toga kako prenijeti moju aplikaciju na web poslužitelj koji je već u fazi izrade
    hvala