Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sa4nUG3GtbdEaPS6fA8eq1
53 lines
2.4 KiB
Docker
53 lines
2.4 KiB
Docker
# 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
|