Čo tak pozdraviť všetkých, toto je môj prvý článok v <» DesdeLinux (z viacerých, ktoré mám v konceptoch xD), dúfam, že sa vám to bude hodiť 😀
No, v mojej novej a súčasnej práci, v súčasnosti sa vykonáva migrácia niekoľkých systémov na Django (aké čudné, eh ?? xD), a jednou z mojich úloh, okrem vývoja, je ich uvádzanie do výroby, tak aké dobré učeň, pretože som prvýkrát uviedol aplikáciu do výroby na skutočnom serveri: $ Začal som čítať oficiálny dokument každého z požadovaných balíkov zásobníka (viac ako všetci Gunicorn a Supervisord) a videl som, že tutoriály v Po španielčine mi v niektorých aspektoch neboli celkom jasní, rozhodol som sa vytvoriť mini sprievodcu s krokmi, ktoré som nasledoval pri uvedení aplikácie do výroby, na základe zásobníka Django, Gunicorn, Supervisord, Nginx a Postgresql.
V prípade, že pracujem, na serveroch stále beží Debian Squeeze, ale sprievodca by mal byť plne platný pre iné distribúcie ... poďme teda priamo k veci a začnime:
Budem pracovať ako super užívateľ. Najskôr sú potrebné nasledujúce balíčky:
PIP -> Nástroj na inštaláciu a správu balíkov pre Python
aptitude install python-pip
Nginx -> Webový server (použijeme ho ako reverzný proxy server a na medzipamäť statických súborov „img, js, css“) Inštalujeme ho pomocou:
aptitude install nginx
Supervisord -> Aplikácia na správu a monitorovanie našej aplikácie, aj keď sa používa oveľa viac. Inštalujeme ho pomocou:
aptitude install supervisor
virtualenv -> Pomáha nám vytvoriť pre našu aplikáciu prispôsobené virtuálne prostredie na vykonávanie. Inštalujeme ho pomocou:
aptitude install python-virtualenv
gunicorn -> webový server pre python (tento ešte nenainštalujeme)
Predpokladám, že by už mali mať nainštalovaný a nakonfigurovaný postgresql
psychopg2 -> Konektor Postgresql pre python (tiež ho zatiaľ nenainštalujeme)
Vytvorte virtuálne prostredie s virtuálnym prostredím:
Najskôr sa presunieme do pracovného adresára, ktorý použijeme na uvedenie do výroby:
cd /var/www/
Potom v tomto adresári vytvoríme virtuálne prostredie:
virtualenv ENV-nombreApp
Presunieme sa do adresára, ktorý som práve vytvoril virtualenv
cd ENV-nombreAPP
Aplikáciu skopírujeme do tohto adresára a teraz pokračujeme v aktivácii prostredia pomocou:
source bin/activate
Výzva by teraz mala vyzerať (ENV)usuario@host:
Teraz sa všetko, čo robíme, uloží do adresára / var / www / ENV-appname / bez ovplyvnenia systémových balíkov
Teraz sa presunieme do adresára aplikácií:
cd nombreApp
Pokračujeme inštaláciou zoznamu závislostí aplikácií (ak je to potrebné), v ktorom sú uvedené v súbore request.txt:
pip install -r requirements.txt
Môžeme tiež nainštalovať balíčky jednotlivo, napríklad na inštaláciu konektora postgresql:
pip install psycopg2
Inštalácia a konfigurácia GUnicorn:
Ak ho chcete nainštalovať, urobíme to rovnakým spôsobom:
pip install gunicorn
Teraz to nakonfigurujeme, preto vytvoríme súbor s názvom gunicorn-deploy.py v koreňovom adresári našej aplikácie (hoci názov môže byť akýkoľvek) s nasledujúcim obsahom:
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
Konfigurácia supervízora:
Teraz nastavme supervisord, preto generujeme konfiguračný súbor pomocou
echo_supervisord_conf > /etc/supervisord.conf
Teraz upravíme konfiguračný súbor:
vim /etc/supervisord.conf
A nasledujúce riadky odkomentujeme odstránením; (bodkočiarka):
[unix_http_server] file = / 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: 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 adresár = / var / www / ENV-appname / appname / autostart = true autorestart = true user = username redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log
Teraz vytvoríme skript pre supervízor, ktorý má začať so systémom, za týmto účelom vytvoríme súbor:
vim /etc/init.d/supervisord
A pridáme nasledujúci obsah:
# Supervisord auto-start # # description: Auto-runs supervisord # processname: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 na začiatku) echo -n "Počiatočný dozor:" $ SUPERVISORD echo ;; stop) echo -n "Stopping supervisord:" $ SUPERVISORCTL shutdown echo ;; restart) echo -n "Zastavenie supervízora:" $ SUPERVISORCTL vypnutie echo echo -n "Spustenie supervízora:" $ SUPERVISORD echo ;; že C
A teraz dávame súboru povolenie na spustenie, aby mohol začať so systémom:
sudo chmod +x /etc/init.d/supervisord
Aktualizujeme odkazy, aby sme spustili službu:
sudo update-rc.d supervisord defaults
Spustíme službu:
sudo /etc/init.d/supervisord start
Nastavenie nginx:
Tento krok je tiež dosť jednoduchý, vytvoríme nasledujúci konfiguračný súbor z nginx pre našu aplikáciu:
vim /etc/nginx/sites-enabled/nombreApp
A pridáme vám nasledujúci obsah
server {počúvať 9001; # port, kde chcú, aby nginx server_name počúvalo www.domain.com; # alebo 192.168.0.100, adresa, na ktorú budeme mať prístup access_log /var/log/nginx/Appname.access.log; # kde budeme mať umiestnenie protokolu aplikácie / {# kde nginx zavolá pri prístupe na www.dominio.com/proxy_pass http://127.0.0.1:8001; proxy_set_header Hostiteľ $ http_host; } location / static / {# kde bude mať nginx prístup, keď zadáme www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}
A reštartujeme nginx:
service nginx restart
Nastavenie Django:
Poďme upraviť konfiguračný súbor django:
vim nombreApp/settings.py
Hľadáme riadok, ktorý hovorí DEBUG = Pravda a zmeníme hodnotu, zostávajúce DEBUG = nepravda
Pridáme parametre DB:
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # alebo mysql alebo čokoľvek 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' používajú: 'password DB', 'HOST': 'localhost', # or the one they need 'PORT': '', # or the one they are using}}
Hľadáme hranicu ALLOWED_HOSTS = [] a pridáme doménu alebo adresu, cez ktorú budeme mať prístup, a ponecháme niečo ako ALLOWED_HOSTS = ['www.domain.com']
Konfigurujeme adresár pre statické súbory, hľadáme riadok, ktorý hovorí STATIC_ROOT = ' '
a zmeníme hodnotu tak, že umiestnime absolútnu cestu tam, kde chceme, aby boli naše statické súbory, v mojom prípade som to nechal viac-menej takto STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Takmer hotovo, vykonáme nasledujúci príkaz:
./manage.py collectstatic
Týmto sa vytvorí priečinok s názvom 'statika v ceste, ktorú zadáme v settings.py ", tam budú všetky naše statické súbory.
A nakoniec reštartujeme nadriadeného, aby sme vykonali nové zmeny:
supervisorctl restart nombreApp
A to by bolo všetko, nakoniec to nebola až taká pravda? zdalo sa mi to jednoduché 😀
Dúfam, že je to pre vás užitočné, pozdravy 😉
Rozumiem, že aplikácia Django by nemala byť umiestnená v koreňovom adresári priečinka webového servera (/ var / www)? Kvôli bezpečnosti neviem, či sa mýlim.
Zdravím.
V poriadku !!! Bolo to niečo, o čom som absolútne nevedel, aktualizujem záznam 😛 a hneď ako sa v pondelok vrátim, urobím zmeny v aplikácii xD
vďaka
Epale brat dobrý návod. Nedávno som bol tiež na tom istom, ale v Debiane 7 som musel viac-menej hľadať a čítať. Odporúčam vám vytvoriť virtuálne prostredie virtualenv v domácnosti používateľa v skrytom priečinku.
Zdravím!
hahaha ctm Včera som dokumentoval Djanga a už prechádzate galaxiou 999999 Zdravím mužov xD
Veľmi dobrý článok =) len pred týždňom som nasadil svoju aplikáciu django, ale urobil som to s uwsgi a nginx, viete, aké výhody má gunicorn? Videl som toho veľa spomínaného.
Je pekné vidieť, že django sa stáva veľmi populárnym, pravda je najlepší rámec, aký som videl =)
Pre STATIC_ROOT definujem globálnu premennú. Niečo také:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
Kde je backend aplikácia, ktorú som vytvoril. Týmto spôsobom zabezpečím, aby pri nasadzovaní projektu bola rovnaká aj globálna cesta.
Zaujímavé, pokúsim sa o to v budúcnosti.
Mimochodom, vie niekto, ako povoliť v aplikácii django znaky s diakritikou a znaky iné ako ascii?
Pozrel som sa všade, žiadna z nasledujúcich metód pre mňa nefunguje:
sys.setdefaultencoding ('utf-8') # v sites.py
# - * - coding: utf-8 - * - # v každom súbore python
Úpravy stránky.py a vloženie utf-8 namiesto ascii majú fungovať, ale $ file models.py ma informuje, že môj súbor je stále ascii.
Nejaké návrhy?
Fungovalo to!!!!
veľmi dobrý návod, ale mohli by ste urobiť niektorý z spôsobov, ako nahrať moju aplikáciu na webový server, ktorý je už vo výrobe
vďaka