Files
deskhub/plugin-webseite/Dockerfile
T
2026-10-16 18:42:18 +00:00

47 lines
2.5 KiB
Docker

# Plugin- und Theme-Webseite als Docker-Image.
#
# Admin-Zugang und Signierschlüssel werden beim BAUEN fest in das Image geschrieben: config.php ist schreibgeschützt und
# 'locked'. Im laufenden Container lässt sich nichts davon per Umgebungsvariable, Volume oder Konfigurationsdatei ändern.
# Zum Ändern wird das Image neu gebaut. Gebaut wird mit docker-build.ps1 (Windows) bzw. docker-build.sh (Linux/macOS).
FROM php:8.3-apache
RUN apt-get update \
&& apt-get install -y --no-install-recommends libzip-dev \
&& docker-php-ext-install zip \
&& a2enmod rewrite headers \
&& rm -rf /var/lib/apt/lists/*
# PHP: Uploads bis 12 MB (Pakete sind auf 10 MB begrenzt), keine Fehlerausgabe im Browser, Apache verrät keine Versionen
RUN { echo 'upload_max_filesize=12M'; echo 'post_max_size=14M'; echo 'display_errors=Off'; echo 'log_errors=On'; echo 'expose_php=Off'; } > /usr/local/etc/php/conf.d/plugin-site.ini \
&& { echo 'ServerTokens Prod'; echo 'ServerSignature Off'; echo '<Directory /var/www/html>'; echo ' AllowOverride All'; echo ' Require all granted'; echo '</Directory>'; } > /etc/apache2/conf-available/plugin-site.conf \
&& a2enconf plugin-site
WORKDIR /var/www/html
COPY . /var/www/html/
COPY docker-bake.php /tmp/docker-bake.php
RUN rm -rf config.php storage Dockerfile docker-compose.yml docker-build.ps1 docker-build.sh docker-bake.php Caddyfile .dockerignore
ARG BASE_URL
ARG SITE_NAME="DeskHub Plugins und Themes"
ARG ADMIN_USER=admin
# Zugangsdaten fest einbauen. Passwort-Hash und Signierschlüssel kommen als BuildKit-Secrets und stehen nicht in "docker history".
RUN --mount=type=secret,id=admin_hash,required=true \
--mount=type=secret,id=signing_key,required=true \
--mount=type=secret,id=catalog_key,required=true \
mkdir -p /opt/plugin-site-secure /data \
&& php /tmp/docker-bake.php \
&& rm /tmp/docker-bake.php \
&& chown -R root:root /var/www/html \
&& chown root:www-data /var/www/html/config.php /opt/plugin-site-secure /opt/plugin-site-secure/herausgeber-privat.pem \
&& chmod 0440 /var/www/html/config.php /opt/plugin-site-secure/herausgeber-privat.pem \
&& chmod 0750 /opt/plugin-site-secure \
&& chmod -R go-w /var/www/html \
&& chown www-data:www-data /data
# Beschreibbar ist nur /data (Pakete und Datenbank), alles andere bleibt unverändert
VOLUME ["/data"]
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s CMD php -r 'exit(@file_get_contents("http://127.0.0.1/health.php") === "ok" ? 0 : 1);'