Files
florian.wilde f4aece9557 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.
2026-08-03 18:11:40 +02:00

76 lines
3.0 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================
# urlshort-qr-gen – Apache + mod_php
# Bewusst dasselbe Setup wie klassisches Shared Hosting, damit
# sich Docker und FTP-Deployment identisch verhalten (.htaccess).
# =============================================================
FROM php:8.3-apache
# --- Systempakete & PHP-Erweiterungen -------------------------
# gd -> PNG-Ausgabe der QR-Codes
# intl -> Umlaut-Domains (IDN) nach UTS-46; optional, es gibt einen
# eigenen Punycode-Rueckfallweg fuer Hosting ohne intl
# pdo_mysql -> optionaler MySQL/MariaDB-Betrieb (SQLite ist eingebaut)
# imagick -> rastert SVG-Logos fuer die PNG-Ausgabe (optional)
#
# Die Entwicklungspakete bleiben absichtlich installiert: beim Aufraeumen
# mit "apt-get purge --auto-remove" verschwindet sonst auch die von
# imagick benoetigte Laufzeitbibliothek libMagickWand. Das Image ist
# dadurch groesser, aber die Erweiterungen laden zuverlaessig.
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
libpng-dev libjpeg62-turbo-dev libfreetype6-dev \
libzip-dev libicu-dev libmagickwand-dev unzip; \
docker-php-ext-configure gd --with-freetype --with-jpeg; \
docker-php-ext-install -j"$(nproc)" gd intl pdo_mysql zip; \
{ pecl install imagick && docker-php-ext-enable imagick; } || \
echo "Hinweis: imagick konnte nicht installiert werden – SVG-Logos wirken dann nur im SVG-Download."; \
rm -rf /var/lib/apt/lists/* /tmp/pear; \
php -m | grep -q '^gd$'; \
php -m | grep -q '^pdo_mysql$'
# --- Apache ---------------------------------------------------
RUN set -eux; \
a2enmod rewrite headers expires; \
sed -ri 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/000-default.conf; \
printf '%s\n' \
'<Directory /var/www/html/public>' \
' Options -Indexes +FollowSymLinks' \
' AllowOverride All' \
' Require all granted' \
'</Directory>' \
'ServerTokens Prod' \
'ServerSignature Off' \
> /etc/apache2/conf-available/urlshort.conf; \
a2enconf urlshort
COPY docker/php.ini /usr/local/etc/php/conf.d/urlshort.ini
# --- Composer -------------------------------------------------
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
# Abhaengigkeiten zuerst: bleibt beim Aendern des Codes im Cache.
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-interaction --no-progress --optimize-autoloader --no-scripts
COPY . .
RUN set -eux; \
mkdir -p data/uploads; \
chown -R www-data:www-data data; \
chmod -R 775 data
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
CMD php -r 'exit(@file_get_contents("http://127.0.0.1/login") === false ? 1 : 0);'
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["apache2-foreground"]