forked from mirror/pixelfed
Merge pull request #4986 from jippi/build-frontend-in-docker
Docker: Allow optional building of the frontend
This commit is contained in:
commit
1ff71b2e61
|
@ -1131,6 +1131,13 @@ DOCKER_APP_HOST_CACHE_PATH="${DOCKER_ALL_HOST_DATA_ROOT_PATH:?error}/pixelfed/ca
|
||||||
# @dottie/validate required,oneof=0 1 2
|
# @dottie/validate required,oneof=0 1 2
|
||||||
#DOCKER_APP_PHP_OPCACHE_REVALIDATE_FREQ="2"
|
#DOCKER_APP_PHP_OPCACHE_REVALIDATE_FREQ="2"
|
||||||
|
|
||||||
|
# When doing [docker compose build], should the frontend be built in the Dockerfile?
|
||||||
|
# If set to "0" the included pre-compiled frontend will be used.
|
||||||
|
#
|
||||||
|
# @default "0"
|
||||||
|
# @dottie/validate required,oneof=0 1
|
||||||
|
#DOCKER_APP_BUILD_FRONTEND="0"
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# docker redis
|
# docker redis
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
ignored:
|
ignored:
|
||||||
- DL3002 # warning: Last USER should not be root
|
- DL3002 # warning: Last USER should not be root
|
||||||
- DL3008 # warning: Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
|
- DL3008 # warning: Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
|
||||||
|
- DL3029 # warning: Do not use --platform flag with FROM
|
||||||
- SC2046 # warning: Quote this to prevent word splitting.
|
- SC2046 # warning: Quote this to prevent word splitting.
|
||||||
- SC2086 # info: Double quote to prevent globbing and word splitting.
|
- SC2086 # info: Double quote to prevent globbing and word splitting.
|
||||||
|
|
50
Dockerfile
50
Dockerfile
|
@ -176,6 +176,55 @@ RUN --mount=type=cache,id=pixelfed-pear-${PHP_VERSION}-${PHP_DEBIAN_RELEASE}-${T
|
||||||
PHP_PECL_EXTENSIONS_EXTRA=${PHP_PECL_EXTENSIONS_EXTRA} \
|
PHP_PECL_EXTENSIONS_EXTRA=${PHP_PECL_EXTENSIONS_EXTRA} \
|
||||||
/docker/install/php-extensions.sh
|
/docker/install/php-extensions.sh
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# Node: Build frontend
|
||||||
|
#######################################################
|
||||||
|
|
||||||
|
# NOTE: Since the nodejs build is CPU architecture agnostic,
|
||||||
|
# we only want to build once and cache it for other architectures.
|
||||||
|
# We force the (CPU) [--platform] here to be architecture
|
||||||
|
# of the "builder"/"server" and not the *target* CPU architecture
|
||||||
|
# (e.g.) building the ARM version of Pixelfed on AMD64.
|
||||||
|
FROM --platform=${BUILDARCH} node:lts AS frontend-build
|
||||||
|
|
||||||
|
ARG BUILDARCH
|
||||||
|
ARG BUILD_FRONTEND=0
|
||||||
|
ARG RUNTIME_UID
|
||||||
|
|
||||||
|
ARG NODE_ENV=production
|
||||||
|
ENV NODE_ENV=$NODE_ENV
|
||||||
|
|
||||||
|
WORKDIR /var/www/
|
||||||
|
|
||||||
|
SHELL [ "/usr/bin/bash", "-c" ]
|
||||||
|
|
||||||
|
# Install NPM dependencies
|
||||||
|
RUN --mount=type=cache,id=pixelfed-node-${BUILDARCH},sharing=locked,target=/tmp/cache \
|
||||||
|
--mount=type=bind,source=package.json,target=/var/www/package.json \
|
||||||
|
--mount=type=bind,source=package-lock.json,target=/var/www/package-lock.json \
|
||||||
|
<<EOF
|
||||||
|
if [[ $BUILD_FRONTEND -eq 1 ]];
|
||||||
|
then
|
||||||
|
npm install --cache /tmp/cache --no-save --dev
|
||||||
|
else
|
||||||
|
echo "Skipping [npm install] as --build-arg [BUILD_FRONTEND] is not set to '1'"
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Copy the frontend source into the image before building
|
||||||
|
COPY --chown=${RUNTIME_UID}:${RUNTIME_GID} . /var/www
|
||||||
|
|
||||||
|
# Build the frontend with "mix" (See package.json)
|
||||||
|
RUN \
|
||||||
|
<<EOF
|
||||||
|
if [[ $BUILD_FRONTEND -eq 1 ]];
|
||||||
|
then
|
||||||
|
npm run production
|
||||||
|
else
|
||||||
|
echo "Skipping [npm run production] as --build-arg [BUILD_FRONTEND] is not set to '1'"
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
|
||||||
#######################################################
|
#######################################################
|
||||||
# PHP: composer and source code
|
# PHP: composer and source code
|
||||||
#######################################################
|
#######################################################
|
||||||
|
@ -231,6 +280,7 @@ COPY --link --from=dottie-image /dottie /usr/local/bin/dottie
|
||||||
COPY --link --from=gomplate-image /usr/local/bin/gomplate /usr/local/bin/gomplate
|
COPY --link --from=gomplate-image /usr/local/bin/gomplate /usr/local/bin/gomplate
|
||||||
COPY --link --from=composer-image /usr/bin/composer /usr/bin/composer
|
COPY --link --from=composer-image /usr/bin/composer /usr/bin/composer
|
||||||
COPY --link --from=composer-and-src --chown=${RUNTIME_UID}:${RUNTIME_GID} /var/www /var/www
|
COPY --link --from=composer-and-src --chown=${RUNTIME_UID}:${RUNTIME_GID} /var/www /var/www
|
||||||
|
COPY --link --from=frontend-build --chown=${RUNTIME_UID}:${RUNTIME_GID} /var/www/public /var/www/public
|
||||||
|
|
||||||
#! Changing user to runtime user
|
#! Changing user to runtime user
|
||||||
USER ${RUNTIME_UID}:${RUNTIME_GID}
|
USER ${RUNTIME_UID}:${RUNTIME_GID}
|
||||||
|
|
|
@ -77,6 +77,7 @@ services:
|
||||||
- "type=registry,ref=${DOCKER_APP_IMAGE}-cache:${DOCKER_APP_TAG}"
|
- "type=registry,ref=${DOCKER_APP_IMAGE}-cache:${DOCKER_APP_TAG}"
|
||||||
args:
|
args:
|
||||||
APT_PACKAGES_EXTRA: "${DOCKER_APP_APT_PACKAGES_EXTRA:-}"
|
APT_PACKAGES_EXTRA: "${DOCKER_APP_APT_PACKAGES_EXTRA:-}"
|
||||||
|
BUILD_FRONTEND: "${DOCKER_APP_BUILD_FRONTEND:-0}"
|
||||||
PHP_BASE_TYPE: "${DOCKER_APP_BASE_TYPE}"
|
PHP_BASE_TYPE: "${DOCKER_APP_BASE_TYPE}"
|
||||||
PHP_DEBIAN_RELEASE: "${DOCKER_APP_DEBIAN_RELEASE}"
|
PHP_DEBIAN_RELEASE: "${DOCKER_APP_DEBIAN_RELEASE}"
|
||||||
PHP_EXTENSIONS_EXTRA: "${DOCKER_APP_PHP_EXTENSIONS_EXTRA:-}"
|
PHP_EXTENSIONS_EXTRA: "${DOCKER_APP_PHP_EXTENSIONS_EXTRA:-}"
|
||||||
|
@ -128,6 +129,7 @@ services:
|
||||||
- "type=registry,ref=${DOCKER_APP_IMAGE}-cache:${DOCKER_APP_TAG}"
|
- "type=registry,ref=${DOCKER_APP_IMAGE}-cache:${DOCKER_APP_TAG}"
|
||||||
args:
|
args:
|
||||||
APT_PACKAGES_EXTRA: "${DOCKER_APP_APT_PACKAGES_EXTRA:-}"
|
APT_PACKAGES_EXTRA: "${DOCKER_APP_APT_PACKAGES_EXTRA:-}"
|
||||||
|
BUILD_FRONTEND: "${DOCKER_APP_BUILD_FRONTEND:-0}"
|
||||||
PHP_BASE_TYPE: "${DOCKER_APP_BASE_TYPE}"
|
PHP_BASE_TYPE: "${DOCKER_APP_BASE_TYPE}"
|
||||||
PHP_DEBIAN_RELEASE: "${DOCKER_APP_DEBIAN_RELEASE}"
|
PHP_DEBIAN_RELEASE: "${DOCKER_APP_DEBIAN_RELEASE}"
|
||||||
PHP_EXTENSIONS_EXTRA: "${DOCKER_APP_PHP_EXTENSIONS_EXTRA:-}"
|
PHP_EXTENSIONS_EXTRA: "${DOCKER_APP_PHP_EXTENSIONS_EXTRA:-}"
|
||||||
|
|
Loading…
Reference in New Issue