Files
crowd-fund-api/docker/main/Dockerfile
T

83 lines
1.8 KiB
Docker

FROM php:8.3-fpm-alpine AS system-setup
RUN apk --no-cache add \
curl \
git \
linux-headers \
icu-dev \
zip \
libzip-dev \
unzip \
nginx \
supervisor \
$PHPIZE_DEPS && \
pecl install apcu
RUN curl --remote-name https://curl.se/ca/cacert.pem \
&& mv cacert.pem /etc/ssl/certs/ca-certificates.crt
RUN docker-php-ext-install \
pdo \
pdo_mysql \
intl \
zip \
opcache && \
docker-php-ext-enable apcu
COPY --from=composer:2.8.9 /usr/bin/composer /usr/local/bin/composer
COPY ./docker/main/default.conf /etc/nginx/http.d/default.conf
COPY ./docker/main/supervisord.conf /etc/supervisord.conf
COPY ./docker/main/www.conf /usr/local/etc/php-fpm.d/www.conf
COPY ./docker/main/local.ini /usr/local/etc/php/conf.d/local.ini
# FPM configuration via ENV
ENV FPM_PM=dynamic
ENV FPM_PM_MAX_CHILDREN=5
ENV FPM_PM_START_SERVERS=2
ENV FPM_PM_MIN_SPARE_SERVERS=1
ENV FPM_PM_MAX_SPARE_SERVERS=3
# PHP configuration via ENV
ENV LOG_TO_STDOUT=1
ENV PHP_MEMORY_LIMIT=512M
ENV PHP_MAX_EXECUTION_TIME=30
ENV PHP_UPLOAD_MAX_FILESIZE=120M
ENV PHP_POST_MAX_SIZE=128M
ENV PHP_SESSION_SAVE_HANDLER=files
ENV PHP_SESSION_SAVE_PATH=
ENV PHP_DISPLAY_ERRORS=0
ENV PHP_DISPLAY_STARTUP_ERRORS=0
FROM node:24-alpine AS assets
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM system-setup AS app-setup
COPY . /app
COPY --from=assets /app/public/build /app/public/build
RUN chown -R nginx:nginx /app
COPY ./docker/main/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
USER nginx
WORKDIR /app
RUN composer install --prefer-dist --no-scripts --no-dev --optimize-autoloader
EXPOSE 80
HEALTHCHECK --interval=15s --timeout=5s --retries=3 \
CMD curl -s -o /dev/null -f http://localhost/v4/ping || exit 1
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]