Files
openwork/packaging/docker/Dockerfile.den-gateway

64 lines
2.6 KiB
Docker

# syntax=docker/dockerfile:1.7
FROM node:22-bookworm-slim
RUN corepack enable
WORKDIR /app
ARG DEN_GATEWAY_VERSION=""
ENV DEN_GATEWAY_VERSION=${DEN_GATEWAY_VERSION}
ENV PORT=8788
# The gateway serves the OpenWork web build itself, so the app and Den end up on
# one origin. That is what removes the need for cross-origin patches, and it is
# why the SPA is baked in here rather than served from a separate CDN origin.
ENV DEN_GATEWAY_WEB_ROOT=/opt/openwork/web
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml /app/
COPY patches /app/patches
# This image installs only the gateway runtime workspace. Some root patches apply
# to packages that are intentionally not copied here, and pnpm rejects those as
# unused unless this pruned install opts out of that check.
RUN node -e "const fs = require('node:fs'); fs.appendFileSync('/app/pnpm-workspace.yaml', '\nallowUnusedPatches: true\n')"
COPY packages/types/package.json /app/packages/types/package.json
COPY packages/ui/package.json /app/packages/ui/package.json
COPY packages/install-config/package.json /app/packages/install-config/package.json
COPY ee/packages/utils/package.json /app/ee/packages/utils/package.json
COPY ee/apps/den-gateway/package.json /app/ee/apps/den-gateway/package.json
COPY apps/app/package.json /app/apps/app/package.json
RUN pnpm install --frozen-lockfile --trust-lockfile
COPY packages/types /app/packages/types
COPY packages/ui /app/packages/ui
COPY packages/install-config /app/packages/install-config
COPY ee/packages/utils /app/ee/packages/utils
COPY ee/apps/den-gateway /app/ee/apps/den-gateway
COPY apps/app /app/apps/app
RUN pnpm --dir /app/packages/types run build
RUN pnpm --dir /app/packages/ui run build
RUN pnpm --dir /app/packages/install-config run build
RUN pnpm --dir /app/ee/packages/utils run build
# build:web already sets VITE_OPENWORK_DEPLOYMENT=web and
# VITE_DEN_REQUIRE_SIGNIN=1. VITE_DEN_BASE_URL is deliberately NOT baked: in
# gateway mode the app resolves Den from window.location.origin at runtime via
# the gateway marker, and a baked base URL would silently defeat that.
RUN pnpm --dir /app/apps/app run build:web
RUN pnpm --dir /app/ee/apps/den-gateway run build
RUN mkdir -p /opt/openwork \
&& cp -R /app/apps/app/dist /opt/openwork/web \
&& test -f /opt/openwork/web/index.html \
&& test -d /opt/openwork/web/assets
EXPOSE 8788
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 CMD node -e "fetch('http://127.0.0.1:' + (process.env.PORT || '8788') + '/__gw/health').then((res) => process.exit(res.ok ? 0 : 1)).catch(() => process.exit(1))"
CMD ["node", "/app/ee/apps/den-gateway/dist/server.js"]