2026-09-03 17:45:35 +01:00
|
|
|
# syntax=docker/dockerfile:1
|
|
|
|
|
|
2026-09-04 13:37:07 +01:00
|
|
|
# --- Stage 1: build the Vue frontend ---------------------------------------
|
|
|
|
|
FROM node:24-alpine AS frontend
|
|
|
|
|
|
|
|
|
|
WORKDIR /web
|
|
|
|
|
|
|
|
|
|
# Dependencies in their own layer, cached unless the manifests change. npm ci
|
|
|
|
|
# resolves this stage's (musl) platform binaries for rollup/esbuild.
|
|
|
|
|
COPY web/package.json web/package-lock.json ./
|
|
|
|
|
RUN npm ci
|
|
|
|
|
|
|
|
|
|
COPY web/ ./
|
|
|
|
|
RUN npm run build # vue-tsc type-check, then `vite build` -> /web/dist
|
|
|
|
|
|
|
|
|
|
# --- Stage 2: PHP + Apache runtime ---------------------------------------------
|
2026-09-03 17:45:35 +01:00
|
|
|
FROM php:8.3-apache
|
|
|
|
|
|
|
|
|
|
# --- PHP extensions and CLI tools ----------------------------------------------
|
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
|
libsqlite3-dev \
|
|
|
|
|
libonig-dev \
|
|
|
|
|
unzip \
|
|
|
|
|
curl \
|
|
|
|
|
&& docker-php-ext-install pdo_sqlite mbstring \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
# --- Composer ----------------------------------------------------------------
|
|
|
|
|
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
|
|
|
|
|
|
|
|
|
# --- Apache: document root -> public/, allow .htaccess rewrites -------------
|
|
|
|
|
RUN a2enmod rewrite
|
|
|
|
|
COPY docker/apache.conf /etc/apache2/sites-available/000-default.conf
|
|
|
|
|
|
|
|
|
|
WORKDIR /var/www/html
|
|
|
|
|
|
|
|
|
|
# --- PHP dependencies (own layer, cached unless composer.* changes) --------
|
|
|
|
|
COPY composer.json composer.lock ./
|
|
|
|
|
RUN composer install --no-dev --no-interaction --no-progress --prefer-dist --no-autoloader
|
|
|
|
|
|
|
|
|
|
# --- Application source ----------------------------------------------------
|
|
|
|
|
COPY . .
|
|
|
|
|
RUN composer dump-autoload --optimize --no-dev \
|
|
|
|
|
&& mkdir -p storage \
|
|
|
|
|
&& chown -R www-data:www-data storage
|
|
|
|
|
|
2026-09-04 13:37:07 +01:00
|
|
|
# --- Built frontend: served from the web root next to the API front controller
|
|
|
|
|
COPY --from=frontend /web/dist/ ./public/
|
|
|
|
|
|
2026-09-03 17:45:35 +01:00
|
|
|
# --- Entrypoint: migrate, then hand off to Apache ------------------------
|
|
|
|
|
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
|
|
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
|
|
|
|
|
|
|
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
|
|
|
|
CMD ["apache2-foreground"]
|
|
|
|
|
|
|
|
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \
|
|
|
|
|
CMD curl -fsS http://localhost/api/health || exit 1
|