Jak nasadit aplikaci Django:

Co takhle zdravím všechny, tohle je můj první článek v <» DesdeLinux (z několika, které mám v konceptech xD), doufám, že se vám to bude hodit 😀

No, v mém novém a současném zaměstnání v tuto chvíli probíhá migrace několika systémů na Django (jak divné, eh ?? xD) a jedním z mých úkolů, kromě vývoje, je zavádění do výroby, tak jak dobrý učeň, protože to bylo poprvé, co jsem uvedl aplikaci do výroby na reálném serveru: $ Začal jsem číst oficiální dokument každého z požadovaných balíčků zásobníku (Gunicorn a Supervisord ze všeho nejvíc) a viděl jsem, že výukové programy Ve španělštině mi v některých aspektech nebyli příliš jasní, rozhodl jsem se vytvořit mini průvodce s kroky, kterými jsem postupoval při uvedení aplikace do výroby, založený na zásobníku Django, Gunicorn, Supervisord, Nginx a Postgresql.

V případě, že pracuji, na serverech stále běží Debian Squeeze, ale průvodce by měl být plně platný pro jiné distribuce ... pojďme tedy rovnou k věci a začněme:

Budu pracovat jako super uživatel. Nejprve jsou vyžadovány následující balíčky:

PIP -> Nástroj pro instalaci a správu balíčků pro Python
aptitude install python-pip

Nginx -> Webový server (použijeme jej jako reverzní proxy a do mezipaměti statických souborů 'img, js, css') Instalujeme jej pomocí:
aptitude install nginx

Supervisord -> Aplikace pro správu a sledování naší aplikace, i když se používá mnohem více. Instalujeme jej pomocí:
aptitude install supervisor

virtualenv -> Pomáhá nám vytvořit přizpůsobené prostředí virtuálního spuštění pro naši aplikaci. Instalujeme jej pomocí:
aptitude install python-virtualenv

gunicorn -> webový server pro python (zatím jej nenainstalujeme)

Předpokládám, že by již měli mít nainstalovaný a nakonfigurovaný postgresql

psychopg2 -> Postgresql konektor pro python (zatím jej také nenainstalujeme)

Vytvořte virtuální prostředí pomocí virtualenv:

Nejprve se přesuneme do pracovního adresáře, který použijeme pro uvedení do výroby:
cd /var/www/

Pak v tomto adresáři vytvoříme virtuální prostředí:
virtualenv ENV-nombreApp

Přesunuli jsme se do adresáře, který jsem právě vytvořil virtualenv
cd ENV-nombreAPP

Zkopírujeme aplikaci do tohoto adresáře a nyní pokračujeme v aktivaci prostředí pomocí:
source bin/activate

Výzva by nyní měla vypadat (ENV)usuario@host:

Tím se nyní vše, co děláme, uloží do adresáře / var / www / ENV-appname / aniž by to ovlivnilo systémové balíčky

Nyní se přesuneme do adresáře aplikace:
cd nombreApp

Pokračujeme v instalaci seznamu závislostí aplikace (je-li to nutné), ve kterém jsou uvedeny v souboru požadavky.txt:
pip install -r requirements.txt

Můžeme také nainstalovat balíčky jednotlivě, například k instalaci konektoru postgresql:
pip install psycopg2

Instalace a konfigurace GUnicorn:

Chcete-li jej nainstalovat, uděláme to stejným způsobem:
pip install gunicorn

Nyní to nakonfigurujeme, proto vytvoříme soubor s názvem gunicorn-deploy.py v kořenovém adresáři naší aplikace (i když název může být jakýkoli) s následujícím obsahem:

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

Konfigurace supervizoru:

Nyní nastavíme dozorce, za tímto účelem vygenerujeme konfigurační soubor pomocí

echo_supervisord_conf > /etc/supervisord.conf

Nyní upravíme konfigurační soubor:
vim /etc/supervisord.conf

Následující řádky odkomentujeme odstraněním; (středník):

[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ář = / var / www / ENV-appname / appname / autostart = true autorestart = true user = username redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Nyní vytvoříme skript pro supervizor, který má začít se systémem, pro který vytvoříme soubor:
vim /etc/init.d/supervisord

A přidáme následující 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 případ $ 1 na začátku) echo -n "Počáteční dohled:" $ SUPERVISORD echo ;; stop) echo -n "Stopping supervisord:" $ SUPERVISORCTL shutdown echo ;; restart) echo -n "Zastavení supervizoru:" $ SUPERVISORCTL vypnutí echo echo -n "Spuštění supervizoru:" $ SUPERVISORD echo ;; že C.

A teď dáváme souboru oprávnění ke spuštění, aby mohl začít se systémem:
sudo chmod +x /etc/init.d/supervisord

