mirror of
https://github.com/nocobase/nocobase.git
synced 2026-09-01 14:57:36 +08:00
56006e66f4
* 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>
121 lines
4.0 KiB
Docker
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"]
|