Ako nasadiť aplikáciu Django:

Č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 😉

Dokumentácia GUnicorn

Dokumentácia dozorného orgánu


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   f3niX dijo

    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.

    1.    urKh dijo

      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

  2.   Rodrigo Bravo (goidor) dijo

    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!

  3.   Podávame Fenriz dijo

    hahaha ctm Včera som dokumentoval Djanga a už prechádzate galaxiou 999999 Zdravím mužov xD

  4.   daniel2ac dijo

    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 =)

  5.   ozkar dijo

    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.

  6.   sgmart dijo

    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?

    1.    sgmart dijo

      Fungovalo to!!!!

  7.   anime230 dijo

    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