Implements MeshVault M1 (issues #6–11): - Four-service Docker Compose stack (nginx, PHP-FPM 8.3, PostgreSQL 17, Node assets) - Slim 4 + PHP-DI routing with escaped PHP views and production/dev error handling - Immutable validated AppConfig with redacted diagnostics - JSON stdout Monolog logging with job-scoped context - Tailwind CSS v4 deterministic locked builds with template scanning - POSIX and PowerShell dev wrappers (up/down/test/lint/assets/watch) - Startup config validation fails before FPM serves as unprivileged www-data - migrate/seed explicitly unavailable until M2 (#12); #10 remains open Verified via clean-start acceptance on remote host (keith@192.168.2.23).
21 lines
921 B
Docker
21 lines
921 B
Docker
FROM php:8.3-fpm-bookworm
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends libonig-dev libxml2-dev unzip \
|
|
&& docker-php-ext-install mbstring dom \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer
|
|
WORKDIR /var/www/html
|
|
# Dependencies are Linux-native and rebuilt from the lock, never host-mounted.
|
|
COPY composer.json composer.lock ./
|
|
RUN composer install --no-interaction --prefer-dist --no-progress
|
|
COPY bin ./bin
|
|
COPY docker/php/entrypoint.sh /usr/local/bin/meshvault-entrypoint
|
|
COPY docker/php/zz-meshvault.conf /usr/local/etc/php-fpm.d/zz-meshvault.conf
|
|
RUN chmod 755 /usr/local/bin/meshvault-entrypoint
|
|
RUN mkdir -p /var/www/html/.phpunit.cache && chown www-data:www-data /var/www/html/.phpunit.cache
|
|
|
|
# The entire FPM process runs as the same identity used for library checks.
|
|
USER www-data
|
|
ENTRYPOINT ["meshvault-entrypoint"]
|
|
CMD ["php-fpm"]
|