Kako razmestiti aplikacijo Django:

Kaj pa lep pozdrav vsem, to je moj prvi članek v <» FromLinux (od več, ki jih imam v osnutkih xD), upam, da vam bo koristen 

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

psycopg2 -> PostgreSQL konektor za Python (tudi njega š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:

To bo zagotovilo, da bo vse, kar naredimo, shranjeno v imeniku /var/www/ENV-appname/, ne da bi to vplivalo 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 pa ga konfigurirajmo. Da bi to naredili, bomo v korenu naše aplikacije ustvarili datoteko z imenom gunicorn-deploy.py (čeprav je ime lahko poljubno) 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 konfigurirajmo supervisord ; 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:

Tudi ta korak je precej preprost; za našo aplikacijo bomo ustvarili naslednjo konfiguracijsko datoteko nginx :

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 = True in spremenimo njeno vrednost tako, da ostane DEBUG = False.

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 vrstico ALLOWED_HOSTS=[] in dodamo domeno ali naslov, prek katerega bomo do nje dostopali, kar ima za posledico nekaj takega kot ALLOWED_HOSTS=['www.domain.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 v poti, ki smo jo določili v settings.py , ustvarili mapo z imenom » statics« , kjer bodo shranjene vse naše statične datoteke.

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

In to bi bilo to, na koncu ni bilo tako veliko, kajne? Zdelo se mi je preprosto 

Upam, da vam bo koristilo, lep pozdrav 

Dokumentacija GUnicorn

Dokumentacija nadzornika


Dodaj kot prednostni vir v Googlu