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:
+75
@@ -0,0 +1,75 @@
|
||||
# =============================================================
|
||||
# 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"]
|
||||
Reference in New Issue
Block a user