Kako postaviti Django aplikaciju:

Što kažete na pozdrav svima, ovo je moj prvi članak u <»Iz Linuxa (od nekoliko koje imam u skicama xD), nadam se da će biti koristan 😀

Pa, na mom novom i trenutnom poslu, trenutno se vrši migracija nekoliko sistema na Django (koliko je čudno, a? XD) i jedan od mojih zadataka, osim razvoja, je stavljanje u proizvodnju tih, zatim kao dobar pripravnik, budući da sam prvi put pustio aplikaciju u produkciju na pravom serveru: $ Počeo sam čitati službeni dokument svakog od potrebnih paketa steka (Gunicorn i Supervisord ponajviše), i vidjevši da tutorijali Na španskom nisu mi bili previše jasni u nekim aspektima, odlučio sam stvoriti mini vodič sa koracima koje sam slijedio za puštanje aplikacije u proizvodnju, zasnovan na Django, Gunicorn, Supervisord, Nginx i Postgresql stogu.

U slučaju kada radim, poslužitelji i dalje rade na Debian Squeezeu, ali vodič bi trebao biti potpuno valjan za druge 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 server (koristit ćemo ga kao obrnuti proxy i za predmemoriranje statičkih datoteka 'img, js, css') Instaliramo ga sa:
aptitude install nginx

Supervizor -> Aplikacija za upravljanje i nadgledanje 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 server za python (ovo još nećemo instalirati)

Pretpostavljam da bi već trebali instalirati i konfigurirati postgresql

psycopg2 -> 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 kreirao 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 liste zavisnosti aplikacija (ako je potrebno), u kojoj su one navedene u datoteci Zahtevi.txt:
pip install -r requirements.txt

Takođe možemo instalirati pakete 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 koja se zove gunicorn-deploy.py u korijenu naše aplikacije, (iako ime može biti bilo koje) 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 supervisorda:

Sada postavimo supervizor, 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 redove uklanjanjem; (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 = username redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Sada ćemo stvoriti skriptu za nadzor da započne sa sistemom, 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 ;; restart) echo -n "Zaustavljanje nadzora:" $ SUPERVISORCTL isključivanje echo -n "Pokretanje nadzora:" $ SUPERVISORD echo ;; da je C

I sada dajemo dozvolu za izvršavanje datoteke kako bi mogla započeti sa sistemom:
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 aplikaciju:

vim /etc/nginx/sites-enabled/nombreApp

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

server {slušati 9001; # port na kojem žele da nginx preslušava ime_domain.com; # ili 192.168.0.100, adresa kojoj ćemo pristupiti access_log /var/log/nginx/Appname.access.log; # gdje ćemo imati lokaciju evidencije aplikacija / {# gdje će nginx pozvati kada pristupi 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 ponovo pokrećemo nginx:
service nginx restart

Postavljanje Djanga:

Izmijenimo konfiguracijsku datoteku django:
vim nombreApp/settings.py

Tražimo liniju koja kaže DEBUG = Tačno i mijenjamo vrijednost, preostalo DEBUG = Netačno

Dodamo DB parametre:

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

Tražimo liniju ALLOWED_HOSTS = [] i dodamo domenu ili adresu preko koje ćemo pristupiti, ostavljajući nešto slično ALLOWED_HOSTS = ['www.domena.com']

Konfiguriramo direktorij za statičke datoteke, tražimo red 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 sam je ostavio 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 settings.py ', tu će biti sve naše statičke datoteke.

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

I to bi bilo to, na kraju nije bilo tako loše? činilo mi se jednostavno 😀

Nadam se da će vam biti korisno, pozdrav 😉

 

GUnicorn dokumentacija

Dokumentacija supervizora

 


Sadržaj članka pridržava se naših principa urednička etika. Da biste prijavili grešku, kliknite ovdje.

9 komentara, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   F3niX rekao je

    Razumijem da aplikacija Django ne bi trebala biti smještena u korijen mape web servera (/ var / www)? Iz sigurnosnih razloga ne znam da li griješim.

    Pozdrav.

    1.    urKh rekao je

      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) rekao je

    Epale brat dobar tutorial. Nedavno sam bio i 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.   Serv Fenriz rekao je

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

  4.   daniel2ac rekao je

    Vrlo dobar članak =) prije samo tjedan dana primijenio 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 rekao je

    Za STATIC_ROOT ono što radim je definiranje globalne varijable. Ovako nešto:

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

    Gdje je pozadina aplikacija koju sam kreirao. Stoga osiguravam da tamo gdje implementiram projekat globalni put bude isti.

  6.   sgmart rekao je

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

    Inače, svako zna kako omogućiti akcente i ne-ascii znakove u django aplikaciji

    Gledao sam svugdje, nijedna 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.

    Neki prijedlog?

    1.    sgmart rekao je

      Uspjelo je !!!!

  7.   anime230 rekao je

    vrlo dobar vodič, ali možete li napraviti jedan od načina za postavljanje moje aplikacije na web server koji je već u fazi izrade
    hvala