Files
nocobase/Dockerfile
T
chenos 56006e66f4 feat(cli): add license management commands (#9313)
* feat(cli): add license management commands

* feat(cli): improve license plugin management

* feat(cli): improve license activation flow

* fix(server): detect plugins from resolved storage path

* chore: update dockerfile

* fix(cli): use top-level lodash import for license helpers

* refactor(cli): use fetch for license requests

* chore: update dockerfile

* fix: error

* fix: build error

* fix: build

* chore: update Dockerfile for nb CLI artifact

* fix: nb unpack

* chore: update dockerfile

* fix: error

* fix: error

* refactor(cli): replace fs-extra usage

* fix(cli): declare missing dependencies

* fix: build error

* fix(cli): prefer selected env storage path

* fix(cli): stabilize startup update date checks

* perf(cli): cache startup update install checks

* refactor(cli): rework license id generation

* refactor(cli): rework db check and docker license validation

* fix(cli): correct db check config typing

* refactor(cli): resolve plugin sync version from installed cli

* fix(cli): normalize plugin sync app versions

* test(cli): stabilize install default port checks

* fix(logger): always use storage logs path

---------

Co-authored-by: PiEgg <marksz@teamsz.xyz>
2026-05-02 23:49:24 +08:00

121 lines
4.0 KiB
Docker

FROM node:22-bookworm AS app-builder
ARG VERDACCIO_URL=http://host.docker.internal:10104/
ARG APPEND_PRESET_LOCAL_PLUGINS
ARG BEFORE_PACK_NOCOBASE="ls -l"
ARG PLUGINS_DIRS
ARG INSTALL_NB_CLI=0
ENV PLUGINS_DIRS=${PLUGINS_DIRS}
RUN apt-get update && apt-get install -y jq expect
SHELL ["/bin/bash", "-c"]
RUN expect <<EOD
spawn npm login --auth-type=legacy --registry $VERDACCIO_URL
expect {
"Username:" {send "test\r"; exp_continue}
"Password:" {send "test\r"; exp_continue}
"Email: (this IS public)" {send "test@nocobase.com\r"; exp_continue}
}
EOD
RUN yarn config set registry $VERDACCIO_URL && \
mkdir /app && \
cd /app && \
yarn config set network-timeout 600000 -g && \
yarn create nocobase-app my-nocobase-app -a -e APP_ENV=production -e APPEND_PRESET_LOCAL_PLUGINS=$APPEND_PRESET_LOCAL_PLUGINS && \
cd /app/my-nocobase-app && \
yarn install --production && \
yarn add newrelic --production -W && \
$BEFORE_PACK_NOCOBASE && \
rm -rf /app/my-nocobase-app/packages/app/client/src/.umi && \
tar -zcf /nocobase.tar.gz -C /app/my-nocobase-app . && \
rm -rf /app/my-nocobase-app
RUN if [ "$INSTALL_NB_CLI" = "1" ]; then \
LICENSE_KIT_RANGE=$(npm view @nocobase/cli dependencies.@nocobase/license-kit --registry $VERDACCIO_URL) && \
LICENSE_KIT_RANGE=${LICENSE_KIT_RANGE#\'} && \
LICENSE_KIT_RANGE=${LICENSE_KIT_RANGE%\'} && \
LICENSE_KIT_VERSION=$(npm view "@nocobase/license-kit@${LICENSE_KIT_RANGE}" version --registry https://registry.npmjs.org/) && \
mkdir -p /tmp/nb-cli && \
printf '%s\n' \
'{' \
' "private": true,' \
' "dependencies": {' \
' "@nocobase/cli": "latest"' \
' },' \
' "resolutions": {' \
" \"@nocobase/license-kit\": \"https://registry.npmjs.org/@nocobase/license-kit/-/license-kit-${LICENSE_KIT_VERSION}.tgz\"" \
' }' \
'}' > /tmp/nb-cli/package.json; \
fi
RUN if [ "$INSTALL_NB_CLI" = "1" ]; then \
cd /tmp/nb-cli && \
yarn install --production --registry $VERDACCIO_URL && \
mkdir -p /opt/nb/bin && \
cp -a /tmp/nb-cli/node_modules /opt/nb/ && \
ln -sf /opt/nb/node_modules/.bin/nb /opt/nb/bin/nb && \
NB_SKIP_STARTUP_UPDATE=1 /opt/nb/bin/nb --version && \
tar -zcf /nb.tar.gz -C /opt nb; \
else \
mkdir -p /tmp/empty-nb-artifact && \
tar -zcf /nb.tar.gz -C /tmp/empty-nb-artifact .; \
fi
FROM scratch AS app-artifact
COPY --from=app-builder /nocobase.tar.gz /nocobase.tar.gz
COPY --from=app-builder /nb.tar.gz /nb.tar.gz
FROM node:22-bookworm-slim AS nb-unpack
COPY nb.tar.gz /tmp/nb.tar.gz
RUN mkdir -p /opt/nb && \
tar -zxf /tmp/nb.tar.gz -C /opt && \
rm -f /tmp/nb.tar.gz
FROM node:22-bookworm-slim AS runtime
ARG COMMIT_HASH
ARG INSTALL_NB_CLI=0
ENV PATH="/opt/nb/bin:${PATH}"
RUN apt-get update && apt-get install -y --no-install-recommends wget gnupg ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN echo "deb [signed-by=/usr/share/keyrings/pgdg.asc] http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list
RUN wget --quiet -O /usr/share/keyrings/pgdg.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
RUN apt-get update && apt-get install -y --no-install-recommends \
nginx \
libaio1 \
postgresql-client-16 \
postgresql-client-17 \
libfreetype6 \
fontconfig \
libgssapi-krb5-2 \
fonts-liberation \
fonts-noto-cjk \
&& rm -rf /var/lib/apt/lists/*
RUN rm -rf /etc/nginx/sites-enabled/default
COPY ./docker/nocobase/nocobase-docs.conf /etc/nginx/sites-enabled/nocobase-docs.conf
COPY nocobase.tar.gz /app/nocobase.tar.gz
COPY dist.tar.gz /app/nocobase-docs.tar.gz
COPY --from=nb-unpack /opt/nb /opt/nb
RUN if [ "$INSTALL_NB_CLI" = "1" ]; then \
NB_SKIP_STARTUP_UPDATE=1 nb --version; \
fi
WORKDIR /app/nocobase
RUN mkdir -p /app/nocobase/storage/uploads/ && \
echo "$COMMIT_HASH" > /app/nocobase/storage/uploads/COMMIT_HASH && \
echo "$COMMIT_HASH" > /app/commit_hash.txt
COPY ./docker/nocobase/docker-entrypoint.sh /app/
RUN chmod +x /app/docker-entrypoint.sh
CMD ["/app/docker-entrypoint.sh"]