mirror of
https://github.com/ToolJet/ToolJet
synced 2026-04-21 13:37:28 +00:00
136 lines
5.1 KiB
Docker
136 lines
5.1 KiB
Docker
FROM node:22.15.1 AS builder
|
|
|
|
# Fix for JS heap limit allocation issue
|
|
ENV NODE_OPTIONS="--max-old-space-size=8096"
|
|
|
|
RUN npm i -g npm@10.9.2
|
|
RUN mkdir -p /app
|
|
|
|
WORKDIR /app
|
|
|
|
# Scripts for building
|
|
COPY ./package.json ./package.json
|
|
|
|
# Build plugins
|
|
COPY ./plugins/package.json ./plugins/package-lock.json ./plugins/
|
|
RUN npm --prefix plugins install
|
|
COPY ./plugins/ ./plugins/
|
|
RUN NODE_ENV=production npm --prefix plugins run build
|
|
RUN npm --prefix plugins prune --production
|
|
|
|
# Build frontend
|
|
COPY ./frontend/package.json ./frontend/package-lock.json ./frontend/
|
|
RUN npm --prefix frontend install
|
|
COPY ./frontend/ ./frontend/
|
|
RUN npm --prefix frontend run build --production
|
|
RUN npm --prefix frontend prune --production
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
# Build server
|
|
COPY ./server/package.json ./server/package-lock.json ./server/
|
|
RUN npm --prefix server install
|
|
COPY ./server/ ./server/
|
|
RUN npm install -g @nestjs/cli
|
|
RUN npm install -g copyfiles
|
|
RUN npm --prefix server run build
|
|
|
|
# Install dependencies for PostgREST, curl, tar, etc.
|
|
RUN apt-get update && apt-get install -y \
|
|
curl ca-certificates tar \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
ENV POSTGREST_VERSION=v12.2.0
|
|
|
|
RUN curl -Lo postgrest.tar.xz https://github.com/PostgREST/postgrest/releases/download/${POSTGREST_VERSION}/postgrest-v12.2.0-linux-static-x64.tar.xz && \
|
|
tar -xf postgrest.tar.xz && \
|
|
mv postgrest /postgrest && \
|
|
rm postgrest.tar.xz && \
|
|
chmod +x /postgrest
|
|
|
|
FROM debian:12
|
|
|
|
RUN apt-get update -yq \
|
|
&& apt-get install curl gnupg zip -yq \
|
|
&& apt-get install -yq build-essential \
|
|
&& apt-get clean -y
|
|
|
|
|
|
RUN curl -O https://nodejs.org/dist/v22.15.1/node-v22.15.1-linux-x64.tar.xz \
|
|
&& tar -xf node-v22.15.1-linux-x64.tar.xz \
|
|
&& mv node-v22.15.1-linux-x64 /usr/local/lib/nodejs \
|
|
&& echo 'export PATH="/usr/local/lib/nodejs/bin:$PATH"' >> /etc/profile.d/nodejs.sh \
|
|
&& /bin/bash -c "source /etc/profile.d/nodejs.sh" \
|
|
&& rm node-v22.15.1-linux-x64.tar.xz
|
|
ENV PATH=/usr/local/lib/nodejs/bin:$PATH
|
|
|
|
ENV NODE_ENV=production
|
|
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
|
RUN apt-get update && \
|
|
apt-get install -y postgresql-client freetds-dev libaio1 wget && \
|
|
apt-get -o Dpkg::Options::="--force-confold" upgrade -q -y --force-yes && \
|
|
apt-get -y autoremove && \
|
|
apt-get -y autoclean
|
|
|
|
# Install Instantclient Basic Light Oracle and Dependencies
|
|
WORKDIR /opt/oracle
|
|
|
|
RUN wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linuxx64.zip && \
|
|
wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linux.x64-11.2.0.4.0.zip && \
|
|
unzip instantclient-basiclite-linuxx64.zip && rm -f instantclient-basiclite-linuxx64.zip && \
|
|
unzip instantclient-basiclite-linux.x64-11.2.0.4.0.zip && rm -f instantclient-basiclite-linux.x64-11.2.0.4.0.zip && \
|
|
cd /opt/oracle/instantclient_21_10 && rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
|
|
cd /opt/oracle/instantclient_11_2 && rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
|
|
echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig
|
|
# Set the Instant Client library paths
|
|
ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_11_2:/opt/oracle/instantclient_21_10:${LD_LIBRARY_PATH}"
|
|
|
|
|
|
WORKDIR /
|
|
|
|
RUN mkdir -p /app
|
|
# copy npm scripts
|
|
COPY --from=builder /app/package.json ./app/package.json
|
|
# copy plugins dependencies
|
|
COPY --from=builder /app/plugins/dist ./app/plugins/dist
|
|
COPY --from=builder /app/plugins/client.js ./app/plugins/client.js
|
|
COPY --from=builder /app/plugins/node_modules ./app/plugins/node_modules
|
|
COPY --from=builder /app/plugins/packages/common ./app/plugins/packages/common
|
|
COPY --from=builder /app/plugins/package.json ./app/plugins/package.json
|
|
# copy frontend build
|
|
COPY --from=builder /app/frontend/build ./app/frontend/build
|
|
# copy server build
|
|
COPY --from=builder /app/server/package.json ./app/server/package.json
|
|
COPY --from=builder /app/server/.version ./app/server/.version
|
|
COPY --from=builder /app/server/node_modules ./app/server/node_modules
|
|
COPY --from=builder /app/server/templates ./app/server/templates
|
|
COPY --from=builder /app/server/scripts ./app/server/scripts
|
|
COPY --from=builder /app/server/dist ./app/server/dist
|
|
|
|
COPY ./docker/ce-entrypoint.sh ./app/server/entrypoint.sh
|
|
|
|
# Define non-sudo user
|
|
RUN useradd --create-home --home-dir /home/appuser appuser \
|
|
&& chown -R appuser:0 /app \
|
|
&& chown -R appuser:0 /home/appuser \
|
|
&& chmod u+x /app \
|
|
&& chmod -R g=u /app
|
|
|
|
# Use the PostgREST binary from the builder stage
|
|
COPY --from=builder --chown=appuser:0 /postgrest /usr/local/bin/postgrest
|
|
|
|
RUN mv /usr/local/bin/postgrest /usr/local/bin/postgrest-original && \
|
|
echo '#!/bin/bash\nexec /usr/local/bin/postgrest-original "$@" 2>&1 | sed "s/^/[PostgREST] /"' > /usr/local/bin/postgrest && \
|
|
chmod +x /usr/local/bin/postgrest
|
|
|
|
# Set npm cache directory
|
|
ENV npm_config_cache /home/appuser/.npm
|
|
|
|
ENV HOME=/home/appuser
|
|
USER appuser
|
|
|
|
WORKDIR /app
|
|
# Dependencies for scripts outside nestjs
|
|
RUN npm install dotenv@10.0.0 joi@17.4.1
|
|
|
|
ENTRYPOINT ["./server/entrypoint.sh"]
|