Kako razmestiti aplikacijo Django:

Lep pozdrav vsem, to je moj prvi članek v <» DesdeLinux (od več, ki jih imam v osnutkih xD), upam, da vam bo koristilo 😀

No, v moji novi in ​​sedanji službi se trenutno izvaja migracija več sistemov na Django (kako čudno, kaj ?? xD) in ena od mojih nalog, razen razvoja, je dajanje v proizvodnjo teh, nato kot dober vajenec, saj sem prvič dal aplikacijo v produkcijo na resničnem strežniku: $ Začel sem brati uradni dokument vsakega od zahtevanih paketov sklada (Gunicorn in Supervisord bolj kot vsi) in videti, da Vadnice V španščini mi v nekaterih pogledih niso bile preveč jasne. Odločil sem se, da bom ustvaril mini vodnik s koraki, ki sem jih uporabil za začetek uporabe, na osnovi skladov Django, Gunicorn, Supervisord, Nginx in Postgresql.

V primeru, da delam, strežniki še vedno delujejo na Debian Squeeze, vendar bi moral biti vodnik popolnoma veljaven za druge distribucije ... zato pojdimo naravnost na stvar in začnimo:

Delal bom kot super uporabnik. Najprej so potrebni naslednji paketi:

PIP -> Orodje za namestitev in upravljanje paketov za Python
aptitude install python-pip

Nginx -> Spletni strežnik (uporabili ga bomo kot obratni proxy in za predpomnjenje statičnih datotek 'img, js, css') Namestimo ga z:
aptitude install nginx

Nadzornik -> Aplikacija za upravljanje in spremljanje naše aplikacije, čeprav se uporablja za veliko več. Namestimo ga z:
aptitude install supervisor

virtualenv -> Pomaga nam ustvariti prilagojeno virtualno okolje za izvajanje naše aplikacije. Namestimo ga z:
aptitude install python-virtualenv

gunicorn -> spletni strežnik za python (tega še ne bomo namestili)

Predvidevam, da bi morali že imeti nameščen in konfiguriran postgresql

psihopg2 -> konektor Postgresql za python (tudi tega še ne bomo namestili)

Ustvari navidezno okolje z virtualenv:

Najprej se bomo preselili v delovni imenik, ki ga bomo uporabili za začetek proizvodnje:
cd /var/www/

Nato bomo v tem imeniku ustvarili navidezno okolje:
virtualenv ENV-nombreApp

Premaknemo se v imenik, ki sem ga pravkar ustvaril virtualenv
cd ENV-nombreAPP

Kopiramo aplikacijo v ta imenik in zdaj nadaljujemo z aktiviranjem okolja z:
source bin/activate

Poziv bi moral biti videti zdaj (ENV)usuario@host:

Tako bomo vse, kar počnemo, shranili v imenik / var / www / ENV-appname / brez vpliva na sistemske pakete

Zdaj se premaknemo v imenik aplikacij:
cd nombreApp

Nadaljujemo z namestitvijo seznama aplikacijskih odvisnosti (če je potrebno), v katerem so navedene v datoteki zahteve.txt:
pip install -r requirements.txt

Pakete lahko namestimo tudi posamezno, na primer za namestitev konektorja postgresql:
pip install psycopg2

Namestitev in konfiguracija GUnicorn:

Če ga želite namestiti, to storimo na enak način:
pip install gunicorn

Zdaj ga bomo konfigurirali, zato bomo ustvarili datoteko z imenom gunicorn-deploy.py v korenu naše aplikacije (čeprav je ime lahko katero koli) z naslednjo vsebino:

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 nadzornika:

Zdaj pa nastavimo nadzornik, za to ustvarimo konfiguracijsko datoteko z

echo_supervisord_conf > /etc/supervisord.conf

Zdaj uredimo konfiguracijsko datoteko:
vim /etc/supervisord.conf

In naslednje komentarje razkomentiramo z odstranitvijo; (podpičje):

[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: nadzornik] 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 = Uporabniško ime redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Zdaj bomo ustvarili skript za nadzor, da se začne s sistemom, zato bomo ustvarili datoteko:
vim /etc/init.d/supervisord

In dodamo naslednjo vsebino:

 # Samodejni zagon Supervisord # # opis: Samodejni zagon supervisord # ime procesa: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 v začetku) echo -n "Začetni nadzor:" $ SUPERVISORD echo ;; stop) echo -n "Zaustavitev nadzora:" $ SUPERVISORCTL zaustavitev echo ;; ponovni zagon) echo -n "Zaustavitev nadzora:" $ SUPERVISORCTL shutdown echo echo -n "Zagon nadzora:" $ SUPERVISORD echo ;; da je C

Zdaj damo datoteki dovoljenja za izvajanje, da se lahko začne s sistemom:
sudo chmod +x /etc/init.d/supervisord

Za zagon storitve posodobimo povezave:
sudo update-rc.d supervisord defaults

Storitev začnemo:
sudo /etc/init.d/supervisord start

