From 1fff1f950655491b620b3715bb0c1b4ea874c2ee Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 2 Feb 2026 11:08:58 +0100 Subject: [PATCH] :sparkles: Add mcp dockerfile --- docker/images/Dockerfile.mcp | 58 ++++++++++++++++++++++++++++++++++++ manage.sh | 40 ++++++++++++++++++++++++- 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 docker/images/Dockerfile.mcp diff --git a/docker/images/Dockerfile.mcp b/docker/images/Dockerfile.mcp new file mode 100644 index 0000000000..f4d5544c89 --- /dev/null +++ b/docker/images/Dockerfile.mcp @@ -0,0 +1,58 @@ +FROM ubuntu:24.04 +LABEL maintainer="Penpot " + +ENV LANG=en_US.UTF-8 \ + LC_ALL=en_US.UTF-8 \ + NODE_VERSION=v22.21.1 \ + DEBIAN_FRONTEND=noninteractive \ + PATH=/opt/node/bin:$PATH + +RUN set -ex; \ + useradd -U -M -u 1001 -s /bin/false -d /opt/penpot penpot; \ + mkdir -p /etc/resolvconf/resolv.conf.d; \ + echo "nameserver 127.0.0.11" > /etc/resolvconf/resolv.conf.d/tail; \ + apt-get -qq update; \ + apt-get -qqy --no-install-recommends install \ + curl \ + tzdata \ + locales \ + ca-certificates \ + ; \ + rm -rf /var/lib/apt/lists/*; \ + echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; \ + locale-gen; \ + find /usr/share/i18n/locales/ -type f ! -name "en_US" ! -name "POSIX" ! -name "C" -delete; + +RUN set -eux; \ + ARCH="$(dpkg --print-architecture)"; \ + case "${ARCH}" in \ + aarch64|arm64) \ + BINARY_URL="https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-arm64.tar.gz"; \ + ;; \ + amd64|x86_64) \ + BINARY_URL="https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.gz"; \ + ;; \ + *) \ + echo "Unsupported arch: ${ARCH}"; \ + exit 1; \ + ;; \ + esac; \ + curl -LfsSo /tmp/nodejs.tar.gz ${BINARY_URL}; \ + mkdir -p /opt/node; \ + cd /opt/node; \ + tar -xf /tmp/nodejs.tar.gz --strip-components=1; \ + chown -R root /opt/node; \ + rm -rf /tmp/nodejs.tar.gz; \ + corepack enable; \ + mkdir -p /opt/penpot; \ + chown -R penpot:penpot /opt/penpot; + +ARG BUNDLE_PATH="./bundle-mcp/" +COPY --chown=penpot:penpot $BUNDLE_PATH /opt/penpot/mcp/ + +WORKDIR /opt/penpot/mcp +USER penpot:penpot + +RUN ./setup + +CMD ["node", "index.js", "--multi-user"] diff --git a/manage.sh b/manage.sh index 0a1359a740..5b5b8a98f6 100755 --- a/manage.sh +++ b/manage.sh @@ -215,6 +215,23 @@ function build-frontend-bundle { echo ">> bundle frontend end"; } +function build-mcp-bundle { + echo ">> bundle mcp start"; + + mkdir -p ./bundles + local version=$(print-current-version); + local bundle_dir="./bundles/mcp"; + + build "mcp"; + + rm -rf $bundle_dir; + mv ./mcp/dist $bundle_dir; + echo $version > $bundle_dir/version.txt; + put-license-file $bundle_dir; + echo ">> bundle mcp end"; +} + + function build-backend-bundle { echo ">> bundle backend start"; @@ -309,6 +326,16 @@ function build-exporter-docker-image { popd; } +function build-mcp-docker-image { + rsync -avr --delete ./bundles/mcp/ ./docker/images/bundle-mcp/; + pushd ./docker/images; + docker build \ + -t penpotapp/mcp:$CURRENT_BRANCH -t penpotapp/mcp:latest \ + --build-arg BUNDLE_PATH="./bundle-mcp/" \ + -f Dockerfile.mcp .; + popd; +} + function build-storybook-docker-image { rsync -avr --delete ./bundles/storybook/ ./docker/images/bundle-storybook/; pushd ./docker/images; @@ -346,6 +373,7 @@ function usage { echo "- build-frontend-docker-image Build frontend docker images." echo "- build-backend-docker-image Build backend docker images." echo "- build-exporter-docker-image Build exporter docker images." + echo "- build-mcp-docker-image Build exporter docker images." echo "- build-storybook-docker-image Build storybook docker images." echo "" echo "- version Show penpot's version." @@ -397,6 +425,7 @@ case $1 in ## production builds build-bundle) build-frontend-bundle; + build-mcp-bundle; build-backend-bundle; build-exporter-bundle; build-storybook-bundle; @@ -406,6 +435,10 @@ case $1 in build-frontend-bundle; ;; + build-mcp-bundle) + build-mcp-bundle; + ;; + build-backend-bundle) build-backend-bundle; ;; @@ -431,6 +464,7 @@ case $1 in build-frontend-docker-image build-backend-docker-image build-exporter-docker-image + build-mcp-docker-image build-storybook-docker-image ;; @@ -445,7 +479,11 @@ case $1 in build-exporter-docker-image) build-exporter-docker-image ;; - + + build-mcp-docker-image) + build-mcp-docker-image + ;; + build-storybook-docker-image) build-storybook-docker-image ;;