Aktualizujeme odkazy pro spuštění služby:
sudo update-rc.d supervisord defaults

Spouštíme službu:
sudo /etc/init.d/supervisord start

Nastavení nginx:

Tento krok je také docela jednoduchý, vytvoříme následující konfigurační soubor Nginx pro naši aplikaci:

vim /etc/nginx/sites-enabled/nombreApp

A přidáme vám následující obsah

server {poslouchat 9001; # port, kde chtějí, aby nginx poslouchal název_serveru www.domain.com; # nebo 192.168.0.100, adresa, na kterou budeme mít přístup access_log /var/log/nginx/Appname.access.log; # kde budeme mít umístění protokolu aplikace / {# kde nginx zavolá při přístupu na www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } umístění / static / {#, kde bude nginx přistupovat, když zadáme www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

A restartujeme nginx:
service nginx restart

Nastavení Django:

Pojďme upravit konfigurační soubor django:
vim nombreApp/settings.py

Hledáme řádek, který říká DEBUG = Pravda a změníme hodnotu, zbývající DEBUG = nepravda

Přidáme parametry DB:

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # nebo mysql, nebo cokoli jiného používají 'NAME': 'DBName', 'USER': 'DBUser', 'HESLO' : 'password DB', 'HOST': 'localhost', # or the one they need 'PORT': '', # or the one they are using}}

Hledáme linku ALLOWED_HOSTS = [] a přidáme doménu nebo adresu, přes kterou budeme přistupovat, takže něco jako ALLOWED_HOSTS = ['www.domain.com']

Nakonfigurujeme adresář pro statické soubory, hledáme řádek, který říká STATIC_ROOT = ' ' a změníme hodnotu tak, že umístíme absolutní cestu tam, kde chceme, aby byly naše statické soubory, v mém případě jsem to nechal víceméně takto STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Téměř hotovo, provedeme následující příkaz:
./manage.py collectstatic

Tím se vytvoří složka s názvem 'statika v cestě, kterou zadáme v settings.py ", tam budou všechny naše statické soubory.

A nakonec restartujeme supervizora, abychom provedli nové změny:
supervisorctl restart nombreApp

A to by bylo vše, nakonec to nebyla tak pravda? zdálo se mi to jednoduché 😀

Doufám, že je to pro vás užitečné, pozdravy 😉

Dokumentace GUnicorn

Dokumentace dohledu


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   f3niX řekl

    Chápu, že aplikace Django by neměla být umístěna v kořenovém adresáři složky webového serveru (/ var / www)? Z bezpečnostních důvodů nevím, jestli se mýlím.

    Zdravím.

    1.    urKh řekl

      Dobře !!! Bylo to něco, o čem jsem úplně nevěděl, aktualizuji záznam 😛 a jakmile se v pondělí vrátím, provedu změny v aplikaci xD
      díky

  2.   Rodrigo Bravo (goidor) řekl

    Epale bratr dobrý návod. Nedávno jsem byl také ve stejném, ale v Debianu 7 jsem musel hledat a číst víceméně. Doporučuji vytvořit virtuální prostředí virtualenv v domově uživatele ve skryté složce.

    Zdravím!

  3.   Podávejte Fenriz řekl

    hahaha ctm Včera jsem dokumentoval Djanga a ty už procházíš galaxií 999999 Zdravím muže xD

  4.   daniel2ac řekl

    Velmi dobrý článek =) jen před týdnem jsem nasadil svou aplikaci django, ale udělal jsem to s uwsgi a nginx, víte, jakou výhodu má gunicorn? Už jsem toho viděl hodně.
    Je hezké vidět, že django se stává velmi populárním, pravdou je nejlepší rámec, jaký jsem viděl =)

  5.   ozkar řekl

    Pro STATIC_ROOT definuji globální proměnnou. Něco takového:

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

    Kde je backend aplikace, kterou jsem vytvořil. Takže se ujistím, že kde nasazuji projekt, je globální cesta stejná.

  6.   sgmart řekl

    Zajímavé, zkusím to v budoucnu.

    Mimochodem, ví někdo, jak povolit akcenty a znaky jiné než ascii v aplikaci django?

    Podíval jsem se všude, žádná z následujících metod pro mě nefunguje:
    sys.setdefaultencoding ('utf-8') # v sites.py

    # - * - coding: utf-8 - * - # v každém souboru pythonu

    Úpravy site.py a uvedení utf-8 namísto ascii má fungovat, ale $ file models.py mě informuje, že můj soubor je stále ascii.

    Nějaké návrhy?

    1.    sgmart řekl

      Fungovalo to!!!!

  7.   anime 230 řekl

    velmi dobrý návod, ale mohl byste udělat jeden z toho, jak nahrát moji aplikaci na webový server, který je již ve výrobě
    díky