Files
directus/Dockerfile
Rijk van Zanten cde4dc6c78 Run Directus in PM2 Cluster mode in Docker Image (#18998)
* Send ready state to pm2

* Run with pm2

* Add ecosystem config

* Fix cjs naming

* Add start command

* Increase kill timeout retry

* Set PM2 config through environment variables

* Add changeset

* Add config options for pm2

* Add additional config options

* Add more wordssssssssss

* Update Dockerfile

Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>

* Update ecosystem.config.cjs

Co-authored-by: Wryn (yage) Wagner <yage@yage.io>

* Default to undefined instead of empty string

* Update docs to match safer defaults

---------

Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Wryn (yage) Wagner <yage@yage.io>
2023-10-25 15:34:26 -04:00

68 lines
1.5 KiB
Docker

# syntax=docker/dockerfile:1.4
####################################################################################################
## Build Packages
FROM node:18-alpine AS builder
WORKDIR /directus
ARG TARGETPLATFORM
ENV NODE_OPTIONS=--max-old-space-size=8192
RUN \
if [ "$TARGETPLATFORM" = 'linux/arm64' ]; then \
apk --no-cache add \
python3 \
build-base \
&& ln -sf /usr/bin/python3 /usr/bin/python \
; fi
COPY package.json .
RUN corepack enable && corepack prepare
COPY pnpm-lock.yaml .
RUN pnpm fetch
COPY . .
RUN pnpm install --recursive --offline --frozen-lockfile
RUN : \
&& npm_config_workspace_concurrency=1 pnpm run build \
&& pnpm --filter directus deploy --prod dist \
&& cd dist \
&& pnpm pack \
&& tar -zxvf *.tgz package/package.json \
&& mv package/package.json package.json \
&& rm -r *.tgz package \
&& mkdir -p database extensions uploads \
;
####################################################################################################
## Create Production Image
FROM node:18-alpine AS runtime
RUN npm install --global pm2@5
USER node
WORKDIR /directus
EXPOSE 8055
ENV \
DB_CLIENT="sqlite3" \
DB_FILENAME="/directus/database/database.sqlite" \
EXTENSIONS_PATH="/directus/extensions" \
STORAGE_LOCAL_ROOT="/directus/uploads" \
NODE_ENV="production" \
NPM_CONFIG_UPDATE_NOTIFIER="false"
COPY --from=builder --chown=node:node /directus/ecosystem.config.cjs .
COPY --from=builder --chown=node:node /directus/dist .
CMD : \
&& node cli.js bootstrap \
&& pm2-runtime start ecosystem.config.cjs \
;