2024-09-21 01:52:28 +12:00
ARG BASEIMG = budibase/couchdb:v3.3.3-sqs-v2.1.1
2023-12-23 03:05:42 +13:00
FROM node:20-slim as build
2022-06-17 07:38:24 +12:00
# install node-gyp dependencies
2023-11-25 01:02:14 +13:00
RUN apt-get update && apt-get install -y --no-install-recommends g++ make python3 jq
2022-06-17 07:38:24 +12:00
2023-11-25 01:02:14 +13:00
# copy and install dependencies
2022-06-17 07:38:24 +12:00
WORKDIR /app
2023-11-25 01:02:14 +13:00
COPY package.json .
2023-06-07 20:15:11 +12:00
COPY yarn.lock .
2023-11-25 01:02:14 +13:00
COPY lerna.json .
COPY .yarnrc .
COPY packages/server/package.json packages/server/package.json
COPY packages/worker/package.json packages/worker/package.json
COPY scripts/removeWorkspaceDependencies.sh scripts/removeWorkspaceDependencies.sh
RUN chmod +x ./scripts/removeWorkspaceDependencies.sh
RUN ./scripts/removeWorkspaceDependencies.sh packages/server/package.json
RUN ./scripts/removeWorkspaceDependencies.sh packages/worker/package.json
2022-06-17 07:38:24 +12:00
2023-11-25 01:02:14 +13:00
RUN jq 'del(.scripts.postinstall)' package.json > temp.json && mv temp.json package.json
RUN ./scripts/removeWorkspaceDependencies.sh package.json
2024-03-16 02:02:04 +13:00
RUN --mount= type = cache,target= /root/.yarn YARN_CACHE_FOLDER = /root/.yarn yarn install --production --frozen-lockfile
2023-11-25 01:02:14 +13:00
# copy the actual code
COPY packages/server/dist packages/server/dist
COPY packages/server/pm2.config.js packages/server/pm2.config.js
COPY packages/server/client packages/server/client
COPY packages/server/builder packages/server/builder
COPY packages/worker/dist packages/worker/dist
COPY packages/worker/pm2.config.js packages/worker/pm2.config.js
2024-05-29 00:51:41 +12:00
FROM $BASEIMG as runner
2022-10-07 02:05:01 +13:00
ARG TARGETARCH
ENV TARGETARCH $TARGETARCH
2022-06-25 04:48:34 +12:00
#TARGETBUILD can be set to single (for single docker image) or aas (for azure app service)
2023-05-04 05:22:19 +12:00
# e.g. docker build --build-arg TARGETBUILD=aas ....
2022-08-11 23:08:56 +12:00
ARG TARGETBUILD = single
2022-06-25 04:48:34 +12:00
ENV TARGETBUILD $TARGETBUILD
2022-06-22 04:56:55 +12:00
2022-06-17 06:30:34 +12:00
# install base dependencies
RUN apt-get update && \
2023-11-25 01:02:14 +13:00
apt-get install -y --no-install-recommends software-properties-common nginx uuid-runtime redis-server libaio1
2022-06-17 06:30:34 +12:00
2023-06-22 22:29:32 +12:00
# Install postgres client for pg_dump utils
2023-11-25 01:02:14 +13:00
RUN apt install -y software-properties-common apt-transport-https ca-certificates gnupg \
2024-03-16 01:55:29 +13:00
&& curl -fsSl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/postgresql.gpg > /dev/null \
&& echo deb [ arch = amd64,arm64,ppc64el signed-by= /usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ $( lsb_release -cs) -pgdg main | tee /etc/apt/sources.list.d/postgresql.list \
&& apt update -y \
&& apt install postgresql-client-15 -y \
&& apt remove software-properties-common apt-transport-https gpg -y
2023-06-22 22:29:32 +12:00
2024-02-14 01:08:25 +13:00
# We use pm2 in order to run multiple node processes in a single container
RUN npm install --global pm2
2022-04-01 13:00:52 +13:00
2022-04-05 22:33:55 +12:00
# setup nginx
2023-11-25 01:02:14 +13:00
COPY hosting/single/nginx/nginx.conf /etc/nginx
COPY hosting/single/nginx/nginx-default-site.conf /etc/nginx/sites-enabled/default
2022-06-23 00:38:33 +12:00
RUN mkdir -p /var/log/nginx && \
touch /var/log/nginx/error.log && \
2022-12-06 23:58:13 +13:00
touch /var/run/nginx.pid && \
usermod -a -G tty www-data
2022-04-01 13:00:52 +13:00
# setup minio
WORKDIR /minio
2023-11-25 01:02:14 +13:00
COPY scripts/install-minio.sh ./install.sh
2022-06-22 23:40:33 +12:00
RUN chmod +x install.sh && ./install.sh
2022-04-01 13:00:52 +13:00
2022-04-05 22:33:55 +12:00
# setup runner file
2022-04-01 13:00:52 +13:00
WORKDIR /
2023-11-25 01:02:14 +13:00
COPY hosting/single/runner.sh .
2022-04-01 13:00:52 +13:00
RUN chmod +x ./runner.sh
2023-11-25 01:02:14 +13:00
COPY hosting/single/healthcheck.sh .
2022-06-23 00:38:33 +12:00
RUN chmod +x ./healthcheck.sh
2022-04-01 13:00:52 +13:00
2022-08-11 23:08:56 +12:00
# Script below sets the path for storing data based on $DATA_DIR
2022-06-25 04:48:34 +12:00
# For Azure App Service install SSH & point data locations to /home
2023-11-25 01:02:14 +13:00
COPY hosting/single/ssh/sshd_config /etc/
COPY hosting/single/ssh/ssh_setup.sh /tmp
# setup letsencrypt certificate
RUN apt-get install -y certbot python3-certbot-nginx
COPY hosting/letsencrypt /app/letsencrypt
RUN chmod +x /app/letsencrypt/certificate-request.sh /app/letsencrypt/certificate-renew.sh
COPY --from= build /app/node_modules /node_modules
COPY --from= build /app/package.json /package.json
COPY --from= build /app/packages/server /app
COPY --from= build /app/packages/worker /worker
2022-06-17 07:38:24 +12:00
2022-06-23 00:38:33 +12:00
EXPOSE 80
EXPOSE 443
2022-09-14 03:08:54 +12:00
# Expose port 2222 for SSH on Azure App Service build
EXPOSE 2222
2022-07-15 22:08:03 +12:00
VOLUME /data
2022-04-01 13:00:52 +13:00
2023-11-25 01:02:14 +13:00
ARG BUDIBASE_VERSION
# Ensuring the version argument is sent
RUN test -n " $BUDIBASE_VERSION "
ENV BUDIBASE_VERSION = $BUDIBASE_VERSION
2022-06-23 00:38:33 +12:00
HEALTHCHECK --interval=15s --timeout=15s --start-period= 45s CMD "/healthcheck.sh"
2022-04-01 13:00:52 +13:00
# must set this just before running
ENV NODE_ENV = production
2024-02-03 00:02:09 +13:00
# this is required for isolated-vm to work on Node 20+
ENV NODE_OPTIONS = "--no-node-snapshot"
2022-06-17 07:38:24 +12:00
WORKDIR /
2022-04-01 13:00:52 +13:00
CMD [ "./runner.sh" ]