Nastavitev nginxa:

Ta korak je tudi precej preprost, ustvarili bomo naslednjo konfiguracijsko datoteko nginx za našo prijavo:

vim /etc/nginx/sites-enabled/nombreApp

In dodali vam bomo naslednjo vsebino

strežnik {poslušaj 9001; # vrata, kjer želijo, da nginx server_name posluša www.domain.com; # ali 192.168.0.100, naslov, do katerega bomo dostopali dostop_log /var/log/nginx/Appname.access.log; # kjer bomo imeli lokacijo dnevnika aplikacij / {# kamor bo nginx poklical pri dostopu do www.dominio.com/ proxy_pass http://127.0.0.1:8001; gostitelj proxy_set_header $ http_host; } location / static / {#, kjer bo nginx dostopal, ko vnesemo www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

In znova zaženemo nginx:
service nginx restart

Nastavitev Djanga:

Spremenimo konfiguracijsko datoteko django:
vim nombreApp/settings.py

Iščemo vrstico, ki pravi DEBUG = Res in spremenimo vrednost, preostali DEBUG = Napačno

Dodamo parametre DB:

DATABASE = {'privzeto': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # ali mysql, ali karkoli že uporabljajo 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'DB DB', 'HOST': 'localhost', # ali tisti, ki ga potrebujejo 'PORT': '', # ali tistega, ki ga uporabljajo}}

Iščemo črto ALLOWED_HOSTS = [] in dodamo domeno ali naslov, prek katerega bomo dostopali, in pustimo nekaj podobnega ALLOWED_HOSTS = ['www.domena.com']

Konfiguriramo imenik za statične datoteke, iščemo vrstico, ki pravi STATIC_ROOT = ' ' in spremenimo vrednost in postavimo absolutno pot tja, kjer želimo, da so naše statične datoteke, v mojem primeru sem jo pustil bolj ali manj tako STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Skoraj končani izvedemo naslednji ukaz:
./manage.py collectstatic

S tem boste ustvarili mapo z imenom 'statika na poti, ki smo jo določili v settings.py ", tam bodo vse naše statične datoteke.

In na koncu ponovno zaženemo nadzornika, da sprejme nove spremembe:
supervisorctl restart nombreApp

In to bi bilo vse, na koncu pa ni bilo toliko res? zdelo se mi je preprosto 😀

Upam, da vam je koristno, pozdrav 😉

Dokumentacija GUnicorn

Dokumentacija nadzornika


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   f3niX je dejal

    Razumem, da aplikacije Django ne bi smeli umestiti v koren mape spletnega strežnika (/ var / www)? Zaradi varnosti ne vem, če se motim.

    Lep pozdrav.

    1.    urKh je dejal

      V redu !!! Tega se nisem popolnoma zavedal, vnos bom posodobil 😛 in takoj, ko se vrnem v ponedeljek, bom naredil spremembe v aplikaciji xD
      hvala

  2.   Rodrigo Bravo (goidor) je dejal

    Epale brat, dobra vadnica. Pred kratkim sem bil tudi v istem, toda v Debianu 7 sem moral bolj ali manj iskati in brati. Priporočam, da ustvarite navidezno okolje virtualenv v uporabnikovem domu v skriti mapi.

    Lep pozdrav!

  3.   serv fenriz je dejal

    hahaha ctm sem včeraj dokumentiral Django in že greš skozi galaksijo 999999 Lep pozdrav moški xD

  4.   daniel2ac je dejal

    Zelo dober članek =) Pred tednom dni sem uvedel aplikacijo django, vendar sem jo naredil z uwsgi in nginx, ali veste, kakšno prednost ima gunicorn? Videl sem, da se že veliko omenja.
    Lepo je opaziti, da django postaja zelo priljubljen, resnica je najboljši okvir, ki sem ga videl =)

  5.   je Özkan je dejal

    Za STATIC_ROOT določim globalno spremenljivko. Nekaj ​​podobnega:

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

    Kjer je backend aplikacija, ki sem jo ustvaril. Tako poskrbim, da je tam, kjer uvajam projekt, globalna pot enaka.

  6.   sgmart je dejal

    Zanimivo, poskusil bom v prihodnosti.

    Mimogrede, ali kdo ve, kako omogočiti naglas in ne-ascii znake v aplikaciji django?

    Povsod sem iskal, nobena od naslednjih metod zame ne deluje:
    sys.setdefaultencoding ('utf-8') # v sites.py

    # - * - kodiranje: utf-8 - * - # v vsaki datoteki python

    Urejanje site.py in namestitev utf-8 namesto ascii naj bi delovalo, toda $ file models.py me obvesti, da je moja datoteka še vedno ascii.

    Kakšen predlog?

    1.    sgmart je dejal

      Delovalo je!!!!

  7.   anime230 je dejal

    zelo dobra vadnica, lahko pa naredite nekaj, kako naložiti mojo aplikacijo na spletni strežnik, ki je že v izdelavi
    hvala