Produkční nasazení není organizováno pomocí Docker kompozice, ale přímo "nativně" (tzn. v Apache + PHP).
Nezbytné předpoklady jsou:
- Základní programátorské IT vzdělání, bez toho se nemá smysl do tohoto pouštět.
- GIT
- PHP alespoň ve verzi 7.4
- MySQL databázi ve verzi alespoň 5.6 (např. MariaDB 10)
- Nainstalovaný balíčkovací nástroj Composer na PATH.
- Naklonujte si repozitář:
git checkout [email protected]:InstruktoriBrno/tmou-web.git
- Nainstalujte závislosti spuštěním
composer install --no-dev --optimize-autoloader --no-progress --no-interaction --no-suggest
v rootu webu. - Získejte údaje pro připojení do databáze (adresa server, port, jméno, heslo, jméno databáze).
Pokud databázi nemáte, vytvořte si ji s kódováníutf8mb4-czech
! - Nastavte možnost zápisu do adresářů
temp
alog
:chmod -R 777 temp log payments
(ujistěte se, že oprávnění má i proces webového serveru). - Vytvořte lokální konfiguraci
App/Config/local.neon
, vizlocal.neon.template
, zde nastavte údaje pro přístup k databázi, recaptchu, adresu na které web poběží, maily... - Smažte obsah adresáře
temp/cache
. - Spusťe databázové migrace pro zajištění aktuálnosti databáze:
php bin/console migrations:migrate
a DB proxy objektů pro líné načítání z databázephp bin/console orm:generate-proxies
(a případněphp bin/console orm:clear-cache:metadata
). - Nakonfigurujte Apache tak, aby používal správnou verzi PHP a
DocumentRoot
směřoval do složkywww
. - Přistupte skrze prohlížeč na nakonfigurovanou doménu a otestujte základní funkčnost webu.
- Ověřte, že citlivé soubory nejsou dostupné zvenčí, obzvláště soubor
App/Config/local.neon
. - Nastavte CRON pro automatické párování plateb, viz samostatná sekce níže.
- Ověřte, že ve složce
/www/storage
nelze přistupovat soubory.php
ani.phtml
, protože tato složka slouží k nahrávání obsahu, který by neměl být za žádných okolností spouštěn. (Mělo by být nastaveno automaticky v/www/storage/.htaccess
.) - Ověřte, že nastavení PHP, že je nastaveno alespoň
post_max_size=20M
aupload_max_filesize=20M
. (Mělo být nastaveno automaticky v/.htaccess
.)
- Odstavte web (viz níže Režim údržby).
- Zazálujte celou databázi před začátkem aktualzace.
- Aktualizujte repozitář na požadovanou verzi (pozor na neverzované změny!)
- Doinstalujte a aktualizujte závislosti dle požadavku dané verze pomocí
composer install --no-dev --optimize-autoloader --no-progress --no-interaction --no-suggest
. - Smažte obsah adresáře
temp/cache
, v produkčním režimu se keš sama přegenerovává jen pokud chybí! (Bez toho by aplikace nemusela vůbec naběhnout, nebo by fungovala jako ve staré verzi.)
Web má připravený režim údržby (via .htaccess
v kořenové složce projektu), pro jeho zapnutí stačí vytvořit v kořenové složce projektu
soubor pojmenovaný UNDER_MAINTENANCE
, který zapříčiní zobrazení .maintenance.php
na všechny požadavky.
Pro přístup během údržby je potřeba ve svém prohlížeči a na správné adrese vytvořit ve svém prohlížeči ve vývojářských nástrojích
cookie s názvem SKIP_MAINTENANCE
a hodnotu true
. Po obnovení stránky by se web měl zobrazit, pokud ne, zkontrolujte přesnou shodu domény, platnost cookie a parametry ohledně její striktnosti.
Pro ukončení stačí soubor UNDER_MAINTENANCE
odstranit.
Pokud nemáte composer na PATH, nebo v systému máte příliš starý, můžete vyřešit problém lokální instalací (resp. stažením souboru PHAR a jeho spouštěním), viz návod.
Poté namísto composer <action>
spouštíte php composer.phar <action>
. Oba způsoby jsou ekvivalentní.
Je třeba vytvořit tmou-web
klienta, správně nastavit:
Root URL
Valid Redirect URL
Base URL
(jako absolutní cestu bez hostname)Admin URL
Web origins
Taktéž je potřeba změnit Access Type
na confidential. V Mappers
je potřeba vytvořit Groups mapper, který bude do tokenů přidávat pod klíčem groups
informace o skupinách uživatele.
Uživatelům, kteří mají mít přístup do TMOU webu je potřeba přidat zařazení do skupiny Organizátoři TMOU
nebo tmou_org
(přesná shoda).
Systém obsahuje kešovaný výpočet výsledků kvalifikace, což umožňuje ho případně během hry zobrazovat hráčům, aniž by to zatěžovalo databázi. Tento výpočet je potřeba spouštět pravidelně, ideálně každých 5 minut. Pro jednoduchost je připraven skript bin/console update-qualification-scoreboards
, který je potřeba spouštět pravidelně.
* * * * * /path/to/project/bin/console update-qualification-scoreboards >/dev/null 2>&1
Systém obsahuje automatizované párování plateb, tomu je potřeba zajistit automatizované spouštění, nejlépe via CRON:
# Run payment matching at 3:35 (AM) every day for the previous day
YESTERDAY=`php -r "echo date('Y-m-d', time() - 60 * 60 * 24);"`
CRON_KEY=<CRON_KEY>
35 3 * * * wget "https://www.tmou.cz/cron/payments?apiKey=$CRON_KEY&start=$YESTERDAY&end=$YESTERDAY" >/dev/null 2>&1
Pro jednoduchost (a kompatibilitu s různými nástroji CRON) také připraven skript payments/match-previous-day-payments.sh
a tedy stačí použít
35 3 * * * bash <PROJECT_PATH>/payments/match-previous-day-payments.sh >/dev/null 2>&1
Pro správnou funkčnost je potřeba v souboru local.latte
nastavit hodnotu cron.key
, kterou použijete v příkazu výše
a fio.token
, jejíž hodnotu získáte od správce příslušného účtu (stačí token pouze ke čtení).
Po nasazení ručně spusťte období, které chcete dopárovat, ideálně nepřekrývající se s budoucími běhy automtaického párování.
Více informací o fungování najdete v párování plateb.
Logovací systém (Tracy) umí zasílat při selhání e-mail, pro zapnutí této funkcionality je potřeba do App/Config/local.neon
přidat následující kód (nebo přidat do již existující sekce):
tracy:
email:
- [email protected]
- [email protected]