Tento projekt obsahuje Symfony aplikaci připravenou pro nasazení v Dockeru s PHP 8.3 a MySQL. Frontend je spravován pomocí Webpack Encore a Bootstrapu.
- Docker
- Docker Compose (plugin pro
docker compose) - Node.js a npm (vyžadováno uvnitř PHP kontejneru pro správu frontend závislostí a sestavování assetů)
Pro bezproblémový vývoj a spouštění projektu na vašem hostitelském systému (např. Ubuntu ve WSL) se doporučují následující verze nástrojů:
- Operační systém: Ubuntu 22.04 LTS nebo novější (nebo jiný kompatibilní Linux/macOS/Windows s WSL2).
- Docker: Verze 24.x.x nebo novější.
- Docker Compose: Verze v2.x.x nebo novější.
- Node.js: Verze 20.10.0 nebo novější (doporučena nejnovější LTS verze). Tato verze je klíčová pro správné fungování
npmpříkazů, zejména pokud je omylem spustíte na hostiteli, nebo pro jiné projekty. - npm: Verze 10.x.x nebo novější.
Po naklonování repozitáře postupujte podle těchto kroků:
Tento příkaz sestaví Docker obrazy (pokud je to poprvé nebo pokud se změnily soubory Dockerfile) a spustí kontejnery na pozadí.
Důležité: Pokud jste provedli změny v Dockerfile (např. přidali nodejs a npm), je nutné obraz znovu sestavit. Pro zajištění čistého sestavení a spuštění nového kontejneru doporučujeme následující postup:
# 1. Zastavte a odstraňte existující PHP kontejner (pokud běží)
docker compose stop php
docker compose rm -f php
# 2. Znovu sestavte obraz služby PHP s vynuceným sestavením (bez cache)
docker compose build --no-cache php
# 3. Spusťte všechny služby
docker compose up -dPokud jste neprovedli změny v Dockerfile a projekt pouze spouštíte poprvé, nebo po zastavení, jednoduše:
docker compose up -d --buildSpusťte Composer uvnitř PHP kontejneru pro instalaci všech potřebných knihoven definovaných v composer.lock.
docker compose exec php composer installPo instalaci Composer závislostí je potřeba nainstalovat frontend závislosti (např. Bootstrap) pomocí npm. Tento příkaz se provádí uvnitř PHP kontejneru.
docker compose exec php npm installPoužijte Webpack Encore k sestavení CSS a JavaScript souborů (včetně Bootstrapu). Tyto příkazy se provádějí uvnitř PHP kontejneru.
# Pro vývoj (s režimem sledování, který automaticky znovu sestavuje při změnách souborů).
# Spusťte tento příkaz jednou na začátku vývojové relace v samostatném terminálu a nechte ho běžet.
docker compose exec php npm run dev
# Pro produkci (optimalizované a minifikované soubory).
# Spusťte tento příkaz jednou při přípravě na nasazení.
# docker compose exec php npm run buildPřed spuštěním migrací je nutné vytvořit databázi:
docker compose exec php php bin/console doctrine:database:createPokud je databáze prázdná nebo potřebuje aktualizace schématu, spusťte migrace.
docker compose exec php php bin/console doctrine:migrations:migratePro jistotu vymažte Symfony cache.
docker compose exec php php bin/console cache:clearSpusťte vestavěný Symfony webový server uvnitř PHP kontejneru. Parametr --allow-all-ip je klíčový pro to, aby byl server přístupný zvenčí kontejneru.
Varování: Tento vestavěný server je určen pouze pro vývojové účely a není vhodný pro produkční prostředí. Pro produkci byste měli použít robustní webový server jako Nginx nebo Apache s PHP-FPM.
docker compose exec php symfony server:start --allow-all-ipAplikace by nyní měla být přístupná na http://localhost:8000/en/mediaitem (pro angličtinu) nebo http://localhost:8000/cs/mediaitem (pro češtinu).
docker compose up -ddocker compose downVarování: Příkaz docker compose down -v také odstraní databázové svazky, čímž smaže všechna data v databázi. Pokud si přejete data zachovat, použijte pouze docker compose down nebo docker compose stop/start.
Pro spuštění jakéhokoli příkazu (např. php bin/console) uvnitř PHP kontejneru použijte docker compose exec php ...:
# Příklad: Vymazání cache
docker compose exec php php bin/console cache:clear
# Příklad: Spuštění migrací
docker compose exec php php bin/console doctrine:migrations:migrate
# Příklad: Sestavení frontend assetů
docker compose exec php npm run dev
# Příklad: Spuštění Symfony webového serveru
docker compose exec php symfony server:start --allow-all-ip