# Build stage FROM node:18-alpine AS node-builder WORKDIR /app COPY . . RUN npm run build # PHP stage FROM php:8.3-fpm-alpine # Install system packages RUN apk add --no-cache \ nginx \ supervisor \ curl \ npm \ nano \ cmake \ gettext # Install PHP modules RUN apk add --no-cache --virtual .build-deps \ libzip-dev \ freetype-dev \ libpng-dev \ libjpeg-turbo-dev \ libwebp-dev \ bzip2-dev \ curl-dev \ tidyhtml-dev \ libxslt-dev \ oniguruma-dev \ postgresql-dev \ sqlite-dev \ libzip \ freetype \ libpng \ libjpeg-turbo \ libwebp \ bzip2 \ libxslt \ oniguruma \ sqlite-libs \ && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ && docker-php-ext-install -j$(nproc) \ mbstring \ xml \ dom \ zip \ intl \ gd \ curl \ calendar \ pdo_sqlite \ bcmath \ && apk del .build-deps # Configure php-fpm RUN sed -i 's/listen = 127.0.0.1:9000/listen = \/run\/php\/php-fpm.sock/' /usr/local/etc/php-fpm.d/www.conf \ && sed -i 's/;listen.owner = www-data/listen.owner = www-data/' /usr/local/etc/php-fpm.d/www.conf \ && sed -i 's/;listen.group = www-data/listen.group = www-data/' /usr/local/etc/php-fpm.d/www.conf \ && sed -i 's/;listen.mode = 0660/listen.mode = 0660/' /usr/local/etc/php-fpm.d/www.conf \ && cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini \ && sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 200M/' /usr/local/etc/php/php.ini \ && sed -i 's/post_max_size = 8M/post_max_size = 200M/' /usr/local/etc/php/php.ini # Copy configurations COPY ./docker/conf/etc /etc # Copy built application from node stage COPY --from=node-builder /app/dist /var/www/html COPY --from=node-builder /app/api /var/www/html/api # Set permissions RUN chown -R www-data:www-data /var/www/html # Create system dirs RUN mkdir -p /var/run && \ mkdir -p /run/php # Copy and set entrypoint COPY ./entrypoint.sh / CMD ["/bin/sh", "/entrypoint.sh"] EXPOSE 80