build: Docker-Setup und Apache-Konfiguration

Apache mit mod_php statt PHP-FPM plus Nginx: dadurch verhalten sich
Docker und klassisches Shared Hosting gleich, es gilt dieselbe
.htaccess. MariaDB liegt hinter einem Compose-Profil.

Die Entwicklungspakete bleiben im Image installiert - beim Aufraeumen
mit apt-get purge --auto-remove verschwindet sonst auch die von imagick
benoetigte Laufzeitbibliothek.

Die .htaccess im Stammverzeichnis wird nur gebraucht, wenn der Webroot
nicht auf public/ gelegt werden kann; sie sperrt dann alle uebrigen
Verzeichnisse.
This commit is contained in:
2026-08-03 18:11:40 +02:00
parent 8a7939bee2
commit f4aece9557
5 changed files with 258 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
# =============================================================
# urlshort-qr-gen – .htaccess fuer das Projekt-Stammverzeichnis
#
# Diese Datei wird NUR gebraucht, wenn beim Hoster der Webroot
# nicht auf /public gelegt werden kann (Shared-Hosting-Variante B
# in der README). Dann liegt das komplette Projekt im Webroot und
# diese Regeln leiten intern nach public/ weiter – gleichzeitig
# werden alle uebrigen Ordner gesperrt.
#
# Liegt der Webroot korrekt auf /public, ist diese Datei
# wirkungslos (sie liegt dann ausserhalb des Webroots).
# =============================================================
Options -Indexes
AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
RewriteEngine On
# 1) Nicht-oeffentliche Verzeichnisse hart sperren.
RewriteRule ^(src|templates|migrations|tests|docker|data|vendor|\.git)(/|$) - [F,L]
# 2) Konfigurations- und Projektdateien sperren.
RewriteRule ^(\.env|composer\.(json|lock)|phpunit\.xml|Dockerfile|docker-compose\.ya?ml|.*\.md)$ - [F,L]
# 3) Bereits nach public/ aufgeloeste Anfragen nicht erneut umschreiben.
RewriteCond %{REQUEST_URI} !^/?public/
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
# Zusaetzlicher Schutz, falls mod_rewrite fehlt.
<FilesMatch "^(\.env.*|composer\.(json|lock)|phpunit\.xml|.*\.md|Dockerfile)$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
</IfModule>
</FilesMatch>