První nasazení Django do produkčního prostředí může být skličující úkol. Vývojáři často spustí instanci systému Linux v cloudu pro své produkční prostředí.
V tomto kurzu vám ukážeme, jak spustit Django v produkci pomocí nové instance Ubuntu.
Předpokládáme, že všechny vaše úpravy se provádějí na serveru a že tyto příkazy spouštíte jako root.
V tomto výukovém programu používáme Ubuntu 18.04.2 LTS
Vytvoření uživatele pro projekt
Pro spuštění naší aplikace vytvoříme nového uživatele, django. To poskytuje mírnou bezpečnostní výhodu.
Vytvoření nového uživatele:
useradd -m djangoThe -m vlajka
vytvoří nový domovský adresář: / home / django.
Nastavení prostředí Pythonu
Nejdříve nejdříve: aktualizujte své seznamy balíků pomocí aktualizace apt-get
Ubuntu 18.04 se dodává s Pythonem 3.6, ale nedodává se s pipem, který budete potřebovat k instalaci svých závislostí.
apt-get nainstalovat python3-pipTeď, když máme pipa, vytvořme virtuální prostředí. Virtuální prostředí pomáhají vyhnout se konfliktům s balíčky Pythonu používanými Linuxem.
pip3 install virtualenvcd / home / django
virtualenv env
Nyní jste vytvořili virtuální Python 3.6 prostředí v / home / django / env
složku, kterou lze aktivovat pomocí následujícího příkazu: Nyní, když máme pip, vytvořme virtuální prostředí. Virtuální prostředí pomáhají vyhnout se konfliktům s balíčky Pythonu používanými Linuxem.
Nastavení projektu Django
V tomto kurzu vytvoříme dočasný projekt Django. Pokud nasazujete svůj vlastní kód, budete jej muset místo toho nahrát na server. Budeme pracovat v domovském adresáři / home / django.Nastavení projektu Django
Vytvořme projekt Django:
cd / home / djangozdroj env / bin / aktivovat
pip nainstalujte django
výukový program django-admin startproject
Ověřte, že věci fungují spuštěním:
cd návodSpráva pythonu.py runserver 0.0.0.0:80
Naše instance Ubuntu běží na 178.128.229.34, takže se připojíme k http: // 178.128.229.34.Ověřte, že věci fungují spuštěním:
Pravděpodobně uvidíte něco takového:
Abychom to napravili, upravíme to / home / django / tutorial / tutorial / nastavení.py
. Nalézt ALLOWED_HOSTS = []
a nastavte jej na:
„178.128.229.34 '# nahraďte to IP adresou vašeho serveru
nebo název domény, kterou používáte pro připojení
]
Vraťme se nyní na http: // 178.128.229.34:
Skvělý! Jsme online!
Nastavení databáze PostgreSQL
Ve výchozím nastavení používá Django databázi SQLite3. Bohužel SQLite3 neumožňuje souběžné zápisy. Pokud má váš web někdy pouze jednoho uživatele, který upravuje data, a zbytek návštěvníků právě čte stránky, pak by to mohlo být vhodné. Ale pokud máte více lidí, kteří upravují data současně, pravděpodobně budete chtít použít jiný backend.
Běžné možnosti jsou PostgreSQL a Mysql. Pro tento tutoriál půjdeme s PostgreSQL.
Začněte instalací PostgreSQL:
apt-get nainstalovat postgresqlPoté spusťte psql, databázový shell. Ve výchozím nastavení se k databázi může připojit pouze uživatel postgres, takže se nejprve budeme muset jako uživatel autentizovat:
su - postgrespsql
Dále potřebujeme databázi a uživatele pro přístup k této databázi:
vytvořit výukový program databáze;vytvořit uživatele tutorial_user se zašifrovaným heslem 'tutorial_password';
udělit všechna oprávnění k databázovému tutoriálu tutorial_user;
Nyní zadejte exit nebo dvakrát stiskněte Ctrl-D: jednou ukončete psql a jednou se odhlaste ze shellu postgresusera.
Skvělý! Nyní máme nastavenu naši databázi a uživatele. Pojďme ověřit, že se můžeme přihlásit do naší databáze.
Pokusíme se otevřít databázový shell, tentokrát se přihlásíme k databázi, kterou jsme vytvořili s uživatelem, kterého jsme vytvořili:
psql -Uživatelský_uživatel -dtutorial -h127.0.0.1-ZNa výzvu zadejte heslo, které jsme vytvořili: tutorial_password.
Pokud vidíte databázový shell, byli jste úspěšní. Pokud uvidíte nějaké chyby, budete se muset vrátit a zjistit, co se děje.
Připojení Djanga k databázi
Abychom Django připojili k databázi, musíme si nejprve nainstalovat adaptér Python PostgreSQL:
pip nainstalujte psycopg2-binaryPak se pojďme otevřít / home / django / tutorial / tutorial / nastavení.py
a nakonfigurujte připojení.
Najděte své aktuální připojení k databázi; pokud jste to nezměnili, mohlo by to vypadat nějak takto:
DATABÁZY ='default':
'ENGINE': 'django.db.backendy.sqlite3 ',
„JMÉNO“: os.cesta.připojit (BASE_DIR, 'db.sqlite3 '),
Pro připojení k PostgreSQL jej nahradíme následujícím:
DATABÁZY ='default':
'ENGINE': 'django.db.backendy.postgresql_psycopg2 ',
'NAME': 'tutorial',
'USER': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'HOST': '127.0.0.1 ',
'PORT': '5432',
Otestujme připojení:
cd / home / django / výukový programSpráva pythonu.py runserver 0.0.0.0:80
Měli byste mít opět možnost navštívit své webové stránky (pro nás na adrese http: // 178.128.229.34 /, ale nahraďte jej svou IP nebo názvem hostitele).
Pokud bude vše v pořádku, můžeme pokračovat.
Nastavení webového serveru nginx
Když běžíš Správa pythonu.py runserver
, používáte vývojový server Django. To je skvělé pro místní vývoj, ale stejně jako u SQLite3 se to opravdu nehodí pro produkci.
Běžné možnosti pro produkční webové servery jsou nginx a Apache. V tomto kurzu použijeme nginx.
Nginx nainstalujte pomocí následujícího:
apt-get install nginxNyní, pokud vše funguje dobře, by měl být nginx spuštěn na portu 80. Jděte do toho a podívejte se na svůj web; měl bys vidět:
Skvělé, takže nginx je funkční! Dále ji budeme muset nakonfigurovat pro komunikaci s Django. Otevřete konfigurační soubor nginx umístěný na / etc / nginx / sites-available / default. Nahraďme soubor následujícím:
upstream djangoserver 127.0.0.1: 8000;
server
poslouchat 80;
místo /
try_files $ uri @send_to_django;
umístění @send_to_django
proxy_set_header Host $ http_host;
proxy_redirect vypnuto;
proxy_pass http: // django;
Otestujte konfigurační soubor spuštěním nginx -t. Pokud je vše v pořádku, můžeme znovu načíst spuštěním nginx -s reload.
Nyní, pokud navštívíte svůj web, uvidíte následující:
Kdykoli to uvidíte, znamená to, že nginx nemohl předat požadavek upstream procesu. V tuto chvíli je to proto, že se pokouší předat požadavek na 127.0.0.1: 8000, ale na této adrese není žádný proces naslouchání.
Začněme vývojovým serverem Django a zkusíme to znovu:
cd / home / django / výukový programSpráva pythonu.py runserver 127.0.0.1: 8000
a znovu navštivte svůj web. Měla by se zobrazit vaše aplikace Django.
Mounting Django on Gunicorn
Nezapomeňte, že nechceme používat náš vývojový server Django ve výrobě. Místo toho ke spuštění Django použijeme server rozhraní Web Server Gateway Interface (WSGI). Nginx předá požadavek serveru WSGI, na kterém běží Django.
Běžné možnosti pro server WSGI jsou Gunicorn a uWSGI. Pro tento tutoriál použijeme Gunicorn.
Nainstalujeme Gunicorn:
pip nainstalujte gunicornDále můžeme spustit gunicorn následovně:
cd / home / django / výukový programgunicorn výukový program.wsgi
Nyní byste měli být schopni navštívit svůj web a zkontrolovat, zda aplikace běží správně.
Spuštění Gunicorn jako služby
Existuje několik problémů se spuštěním gunicorn, jako je tento:
- Pokud ukončíme relaci SSH, proces gunicorn se zastaví.
- Pokud se server restartuje, proces gunicorn se nespustí.
- Proces běží jako root. Pokud hackeři naleznou zneužití v kódu naší aplikace, budou moci spouštět příkazy jako root. Nechceme to; ale proto jsme vytvořili djangouser!
Abychom tyto problémy vyřešili, spustíme Gunicorn jako systémovou službu.
cd / home / djangomkdir bin
cd / home / django / bin
stiskněte start-server.sh
Na start-serveru.sh:
cd / home / djangozdroj env / bin / aktivovat
cd návod
gunicorn výukový program.wsgi
Nyní můžete skript otestovat:
cd / home / django / binbash start-server.sh
# navštivte svůj web, měl by být spuštěn
Nyní vytvoříme systémovou službu pro Gunicorn. Vytvořte / etc / systemd / system / gunicorn.následuje služba:
[Jednotka]Popis = Gunicorn
After = síť.cílová
[Servis]
Typ = jednoduchý
Uživatel = django
ExecStart = / home / django / bin / start-server.sh
Restart = při selhání
[Nainstalujte]
WantedBy = více uživatelů.cílová
Nyní povolme službu a spusťte ji
systemctl povolit gunicornsystemctl start gunicorn
V tuto chvíli byste měli vidět svůj web.
Gunicorn můžeme vypnout následovně:
systemctl stop gunicornA měli byste vidět 502 Bad Gateway.
Nakonec zkontrolujeme spouštěcí cyklus:
systemctl start gunicornrestartujte nyní
Když se váš počítač vrátí online, měli byste vidět, že je váš web funkční.
Statické soubory
Pokud navštívíte administrátorský panel Django na svém webu na adrese / admin / (pro nás je to http: // 178.128.229.34 / admin /), všimnete si, že statické soubory se nenačítají správně.
Budeme muset vytvořit novou složku pro statické soubory:
cd / home / djangomkdir statický
Potom řekneme Djangu, že by to mělo dát statické soubory úpravou / home / django / tutorial / tutorial / settings.py a přidání:
STATIC_ROOT = '/ home / django / static /'Nyní můžeme shromáždit statické soubory:
cd / home / djangozdroj env / bin / aktivovat
cd návod
Správa pythonu.py collectstatic
Nakonec musíme říct nginx, aby tyto statické soubory obsluhoval.
Pojďme otevřít / etc / nginx / sites-available / default a přidat následující přímo nad vaše umístění / blok:
umístění / statické /root / home / django;
try_files $ uri = 404;
Celý soubor by nyní měl vypadat takto:
upstream djangoserver 127.0.0.1: 8000;
server
poslouchat 80;
umístění / statické /
root / home / django;
try_files $ uri = 404;
místo /
try_files $ uri @send_to_django;
umístění @send_to_django
proxy_set_header Host $ http_host;
proxy_redirect vypnuto;
proxy_pass http: // django;
Můžeme znovu načíst soubor pomocí nginx -s reload
A voila! Vaše statické soubory nyní budou plně fungovat.
Závěr
V tomto okamžiku vaše aplikace Django funguje správně. Pokud máte nějaké speciální požadavky, možná budete muset nastavit mezipaměť jako Redis nebo frontu zpráv jako Rabbit MQ. Můžete také chtít nastavit nepřetržité nasazení, protože postup nasazení může chvíli trvat.
Dalším důležitým krokem je podniknout příslušné kroky k zabezpečení vašeho zařízení Ubuntu. Jinak se může stát, že se váš server chová špatně!
Hodně štěstí!