49 lines
2.7 KiB
Docker
49 lines
2.7 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 \
|
|
--mount=type=secret,id=fcm_service_account,required=false \
|
|
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 \
|
|
&& if [ -f /opt/plugin-site-secure/fcm-dienstkonto.json ]; then chown root:www-data /opt/plugin-site-secure/fcm-dienstkonto.json && chmod 0440 /opt/plugin-site-secure/fcm-dienstkonto.json; fi \
|
|
&& 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);'
|