phpvms/Dockerfile
Arthur Parienté 57e258f3b7
ci: build assets during pipeline instead of committing them (#2072)
* chore: remove compiled assets

* build: build assets in dockerfile

* build: update docker-compose.example.yml instead of docker-compose.yml

* ci: build assets in build.yml

* ci: build assets once composer packages are installed
2025-08-15 09:45:14 -05:00

64 lines
1.8 KiB
Docker

# This Dockerfile is used to create the base phpVMS image for Docker in production.
# It is based on https://serversideup.net/open-source/docker-php/.
FROM composer:latest AS vendor
LABEL org.opencontainers.image.description="The official phpVMS image"
COPY composer.json composer.json
COPY composer.lock composer.lock
COPY database database
RUN composer install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist
FROM serversideup/php:8.4-fpm
ARG WWWUSER=1000
ARG WWWGROUP=1000
# Switch to root so we can do root things
USER root
# Install missing extensions with root permissions
RUN install-php-extensions intl bcmath
# Install mariadb client (required for backups)
RUN apt-get update; \
apt-get upgrade -yqq; \
apt-get install -yqq --no-install-recommends --show-progress \
mariadb-client
# Install nodejs
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
# Deal with permissions
RUN usermod -ou $WWWUSER www-data \
&& groupmod -og $WWWGROUP www-data
# Drop back to our unprivileged user
USER www-data
# Copy application files
COPY --chown=www-data:www-data . /var/www/html
# Copy deps from the composer build stage
COPY --chown=www-data:www-data --from=vendor /app/vendor/ /var/www/html/vendor/
# Build assets
# Note: the assets are moved to the build directory in the image, they'll be moved back to
# the public directory in the entrypoint script. This allows to overwrite the volume
# so that the assets are also updated in caddy.
RUN npm install && npm run build && \
cp -R ./public/build/ ./build
COPY --chmod=755 ./resources/docker/run-dump-autoload.sh /etc/entrypoint.d/20-run-dump-autoload.sh
COPY --chmod=755 ./resources/docker/copy-assets.sh /etc/entrypoint.d/30-copy-assets.sh