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 😉
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.
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
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!
hahaha ctm Včera jsem dokumentoval Djanga a ty už procházíš galaxií 999999 Zdravím muže xD
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 =)
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á.
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?
Fungovalo to!!!!
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