mirror of
https://github.com/penpot/penpot.git
synced 2025-08-07 14:38:33 +02:00
🎉 Add imagemagick docker image build scripts (#6925)
* 🎉 Add imagemagick docker image build scripts * 📎 Add PR feedback changes
This commit is contained in:
parent
7ccb742ef3
commit
4f0d3660de
3 changed files with 193 additions and 76 deletions
91
docker/imagemagick/Dockerfile
Normal file
91
docker/imagemagick/Dockerfile
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
FROM ubuntu:24.04
|
||||||
|
LABEL maintainer="Penpot <docker@penpot.app>"
|
||||||
|
|
||||||
|
ENV LANG='C.UTF-8' \
|
||||||
|
LC_ALL='C.UTF-8' \
|
||||||
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
|
TZ=Etc/UTC
|
||||||
|
|
||||||
|
ARG IMAGEMAGICK_VERSION=7.1.1-47
|
||||||
|
|
||||||
|
RUN set -e; \
|
||||||
|
apt-get -qq update; \
|
||||||
|
apt-get -qq upgrade; \
|
||||||
|
apt-get -qqy --no-install-recommends install \
|
||||||
|
autoconf \
|
||||||
|
binutils \
|
||||||
|
build-essential \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
libfftw3-dev \
|
||||||
|
libheif-dev \
|
||||||
|
libjpeg-dev \
|
||||||
|
liblcms2-dev \
|
||||||
|
libltdl-dev \
|
||||||
|
liblzma-dev \
|
||||||
|
libopenexr-dev \
|
||||||
|
libpng-dev \
|
||||||
|
librsvg2-dev \
|
||||||
|
libtiff-dev \
|
||||||
|
libtool \
|
||||||
|
libwebp-dev \
|
||||||
|
libzip-dev \
|
||||||
|
libzstd-dev \
|
||||||
|
pkg-config \
|
||||||
|
; \
|
||||||
|
curl -LfsSo /tmp/magick.tar.gz https://github.com/ImageMagick/ImageMagick/archive/refs/tags/${IMAGEMAGICK_VERSION}.tar.gz; \
|
||||||
|
mkdir -p /tmp/magick; \
|
||||||
|
cd /tmp/magick; \
|
||||||
|
tar -xf /tmp/magick.tar.gz --strip-components=1; \
|
||||||
|
./configure --prefix=/opt/imagick; \
|
||||||
|
make -j 2; \
|
||||||
|
make install; \
|
||||||
|
rm -rf /opt/imagick/lib/libMagick++*; \
|
||||||
|
rm -rf /opt/imagick/include; \
|
||||||
|
rm -rf /opt/imagick/share; \
|
||||||
|
apt-get -qqy --autoremove purge \
|
||||||
|
autoconf \
|
||||||
|
binutils \
|
||||||
|
build-essential \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
libfftw3-dev \
|
||||||
|
libheif-dev \
|
||||||
|
libjpeg-dev \
|
||||||
|
liblcms2-dev \
|
||||||
|
libltdl-dev \
|
||||||
|
liblzma-dev \
|
||||||
|
libopenexr-dev \
|
||||||
|
libpng-dev \
|
||||||
|
librsvg2-dev \
|
||||||
|
libtiff-dev \
|
||||||
|
libtool\
|
||||||
|
libwebp-dev \
|
||||||
|
libzip-dev \
|
||||||
|
libzstd-dev \
|
||||||
|
pkg-config \
|
||||||
|
;\
|
||||||
|
apt-get -qqy --no-install-recommends install \
|
||||||
|
libfontconfig1 \
|
||||||
|
libfreetype6 \
|
||||||
|
libglib2.0-0 \
|
||||||
|
libgomp1 \
|
||||||
|
libheif1 \
|
||||||
|
libjpeg-turbo8 \
|
||||||
|
liblcms2-2 \
|
||||||
|
libopenexr-3-1-30 \
|
||||||
|
libopenjp2-7 \
|
||||||
|
libpng16-16 \
|
||||||
|
librsvg2-2 \
|
||||||
|
libtiff6 \
|
||||||
|
libwebp7 \
|
||||||
|
libwebpdemux2 \
|
||||||
|
libwebpmux3 \
|
||||||
|
libxml2 \
|
||||||
|
libzip4t64 \
|
||||||
|
libzstd1 \
|
||||||
|
;\
|
||||||
|
apt-get -qqy clean; \
|
||||||
|
rm -rf /var/lib/apt/lists/*;
|
||||||
|
|
||||||
|
ENTRYPOINT ["/opt/imagick/bin/magick"]
|
|
@ -6,37 +6,18 @@ ENV LANG='C.UTF-8' \
|
||||||
JAVA_HOME="/opt/jdk" \
|
JAVA_HOME="/opt/jdk" \
|
||||||
DEBIAN_FRONTEND=noninteractive \
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
NODE_VERSION=v22.16.0 \
|
NODE_VERSION=v22.16.0 \
|
||||||
IMAGEMAGICK_VERSION=7.1.1-47 \
|
|
||||||
TZ=Etc/UTC
|
TZ=Etc/UTC
|
||||||
|
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
apt-get -qq update; \
|
apt-get -qq update; \
|
||||||
apt-get -qq upgrade; \
|
apt-get -qq upgrade; \
|
||||||
apt-get -qqy --no-install-recommends install \
|
apt-get -qqy --no-install-recommends install \
|
||||||
curl \
|
|
||||||
ca-certificates \
|
|
||||||
binutils \
|
binutils \
|
||||||
build-essential autoconf libtool pkg-config \
|
ca-certificates \
|
||||||
libltdl-dev \
|
curl \
|
||||||
libpng-dev libjpeg-dev libtiff-dev libwebp-dev libopenexr-dev libfftw3-dev \
|
|
||||||
libzip-dev \
|
|
||||||
liblcms2-dev liblzma-dev libzstd-dev \
|
|
||||||
libheif-dev librsvg2-dev \
|
|
||||||
; \
|
; \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN set -eux; \
|
|
||||||
curl -LfsSo /tmp/magick.tar.gz https://github.com/ImageMagick/ImageMagick/archive/refs/tags/${IMAGEMAGICK_VERSION}.tar.gz; \
|
|
||||||
mkdir -p /tmp/magick; \
|
|
||||||
cd /tmp/magick; \
|
|
||||||
tar -xf /tmp/magick.tar.gz --strip-components=1; \
|
|
||||||
./configure --prefix=/opt/imagick; \
|
|
||||||
make -j 2; \
|
|
||||||
make install; \
|
|
||||||
rm -rf /opt/imagick/lib/libMagick++*; \
|
|
||||||
rm -rf /opt/imagick/include; \
|
|
||||||
rm -rf /opt/imagick/share;
|
|
||||||
|
|
||||||
RUN set -eux; \
|
RUN set -eux; \
|
||||||
ARCH="$(dpkg --print-architecture)"; \
|
ARCH="$(dpkg --print-architecture)"; \
|
||||||
case "${ARCH}" in \
|
case "${ARCH}" in \
|
||||||
|
@ -105,33 +86,33 @@ RUN set -ex; \
|
||||||
apt-get -qq update; \
|
apt-get -qq update; \
|
||||||
apt-get -qq upgrade; \
|
apt-get -qq upgrade; \
|
||||||
apt-get -qqy --no-install-recommends install \
|
apt-get -qqy --no-install-recommends install \
|
||||||
tzdata \
|
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
fontconfig \
|
fontconfig \
|
||||||
woff-tools \
|
fontforge \
|
||||||
woff2 \
|
|
||||||
python3 \
|
python3 \
|
||||||
python3-tabulate \
|
python3-tabulate \
|
||||||
fontforge \
|
tzdata \
|
||||||
|
woff-tools \
|
||||||
|
woff2 \
|
||||||
\
|
\
|
||||||
libpng16-16 \
|
libfontconfig1 \
|
||||||
|
libfreetype6 \
|
||||||
|
libglib2.0-0 \
|
||||||
|
libgomp1 \
|
||||||
|
libheif1 \
|
||||||
libjpeg-turbo8 \
|
libjpeg-turbo8 \
|
||||||
|
liblcms2-2 \
|
||||||
|
libopenexr-3-1-30 \
|
||||||
|
libopenjp2-7 \
|
||||||
|
libpng16-16 \
|
||||||
|
librsvg2-2 \
|
||||||
libtiff6 \
|
libtiff6 \
|
||||||
libwebp7 \
|
libwebp7 \
|
||||||
libopenexr-3-1-30 \
|
|
||||||
libfreetype6 \
|
|
||||||
libfontconfig1 \
|
|
||||||
libglib2.0-0 \
|
|
||||||
libxml2 \
|
|
||||||
liblcms2-2 \
|
|
||||||
libheif1 \
|
|
||||||
libopenjp2-7 \
|
|
||||||
libzstd1 \
|
|
||||||
librsvg2-2 \
|
|
||||||
libgomp1 \
|
|
||||||
libwebpmux3 \
|
|
||||||
libwebpdemux2 \
|
libwebpdemux2 \
|
||||||
|
libwebpmux3 \
|
||||||
|
libxml2 \
|
||||||
libzip4t64 \
|
libzip4t64 \
|
||||||
|
libzstd1 \
|
||||||
; \
|
; \
|
||||||
find tmp/usr/share/zoneinfo/* -type d ! -name 'Etc' |xargs rm -rf; \
|
find tmp/usr/share/zoneinfo/* -type d ! -name 'Etc' |xargs rm -rf; \
|
||||||
rm -rf /var/lib /var/cache; \
|
rm -rf /var/lib /var/cache; \
|
||||||
|
@ -144,7 +125,7 @@ RUN set -ex; \
|
||||||
|
|
||||||
COPY --from=build /opt/jre /opt/jre
|
COPY --from=build /opt/jre /opt/jre
|
||||||
COPY --from=build /opt/node /opt/node
|
COPY --from=build /opt/node /opt/node
|
||||||
COPY --from=build /opt/imagick /opt/imagick
|
COPY --from=penpotapp/imagemagick:7.1.1-47 /opt/imagick /opt/imagick
|
||||||
COPY --chown=penpot:penpot ./bundle-backend/ /opt/penpot/backend/
|
COPY --chown=penpot:penpot ./bundle-backend/ /opt/penpot/backend/
|
||||||
|
|
||||||
USER penpot:penpot
|
USER penpot:penpot
|
||||||
|
|
117
manage.sh
117
manage.sh
|
@ -7,6 +7,7 @@ export DEVENV_PNAME="penpotdev";
|
||||||
export CURRENT_USER_ID=$(id -u);
|
export CURRENT_USER_ID=$(id -u);
|
||||||
export CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD);
|
export CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD);
|
||||||
|
|
||||||
|
export IMAGEMAGICK_VERSION=7.1.1-47
|
||||||
|
|
||||||
# Safe directory to avoid ownership errors with Git
|
# Safe directory to avoid ownership errors with Git
|
||||||
git config --global --add safe.directory /home/penpot/penpot || true
|
git config --global --add safe.directory /home/penpot/penpot || true
|
||||||
|
@ -16,16 +17,23 @@ export JAVA_OPTS=${JAVA_OPTS:-"-Xmx1000m -Xms50m"};
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
ARCH=$(uname -m)
|
||||||
|
|
||||||
|
if [[ "$ARCH" == "x86_64" || "$ARCH" == "i386" || "$ARCH" == "i686" ]]; then
|
||||||
|
ARCH="amd64"
|
||||||
|
elif [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then
|
||||||
|
ARCH="arm64"
|
||||||
|
else
|
||||||
|
echo "Unknown architecture $ARCH"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
function print-current-version {
|
function print-current-version {
|
||||||
echo -n "$(git describe --tags --match "*.*.*")";
|
echo -n "$(git describe --tags --match "*.*.*")";
|
||||||
}
|
}
|
||||||
|
|
||||||
function build-devenv {
|
function setup-buildx {
|
||||||
set +e;
|
|
||||||
echo "Building development image $DEVENV_IMGNAME:latest..."
|
|
||||||
|
|
||||||
pushd docker/devenv;
|
|
||||||
|
|
||||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||||
docker buildx inspect penpot > /dev/null 2>&1;
|
docker buildx inspect penpot > /dev/null 2>&1;
|
||||||
|
|
||||||
|
@ -36,19 +44,28 @@ function build-devenv {
|
||||||
docker buildx use penpot;
|
docker buildx use penpot;
|
||||||
docker buildx inspect --bootstrap > /dev/null 2>&1;
|
docker buildx inspect --bootstrap > /dev/null 2>&1;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# docker build -t $DEVENV_IMGNAME:latest .
|
|
||||||
docker buildx build --platform linux/amd64,linux/arm64 --push -t $DEVENV_IMGNAME:latest .;
|
|
||||||
docker pull $DEVENV_IMGNAME:latest;
|
|
||||||
|
|
||||||
popd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function build-devenv-local {
|
function build-devenv {
|
||||||
echo "Building local only development image $DEVENV_IMGNAME:latest..."
|
set +e;
|
||||||
|
|
||||||
pushd docker/devenv;
|
pushd docker/devenv;
|
||||||
docker build -t $DEVENV_IMGNAME:latest .;
|
|
||||||
|
if [ "$1" = "--local" ]; then
|
||||||
|
echo "Build local only $DEVENV_IMGNAME:latest image";
|
||||||
|
docker build -t $DEVENV_IMGNAME:latest .;
|
||||||
|
else
|
||||||
|
echo "Build and push $DEVENV_IMGNAME:latest image";
|
||||||
|
setup-buildx;
|
||||||
|
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/amd64,linux/arm64 \
|
||||||
|
--output type=registry \
|
||||||
|
-t $DEVENV_IMGNAME:latest .;
|
||||||
|
|
||||||
|
docker pull $DEVENV_IMGNAME:latest;
|
||||||
|
fi
|
||||||
|
|
||||||
popd;
|
popd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,6 +141,32 @@ function run-devenv-isolated-shell {
|
||||||
$DEVENV_IMGNAME:latest sudo -EH -u penpot bash
|
$DEVENV_IMGNAME:latest sudo -EH -u penpot bash
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function build-imagemagick-docker-image {
|
||||||
|
set +e;
|
||||||
|
echo "Building image penpotapp/imagemagick:$IMAGEMAGICK_VERSION"
|
||||||
|
|
||||||
|
pushd docker/imagemagick;
|
||||||
|
|
||||||
|
output_option="type=registry";
|
||||||
|
platform="linux/amd64,linux/arm64";
|
||||||
|
|
||||||
|
if [ "$1" = "--local" ]; then
|
||||||
|
output_option="type=docker";
|
||||||
|
platform="linux/$ARCH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
setup-buildx;
|
||||||
|
|
||||||
|
docker buildx build \
|
||||||
|
--build-arg IMAGEMAGICK_VERSION=$IMAGEMAGICK_VERSION \
|
||||||
|
--platform $platform \
|
||||||
|
--output $output_option \
|
||||||
|
-t penpotapp/imagemagick:latest \
|
||||||
|
-t penpotapp/imagemagick:$IMAGEMAGICK_VERSION .;
|
||||||
|
|
||||||
|
popd;
|
||||||
|
}
|
||||||
|
|
||||||
function build {
|
function build {
|
||||||
echo ">> build start: $1"
|
echo ">> build start: $1"
|
||||||
local version=$(print-current-version);
|
local version=$(print-current-version);
|
||||||
|
@ -219,21 +262,21 @@ function build-docs-bundle {
|
||||||
echo ">> bundle docs end";
|
echo ">> bundle docs end";
|
||||||
}
|
}
|
||||||
|
|
||||||
function build-frontend-docker-images {
|
function build-frontend-docker-image {
|
||||||
rsync -avr --delete ./bundles/frontend/ ./docker/images/bundle-frontend/;
|
rsync -avr --delete ./bundles/frontend/ ./docker/images/bundle-frontend/;
|
||||||
pushd ./docker/images;
|
pushd ./docker/images;
|
||||||
docker build -t penpotapp/frontend:$CURRENT_BRANCH -t penpotapp/frontend:latest -f Dockerfile.frontend .;
|
docker build -t penpotapp/frontend:$CURRENT_BRANCH -t penpotapp/frontend:latest -f Dockerfile.frontend .;
|
||||||
popd;
|
popd;
|
||||||
}
|
}
|
||||||
|
|
||||||
function build-backend-docker-images {
|
function build-backend-docker-image {
|
||||||
rsync -avr --delete ./bundles/backend/ ./docker/images/bundle-backend/;
|
rsync -avr --delete ./bundles/backend/ ./docker/images/bundle-backend/;
|
||||||
pushd ./docker/images;
|
pushd ./docker/images;
|
||||||
docker build -t penpotapp/backend:$CURRENT_BRANCH -t penpotapp/backend:latest -f Dockerfile.backend .;
|
docker build -t penpotapp/backend:$CURRENT_BRANCH -t penpotapp/backend:latest -f Dockerfile.backend .;
|
||||||
popd;
|
popd;
|
||||||
}
|
}
|
||||||
|
|
||||||
function build-exporter-docker-images {
|
function build-exporter-docker-image {
|
||||||
rsync -avr --delete ./bundles/exporter/ ./docker/images/bundle-exporter/;
|
rsync -avr --delete ./bundles/exporter/ ./docker/images/bundle-exporter/;
|
||||||
pushd ./docker/images;
|
pushd ./docker/images;
|
||||||
docker build -t penpotapp/exporter:$CURRENT_BRANCH -t penpotapp/exporter:latest -f Dockerfile.exporter .;
|
docker build -t penpotapp/exporter:$CURRENT_BRANCH -t penpotapp/exporter:latest -f Dockerfile.exporter .;
|
||||||
|
@ -246,7 +289,7 @@ function usage {
|
||||||
echo "Options:"
|
echo "Options:"
|
||||||
echo "- pull-devenv Pulls docker development oriented image"
|
echo "- pull-devenv Pulls docker development oriented image"
|
||||||
echo "- build-devenv Build docker development oriented image"
|
echo "- build-devenv Build docker development oriented image"
|
||||||
echo "- build-devenv-local Build a local docker development oriented image"
|
echo "- build-devenv --local Build a local docker development oriented image"
|
||||||
echo "- create-devenv Create the development oriented docker compose service."
|
echo "- create-devenv Create the development oriented docker compose service."
|
||||||
echo "- start-devenv Start the development oriented docker compose service."
|
echo "- start-devenv Start the development oriented docker compose service."
|
||||||
echo "- stop-devenv Stops the development oriented docker compose service."
|
echo "- stop-devenv Stops the development oriented docker compose service."
|
||||||
|
@ -263,9 +306,9 @@ function usage {
|
||||||
echo "- build-docs-bundle Build docs bundle."
|
echo "- build-docs-bundle Build docs bundle."
|
||||||
echo ""
|
echo ""
|
||||||
echo "- build-docker-images Build all docker images (frontend, backend and exporter)."
|
echo "- build-docker-images Build all docker images (frontend, backend and exporter)."
|
||||||
echo "- build-frontend-docker-images Build frontend docker images."
|
echo "- build-frontend-docker-image Build frontend docker images."
|
||||||
echo "- build-backend-docker-images Build backend docker images."
|
echo "- build-backend-docker-image Build backend docker images."
|
||||||
echo "- build-exporter-docker-images Build exporter docker images."
|
echo "- build-exporter-docker-image Build exporter docker images."
|
||||||
echo ""
|
echo ""
|
||||||
echo "- version Show penpot's version."
|
echo "- version Show penpot's version."
|
||||||
}
|
}
|
||||||
|
@ -281,11 +324,8 @@ case $1 in
|
||||||
;;
|
;;
|
||||||
|
|
||||||
build-devenv)
|
build-devenv)
|
||||||
build-devenv ${@:2}
|
shift;
|
||||||
;;
|
build-devenv $@;
|
||||||
|
|
||||||
build-devenv-local)
|
|
||||||
build-devenv-local ${@:2}
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
create-devenv)
|
create-devenv)
|
||||||
|
@ -339,22 +379,27 @@ case $1 in
|
||||||
build-docs-bundle;
|
build-docs-bundle;
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
build-imagemagick-docker-image)
|
||||||
|
shift;
|
||||||
|
build-imagemagick-docker-image $@;
|
||||||
|
;;
|
||||||
|
|
||||||
build-docker-images)
|
build-docker-images)
|
||||||
build-frontend-docker-images
|
build-frontend-docker-image
|
||||||
build-backend-docker-images
|
build-backend-docker-image
|
||||||
build-exporter-docker-images
|
build-exporter-docker-image
|
||||||
;;
|
;;
|
||||||
|
|
||||||
build-frontend-docker-images)
|
build-frontend-docker-image)
|
||||||
build-frontend-docker-images
|
build-frontend-docker-image
|
||||||
;;
|
;;
|
||||||
|
|
||||||
build-backend-docker-images)
|
build-backend-docker-image)
|
||||||
build-backend-docker-images
|
build-backend-docker-image
|
||||||
;;
|
;;
|
||||||
|
|
||||||
build-exporter-docker-images)
|
build-exporter-docker-image)
|
||||||
build-exporter-docker-images
|
build-exporter-docker-image
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue