# syntax=docker/dockerfile:1 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 # --- 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