###### # STAGE 1: GET REQUIRED PHP PACKAGES ###### FROM git.winteraccess.id/docker/composer:2.7.2-ubuntu-php8.0 AS php_build LABEL maintainer=" aprimediet@gmail.com" WORKDIR /build # ADD COMPOSER file ADD composer* ./ # INSTALL REQUIRED PHP EXT RUN --mount=type=cache,target=/var/cache/apt/archives \ apt -y update && apt -y upgrade && apt -y install \ php${PHP_VERSION}-curl php${PHP_VERSION}-dom php${PHP_VERSION}-xml \ php${PHP_VERSION}-gd php${PHP_VERSION}-zip # RUN COMPOSER UPDATE FIRST RUN --mount=type=cache,target=${COMPOSER_CACHE_DIR} \ composer update -n --prefer-dist \ --no-install --no-autoloader --no-scripts; exit 0 # RUN COMPOSER INSTALL RUN --mount=type=cache,target=${COMPOSER_CACHE_DIR} \ composer install -n --prefer-dist \ --no-autoloader --no-scripts ###### END OF STAGE 1 ###### # STAGE 2: GET REQUIRED NODEJS PACKAGES ###### FROM git.winteraccess.id/docker/nodejs:18-alpine AS static_build LABEL maintainer=" aprimediet@gmail.com" WORKDIR /build # ADD REQUIRED NODE FILES ADD . . # INSTALL REQUIRED NODE PACKAGES RUN --mount=type=cache,target=${YARN_CACHE_DIR} \ yarn install --non-interactive # BUILD ASSETS THROUGH VITE # RUN --mount=type=cache,target=${YARN_CACHE_DIR} \ # yarn build ###### END OF STAGE 2 ###### # STAGE 3: GET WKHTMLTOPDF FOR ALPINE ###### FROM ghcr.io/surnet/alpine-wkhtmltopdf:3.19.0-0.12.6-full AS wkhtmltopdf ###### END OF STAGE 3 ###### # STAGE 4: Build Runtime Container ###### FROM git.winteraccess.id/docker/php:8.0-apache-alpine AS runtime LABEL maintainer=" aprimediet@gmail.com" ARG BUILD_ENV=dev # SET WORKDIR WORKDIR /app/htdocs # UPDATE AND UPGRADE PACKAGES FIRST RUN apk update && apk upgrade # INSTALL REQUIRED PHP EXT RUN --mount=type=cache,target=/var/cache/apk \ apk add \ php${PHP_VERSION}-pdo php${PHP_VERSION}-session php${PHP_VERSION}-fileinfo \ php${PHP_VERSION}-curl php${PHP_VERSION}-tokenizer php${PHP_VERSION}-dom \ php${PHP_VERSION}-gd php${PHP_VERSION}-xml php${PHP_VERSION}-xmlreader \ php${PHP_VERSION}-xmlwriter php${PHP_VERSION}-zip php${PHP_VERSION}-simplexml \ php${PHP_VERSION}-mbstring php${PHP_VERSION}-pgsql php${PHP_VERSION}-pdo_pgsql \ fcgi # INSTALL PHP OpenSSL RUN --mount=type=cache,target=/var/cache/apk \ apk add php${PHP_VERSION}-openssl; exit 0 # Install php83-openssl from testing if main or community doesn't exists RUN --mount=type=cache,target=/var/cache/apk \ apk add php${PHP_VERSION}-openssl@testing; exit 0 # INSTALL PHP PHAR RUN --mount=type=cache,target=/var/cache/apk \ apk add php${PHP_VERSION}-phar; exit 0 # Install php83-phar from testing if main or community doesn't exists RUN --mount=type=cache,target=/var/cache/apk \ apk add php${PHP_VERSION}-phar@testing; exit 0 # Install php83-json RUN --mount=type=cache,target=/var/cache/apk \ apk add php${PHP_VERSION}-json; exit 0 # Install php83-json from testing if main or community doesn't exists RUN --mount=type=cache,target=/var/cache/apk \ apk add php${PHP_VERSION}-json@testing; exit 0 # Install php83-iconv RUN --mount=type=cache,target=/var/cache/apk \ apk add php${PHP_VERSION}-iconv; exit 0 # Install php83-iconv from testing if main or community doesn't exists RUN --mount=type=cache,target=/var/cache/apk \ apk add php${PHP_VERSION}-iconv@testing; exit 0 # INSTALL REQUIRED WKHTMLTOPDF DEPENDENCIES RUN --mount=type=cache,target=/var/cache/apk \ apk add libstdc++ libx11 libxrender libxext \ libssl1.1 ca-certificates fontconfig \ freetype ttf-droid ttf-freefont ttf-liberation # Reconfigure apache mod RUN sed -i "s|#LoadModule rewrite_module|LoadModule rewrite_module|" /etc/apache2/httpd.conf && \ sed -i "s|#LoadModule deflate_module|LoadModule deflate_module|" /etc/apache2/httpd.conf && \ sed -i "s|#LoadModule expires_module|LoadModule expires_module|" /etc/apache2/httpd.conf && \ sed -i "s|DocumentRoot \"/app/htdocs\"|DocumentRoot \"/app/htdocs/public\"|" /etc/apache2/httpd.conf && \ sed -i "s|Directory \"/app/htdocs\"|Directory \"/app/htdocs/public\"|" /etc/apache2/httpd.conf # COPYING REQUIRED FILES ADD ./deploy/docker/scripts/initialize /scripts/initialize ADD . . RUN chmod +x /scripts/* && \ mv ./public ./public-tmp # COPY BUILD FILES COPY --from=php_build /build/vendor ./vendor COPY --from=php_build /build/composer.lock ./composer.lock COPY --from=php_build /usr/local/bin/composer /usr/local/bin/composer COPY --from=static_build /build/node_modules ./node_modules # COPY --from=static_build /build/public/build ./public/build COPY --from=wkhtmltopdf /bin/wkhtmltopdf /bin/libwkhtmltox.so /bin/wkhtmltoimage /bin/ # REMOVE BOOTSTRAP CACHE RUN rm -rf ./bootstrap/cache/* # CLEAR CACHE AND DEPLOY FILES RUN rm -vrf /var/cache/apk/* && rm -rf ./deploy # RUN DUMP AUTOLOAD && GENERATE APP_KEY # TO ENSURE APP_KEY IS IDENTICAL BETWEEN ALL # CONTAINERS RUN composer dump-autoload RUN ln -s /var/log/apache2 /app/logs && \ ln -s /usr/lib/apache2 /app/modules && \ ln -s /run/apache2 /app/run EXPOSE 80 ###### END OF STAGE 4