Nauč se Python > Kurzy > MI-PYT (Pokročilý Python) > Webové aplikace – Flask > Deployment webových aplikací > Deployment webových aplikací na PythonAnywhere

Deployment webových aplikací na PythonAnywhere

PythonAnywhere je pro limitované použití zdarma.

K posílání kódu na produkční prostředí budeme používat Git. Nejprve proto uložte celý projekt do Gitu a nahrajte na GitHub.

Potom se zaregistrujte na www.pythonanywhere.com a vyberte Beginner Account. Po přihlášení se ukáže záložka Consoles, kde vytvořte "Bash" konzoli. V té vytvořte a aktivujte virtuální prostředí a nainstalujte Flask (plus případně další závislosti nebo jiný webový framework).

PythonAnywhere používá specificky nastavený Linux, tak je ve webové konzoli potřeba použít jiný příkaz na vytvoření virtuální prostředí, než jste z toho kurzu zvyklí. Napište příkazy takto (bez úvodního $):

$ virtualenv --python=python3.7 __venv__
$ . __venv__/bin/activate
$ python -m pip install flask

Pokud máte na PythonAnywhere starší účet, možná tam Python 3.7 nenajdete. Můžete použít Python 3.6, nemělo by to vadit, protože tento návod je koncipován tak, aby s touto verzí také fungoval. Případně můžete zažádat o aktualizaci systémové image.

Následně naklonujte na PythonAnywhere váš kód. S veřejným repozitářem je to jednodušší – stačí ho naklonovat „anonymně” (git clone https://github.com/<github-username>/<github-repo>). Pokud ale používáme privátní repozitář, bude potřeba si vygenerovat SSH klíč:

$ ssh-keygen  # (zeptá se na hesla ke klíči)
$ cat ~/.ssh/id_rsa.pub

Obsah souboru ~/.ssh/id_rsa.pub je pak potřeba přidat na GitHub v osobním nastavení v sekci "SSH and GPG Keys". Pak můžete klonovat přes SSH:

$ git clone git@github.com:<github-username>/<github-repo>.git

Zbývá nastavit, aby PythonAnywhere tento kód spustil jako webovou aplikaci.

Přejděte na stránkách PythonAnywhere do Dashboard do záložky Web, a vytvořte novou aplikaci. V nastavení zvolte Manual Configuration a Python 3.7. (Volby jiné než Manual Configuration automaticky vytvoří kostru aplikace. Vy ale už aplikaci máte hotovou, takže je nepotřebujete.)

V konfiguraci vzniklé webové aplikace je potřeba nastavit Virtualenv na cestu k virtuálnímu prostředí (/home/<uživatelské-jméno>/__venv__), a obsah WSGI Configuration File přepsat. To jde buď kliknutím na odkaz v konfiguraci (otevře se webový editor) nebo zpět v bashové konzoli pomocí editoru jako vi nebo nano.

Nový obsah souboru by měl být:

import sys
path = '/home/<uživatelské-jméno>/<jméno-adresáře>'
if path not in sys.path:
    sys.path.append(path)

from <jméno-souboru> import app as application

(Za <uživatelské-jméno>, <jméno-adresáře> a <jméno-souboru> je samozřejmě potřeba doplnit vaše údaje. Jméno souboru je zde bez přípony .py.)

Nakonec restartujte aplikaci velkým zeleným tlačítkem na záložce Web a na adrese <uživatelské-jméno>.pythonanywhere.com si ji můžete prohlédnout.

Deployment soukromých údajů

Protože vaše hesla, tajné klíče apod. nejsou v repozitáři, je nutné je předat aplikaci zvlášť. Konfigurační i jiné soubory jde nahrát v záložce Files nebo opět vytvořit a editovat ve webové konzoli.

Pokud vaše aplikace vyžaduje nastavení nějakých proměnných prostředí (například s cestou ke konfiguračnímu souboru nebo přímo s nějakou konfigurací), můžete tak učinit přímo z WSGI Configuration File. Buďto „nízkoúrovňově“ (os.environ) nebo více sofistikovaně například pomocí modulu dotenv, což ostatně doporučují i v dokumentaci.

Doporučujeme pro tyto potřeby stejně raději nepoužívat API klíče k vlastním účtům, raději si vyrobte nějaké účty pouze pro tento účel. GitHub povoluje všem vytvořit si jeden účet pro automatické operace, ale takový účet musí mít napsané v popisu, že je robot.

Aktualizace

Když nahrajeme nový kód na GitHub, je vždy potřeba provést na PythonAnywhere v konzoli git pull a pak v záložce Web aplikaci restartovat.

Placená varianta PythonAnywhere má API a tento proces jde zautomatizovat.

Ve verzi zadarmo to není tak pohodlné.


Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem. Přejít na stejnou lekci v kurzu pro samouky.