# 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 ''; echo ' AllowOverride All'; echo ' Require all granted'; echo ''; } > /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);'