# syntax=docker/dockerfile:1 # Image Roundcube (php-fpm) + skin Elastic recompilé avec les surcharges de theme/ # # Le skin Elastic est livré compilé (styles.min.css). Ses points d'extension # _variables.less / _styles.less ne sont pris en compte qu'à la compilation LESS : # on recompile donc ici, dans un étage Node jetable, puis on recopie le skin # dans /usr/src/roundcubemail (source que l'entrypoint synchronise vers /var/www/html). ARG RC_VERSION=1.7.4 FROM roundcube/roundcubemail:${RC_VERSION}-fpm-alpine AS upstream # --- Étage 1 : compilation LESS du skin Elastic --- FROM node:22-alpine AS theme ARG LESS_VERSION=4.9.1 ARG LESS_CLEANCSS_VERSION=1.6.0 # Secret optionnel "ca" : CA d'un proxy TLS d'entreprise (docker build --secret id=ca,src=ca.pem) RUN --mount=type=secret,id=ca,required=false \ NODE_EXTRA_CA_CERTS=/run/secrets/ca npm install -g --no-fund --no-audit \ less@${LESS_VERSION} less-plugin-clean-css@${LESS_CLEANCSS_VERSION} COPY --from=upstream /usr/src/roundcubemail/skins/elastic /build/elastic COPY theme/ /build/theme/ WORKDIR /build/elastic # Surcharges optionnelles : un theme/ vide redonne l'Elastic d'origine RUN set -eu; \ for f in _variables.less _styles.less; do \ if [ -f /build/theme/$f ]; then cp /build/theme/$f styles/; echo "surcharge: $f"; fi; \ done; \ if [ -d /build/theme/fonts ]; then cp -r /build/theme/fonts/. fonts/; fi; \ if [ -d /build/theme/images ]; then cp -r /build/theme/images/. images/; fi; \ for css in styles print embed; do \ lessc --clean-css="--s1 --advanced" styles/$css.less > styles/$css.min.css; \ done; \ ls -l styles/*.min.css # --- Étage 2 : image finale --- FROM upstream ARG ASPELL_DICTS="fr en" # Dictionnaires installés au build (plutôt qu'à chaque démarrage via ROUNDCUBEMAIL_ASPELL_DICTS) # mailcap fournit /etc/mime.types, utilisé par Roundcube pour le mapping type MIME <-> extension RUN --mount=type=secret,id=ca,required=false \ set -eu; \ if [ -s /run/secrets/ca ]; then export SSL_CERT_FILE=/run/secrets/ca; fi; \ pkgs="mailcap"; \ for d in $(echo "$ASPELL_DICTS" | tr ',' ' '); do pkgs="$pkgs aspell-$d"; done; \ apk add --no-cache $pkgs COPY --from=theme /build/elastic/ /usr/src/roundcubemail/skins/elastic/ # Healthcheck php-fpm : réponse au ping FastCGI via le pool COPY roundcube/zz-healthcheck.conf /usr/local/etc/php-fpm.d/zz-healthcheck.conf