- Material Design Icons (https://icones.js.org/collection/mdi)
- Cookie Consent v3 (https://cookieconsent.orestbida.com/)
-
Public upload (Seite „Foto hochladen“): Hochgeladenes Bild wird sofort in WebP umgewandelt und in vier Varianten gespeichert:
{name}.webp(1000×563, Hauptbild){name}_thumb.webp(110×56, Vorschaubild){name}@2x.webp(2000×1126){name}@3x.webp(3000×1689)
-
Admin-Upload (EasyAdmin Fotos): Beim Speichern wird dasselbe gemacht – die ursprüngliche Datei (z. B. JPG) wird durch die WebP-Varianten ersetzt und gelöscht.
-
Verarbeitung:
App\Service\ImageProcessingService(GD, WebP). -
Header Images
- Desktop
- 3960 3x 2640 2x 1320 1x
- Tablet
- 2400 3x 1600 2x 800 1x
- Mobil
- 1440 3x 960 2x 480 1x
- Desktop
- git pull origin main --rebase
- php bin/console app:generate-sitemap
php bin/phpunit # Run all tests php bin/phpunit tests/Service/ # Run service tests php bin/phpunit tests/Service/FrontendCacheServiceTest.php # Run specific test
php -S 127.0.0.1:8080 -t /opt/homebrew/share/phpmyadmin
Das Projekt kann komplett mit Docker laufen: PHP 8.2 + Apache + MySQL 8.
- Docker Desktop (oder Docker Engine + Docker Compose) installiert.
-
Container starten
docker compose up -d
Beim ersten Mal wird das Image gebaut (z. B. 2–5 Minuten).
-
App im Browser öffnen
- App: http://localhost:8080
- Backoffice: http://localhost:8082/admin
- phpMyAdmin (Datenbank): http://localhost:8081
Login: Benutzermunich, Passwortmunich_secret(oderroot/root_secretfür alle Rechte).
-
Datenbank einrichten (einmalig nach dem ersten Start)
docker compose exec app php bin/console doctrine:migrations:migrate --no-interactionOptional: Fixtures laden, falls vorhanden.
-
Cache leeren (falls nötig)
docker compose exec frontend php bin/console cache:clear docker compose exec backoffice php bin/console cache:clear
-
Composer /
vendorim Container
docker-compose.ymllegtvendorin ein eigenes Docker-Volume (nicht dein lokaler./vendor). Wenn sichcomposer.lockodercomposer.jsonändern (z. B. neues Paket wiesymfony/ux-toolkit), musst du die Abhängigkeiten im Container neu installieren, sonst fehlen Pakete trotz neuem Image:docker compose run --rm app composer install
(Alternativ bei laufendem Stack:
docker compose exec app composer install.) -
Fahrtzeiten ab München (optional, für „ca. X Min. ab München“ in der Karten-Popup): Travel-Zeiten liegen in der DB; der Server ruft kein OSRM auf.
- Lokal/Docker (wo HTTPS funktioniert):
php bin/console app:travel-time:export→ erzeugtvar/travel_times.json. - Datei auf den Live-Server legen (Upload oder im Repo), dann auf dem Server:
php bin/console app:travel-time:import. - So ist kein Outbound-HTTPS und kein SSL-Trick auf dem Host nötig.
- Lokal/Docker (wo HTTPS funktioniert):
| Befehl | Beschreibung |
|---|---|
docker compose up -d |
Container starten (im Hintergrund) |
docker compose down |
Container stoppen und entfernen |
docker compose exec app php bin/console … |
Symfony-Kommando im App-Container ausführen (DB: Host mysql) |
docker compose exec app bash |
Shell im App-Container öffnen |
docker compose logs -f app |
Logs der App anzeigen |
docker compose run --rm app composer install |
vendor-Volume nach Lock-Änderungen aktualisieren (s. Schritt 5) |
| http://localhost:8081 | phpMyAdmin (Datenbank-Verwaltung) |
-
Datenbank: In
docker-compose.ymlsind voreingestellt:- Host:
mysql(Service-Name) - Datenbank:
munich - User:
munich/ Passwort:munich_secret - Port auf dem Host:
3306(z. B. für MySQL-Client oder phpMyAdmin)
- Host:
-
Datenbank-Import (Kurzweg): SQL-Dump per Kommandozeile einspielen (schneller als über phpMyAdmin, keine Größenbeschränkung):
# Dump-Datei z. B. im Projektordner als dump.sql abgelegt, dann: docker compose exec -T mysql mysql -u munich -pmunich_secret munich < dump.sql
Für gzipped Dumps:
gunzip -c dump.sql.gz | docker compose exec -T mysql mysql -u munich -pmunich_secret munich -
Eigene Werte: Passwörter und Ports kannst du in
docker-compose.ymlunterenvironmentbzw.portsanpassen. -
Assets (npm/Encore): Auf dem Host ausführen (
npm install,npm run buildodernpm run watch). Die gebauten Dateien liegen inpublic/buildund werden per Volume in den Container übernommen.
Die Datenbank-Daten liegen im Docker-Volume mysql_data. Bei docker compose down -v werden Volumes gelöscht – dann ist die DB leer und Migrations müssen erneut laufen.