directus
/
Dockerfile
66 строк · 1.6 Кб
1# syntax=docker/dockerfile:1.4
2
3####################################################################################################
4## Build Packages
5
6FROM node:18-alpine AS builder
7WORKDIR /directus
8
9ARG TARGETPLATFORM
10
11ENV NODE_OPTIONS=--max-old-space-size=8192
12
13RUN <<EOF
14if [ "$TARGETPLATFORM" = 'linux/arm64' ]; then
15apk --no-cache add python3 build-base
16ln -sf /usr/bin/python3 /usr/bin/python
17fi
18EOF
19
20COPY package.json .
21RUN corepack enable && corepack prepare
22
23COPY pnpm-lock.yaml .
24RUN pnpm fetch
25
26COPY . .
27RUN <<EOF
28pnpm install --recursive --offline --frozen-lockfile
29npm_config_workspace_concurrency=1 pnpm run build
30pnpm --filter directus deploy --prod dist
31cd dist
32# Regenerate package.json file with essential fields only
33# (see https://github.com/directus/directus/issues/20338)
34node -e '
35const f = "package.json", {name, version, type, exports, bin} = require(`./${f}`), {packageManager} = require(`../${f}`);
36fs.writeFileSync(f, JSON.stringify({name, version, type, exports, bin, packageManager}, null, 2));
37'
38mkdir -p database extensions uploads
39EOF
40
41####################################################################################################
42## Create Production Image
43
44FROM node:18-alpine AS runtime
45
46RUN npm install --global pm2@5
47
48USER node
49
50WORKDIR /directus
51
52EXPOSE 8055
53
54ENV \
55DB_CLIENT="sqlite3" \
56DB_FILENAME="/directus/database/database.sqlite" \
57NODE_ENV="production" \
58NPM_CONFIG_UPDATE_NOTIFIER="false"
59
60COPY --from=builder --chown=node:node /directus/ecosystem.config.cjs .
61COPY --from=builder --chown=node:node /directus/dist .
62
63CMD : \
64&& node cli.js bootstrap \
65&& pm2-runtime start ecosystem.config.cjs \
66;
67