Files
mareike/docker/endeavour/Dockerfile
T

105 lines
3.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Produktions-Image für endeavour (KeyHelp-Server, siehe docs/implement-endeavour.md).
# Unabhängig von docker/prod.Dockerfile, das der bestehende Server weiter nutzt.
#
# Targets:
# app – PHP-FPM mit Code, vendor/ und gebauten Assets
# web – nginx, liefert public/ aus und reicht PHP an "app" weiter
# ---------------------------------------------------------------------------
# base: PHP 8.5 mit den Extensions, die mareike braucht
# ---------------------------------------------------------------------------
FROM php:8.5-fpm-alpine AS base
ARG UID=2000
ARG GID=2000
RUN apk add --no-cache \
imagemagick \
libpng \
libxml2 \
libzip \
oniguruma \
&& apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
imagemagick-dev \
libpng-dev \
libxml2-dev \
libzip-dev \
oniguruma-dev \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install mysqli pdo_mysql mbstring zip exif pcntl gd \
&& apk del .build-deps \
&& rm -rf /tmp/pear
# Nutzer mit der UID/GID des Host-Nutzers, damit das eingebundene storage/ beschreibbar ist.
# Existiert die GID im Image schon, wird die vorhandene Gruppe verwendet.
RUN if getent group "${GID}" > /dev/null; then \
GROUP_NAME="$(getent group "${GID}" | cut -d: -f1)"; \
else \
addgroup -S -g "${GID}" mareike && GROUP_NAME=mareike; \
fi \
&& adduser -S -D -H -u "${UID}" -G "${GROUP_NAME}" mareike
COPY --chmod=0755 docker/php/composer.phar /usr/bin/composer
COPY docker/endeavour/php.ini /usr/local/etc/php/conf.d/zz-mareike.ini
WORKDIR /var/www/html
# ---------------------------------------------------------------------------
# vendor: Composer-Abhängigkeiten (ohne Dev-Pakete)
# ---------------------------------------------------------------------------
FROM base AS vendor
RUN apk add --no-cache git unzip
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist --no-interaction --no-progress
# ---------------------------------------------------------------------------
# assets: Vite-Build (Vite importiert aus app/, daher der volle Quellcode)
# ---------------------------------------------------------------------------
FROM node:24-alpine AS assets
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --no-audit --no-fund
COPY . .
RUN npm run build
# ---------------------------------------------------------------------------
# app: PHP-FPM
# ---------------------------------------------------------------------------
FROM base AS app
COPY . .
COPY --from=vendor /var/www/html/vendor ./vendor
COPY --from=assets /app/public/build ./public/build
# Der Code gehört root; beschreibbar sind nur storage/ und bootstrap/cache/.
RUN composer dump-autoload --optimize --no-dev --no-interaction \
&& mkdir -p \
storage/app/private \
storage/app/public \
storage/framework/cache/data \
storage/framework/sessions \
storage/framework/views \
storage/logs \
storage/temp \
&& chown -R mareike: storage bootstrap/cache
USER mareike
EXPOSE 9000
CMD ["php-fpm"]
# ---------------------------------------------------------------------------
# web: nginx vor PHP-FPM
# ---------------------------------------------------------------------------
FROM nginx:stable-alpine AS web
COPY docker/endeavour/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=app /var/www/html/public /var/www/html/public
EXPOSE 80