Jak na deploy Python aplikace na Roští.cz

Jak na deploy Python aplikace na Roští.cz
« kdy: 31. 12. 2024, 17:42:46 »
Čau,

protože jsem se s tím celkem natrápil, tak tady dávám knowhow, vzhledem k tomu, že to Roští nakonec docela funguje. Bohužel se mi nepodařilo rozjet CI/CD, protože tam má Roští jednak nějakou chybku, druhak to mají udělané pro Node.js. Tak jsem to obešel a dělám deploy přes rsync.

Kroky:

1. Na Roští si založím účet, trochu pročtu dokumentaci a podívám se, jaká je nejnovější verze Pythonu (Dneska je to 3.13). Rovněž si zvolím, jaký použiju tarif - pokud mi u nejlevnějšího tarifu nestačí 1GB místa na disku, nevadí - cokoliv přeteče se prostě jen naúčtuje, viz ceník.

2. Aplikaci v Pythonu (Já používám Flask, ale to je celkem jedno) napíšu nebo aktualizuju na nejnovější verzi Pythonu. Díky tomu se můžu dostat až na 3.5 roku podpory a nemusím na to celou tuto dobu šáhnout. Python verze mají totiž podporu přibližně jen 3.5 roku od vydání, pak je možné očekávat, že ani Roští nebude chtít dále nepodporovanou verzi Pythonu mít.

3. V mojí Flask python aplikaci musím zařídit, že je spustitelná příkazem "python3.13 -m app", tedy že nevzniknou problémy s importy závislostí atp.

4. Roští používá pro správu Python aplikace software s názvem "gunicorn". Tento software potřebuje, aby se v mém kořenovém "app.py" souboru vyskytovala globální proměnná s názvem "application". Tedy v mém případě instanci třídy Flask přiřadím do proměnné s názvem "application = Flask(__name__, )"

5. Když mi aplikace na localhostu správně běží, můžu vyrobit script pro její deploy:

Kód: [Vybrat]
#!/bin/bash

rsync -arv -v -e "ssh -p CISLO_VASI_APP_V_ROSTI" --exclude .git --exclude data ../$jmeno_adresare_s_projektem app@ssh.rosti.cz:/srv/app

Tento script se po spuštění přesune do adresáře o úroveň výš a zkopíruje obsah adresáře s projektem do Roští

6. Následně potřebuju upravit cestu v systémové aplikaci "supervisor.d" k mému "app.py" souboru. Otevřu si config:

Kód: [Vybrat]
cd /srv/conf/supervisor.d
vim python.conf

Takto vypadá:

Kód: [Vybrat]
[program:app]
directory=/srv/app/jmeno_adresare_s_mou_aplikaci
command=/srv/venv/bin/gunicorn -u app -g app -b 0.0.0.0:8080 --access-logfile - --error-logfile - --reload app

autostart=true
autorestart=true
stdout_logfile=/srv/log/python.log
stdout_logfile_maxbytes=2MB
stdout_logfile_backups=5
redirect_stderr=true

Důležité jsou první 2 řádky, zejména pak "directory=", který musíme změnit, protože originálně ukazuje jinam. Na řádku "command=" nemusímě měnit z originálního stavu nic, tedy pakliže se náš hlavní soubor jmenuje "app.py". Pokud ne, přidělali jste si práci.

7. Když máte aplikaci zkopírovanou do Roští, závislosti máte nainstlovány "pip3.13 install -r requirements.txt", tak stačí zavolat příkazy:

Kód: [Vybrat]
$ supervisorctl reread
$ supervisorctl update
$ supervisorctl restart app

8. Tímto by aplikace měla běžet a být přístupná z Internetu. Pokud není a v browseru vidíte chybu, stačí se podívat do logu:

Kód: [Vybrat]
$ /srv/log
$ cat python.log

Zde uvidíte chybu, tu stačí přečíst, opravit a zkusit znovu udělat restart aplikace přes supervisor.

9. Pokaždé když spustíte script pro deploy, tak dojde k automatickému přenasazení (tedy alespoň mi jo)

« Poslední změna: 31. 12. 2024, 17:48:06 od registrovany123 »


Re:Jak na deploy Python aplikace na Roští.cz
« Odpověď #1 kdy: 31. 12. 2024, 19:32:11 »
Tak bezva, že se vám to povedlo. Z těch možností diskutovaných v původním vlákně mi to rozchození na aktuální verzi Pythonu přijde zdaleka nejrozumnější.
A díky za napsání celého popisu rozběháním aplikace na rosti.cz, věřím že se ty informace budou časem někomu hodit.