This commit is contained in:
+96
@@ -0,0 +1,96 @@
|
||||
# syntax=docker/dockerfile:1.7
|
||||
|
||||
ARG NODE_IMAGE=node:24.18.0-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d
|
||||
ARG POSTGRES_IMAGE=postgres:17.9-bookworm@sha256:47f917f7409eacd22fc5dfb1dee634e1b55cf0c01d1a7eb701be2227a03e0641
|
||||
|
||||
FROM ${NODE_IMAGE} AS base
|
||||
ENV PNPM_HOME=/pnpm \
|
||||
PATH=/pnpm:$PATH \
|
||||
NEXT_TELEMETRY_DISABLED=1
|
||||
WORKDIR /app
|
||||
RUN corepack enable && corepack prepare pnpm@10.33.0 --activate
|
||||
|
||||
FROM base AS development
|
||||
COPY . .
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
FROM development AS build
|
||||
ENV NODE_ENV=production
|
||||
RUN pnpm build
|
||||
|
||||
FROM build AS worker-bundle
|
||||
RUN mkdir -p /out/worker/dist \
|
||||
&& cp -a /app/apps/worker/dist/. /out/worker/dist/
|
||||
|
||||
FROM base AS migrate
|
||||
ENV NODE_ENV=production
|
||||
COPY --from=build --chown=node:node /app /app
|
||||
USER node
|
||||
CMD ["./packages/db/node_modules/.bin/tsx", "packages/db/src/migrate.ts"]
|
||||
|
||||
FROM ${NODE_IMAGE} AS web
|
||||
ENV NODE_ENV=production \
|
||||
NEXT_TELEMETRY_DISABLED=1 \
|
||||
HOSTNAME=0.0.0.0 \
|
||||
PORT=3000 \
|
||||
CONTENT_ROOT=/content \
|
||||
ARTIFACT_ROOT=/artifacts
|
||||
WORKDIR /app
|
||||
RUN rm -rf /usr/local/lib/node_modules/npm /usr/local/lib/node_modules/corepack /opt/yarn-v1.22.22 \
|
||||
&& rm -f /usr/local/bin/npm /usr/local/bin/npx /usr/local/bin/corepack /usr/local/bin/yarn /usr/local/bin/yarnpkg \
|
||||
&& mkdir -p /content/playbooks /content/catalog /artifacts \
|
||||
&& chown -R node:node /app /content /artifacts
|
||||
COPY --from=build --chown=node:node /app/apps/web/.next/standalone ./
|
||||
COPY --from=build --chown=node:node /app/apps/web/.next/static ./apps/web/.next/static
|
||||
COPY --from=build --chown=node:node /app/content/playbooks /content/playbooks
|
||||
COPY --from=build --chown=node:node /app/catalog/seed-catalog.yaml /content/catalog/seed-catalog.yaml
|
||||
USER node
|
||||
EXPOSE 3000
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
||||
CMD ["node", "-e", "fetch('http://127.0.0.1:3000/health/live').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"]
|
||||
CMD ["node", "apps/web/server.js"]
|
||||
|
||||
FROM ${NODE_IMAGE} AS worker
|
||||
ENV NODE_ENV=production \
|
||||
CONTENT_ROOT=/content \
|
||||
ARTIFACT_ROOT=/artifacts
|
||||
WORKDIR /app
|
||||
RUN rm -rf /usr/local/lib/node_modules/npm /usr/local/lib/node_modules/corepack /opt/yarn-v1.22.22 \
|
||||
&& rm -f /usr/local/bin/npm /usr/local/bin/npx /usr/local/bin/corepack /usr/local/bin/yarn /usr/local/bin/yarnpkg \
|
||||
&& mkdir -p /content/playbooks /content/catalog /artifacts \
|
||||
&& chown -R node:node /app /content /artifacts
|
||||
COPY --from=worker-bundle --chown=node:node /out/worker ./
|
||||
COPY --from=build --chown=node:node /app/content/playbooks /content/playbooks
|
||||
COPY --from=build --chown=node:node /app/catalog/seed-catalog.yaml /content/catalog/seed-catalog.yaml
|
||||
USER node
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
||||
CMD ["node", "-e", "try{process.kill(1,0)}catch{process.exit(1)}"]
|
||||
CMD ["node", "dist/index.js"]
|
||||
|
||||
FROM ${POSTGRES_IMAGE} AS all-in-one
|
||||
ENV NODE_ENV=production \
|
||||
NEXT_TELEMETRY_DISABLED=1 \
|
||||
HOSTNAME=0.0.0.0 \
|
||||
PORT=3000 \
|
||||
PGDATA=/config/postgres \
|
||||
CONTENT_ROOT=/content \
|
||||
ARTIFACT_ROOT=/config/artifacts
|
||||
WORKDIR /app
|
||||
COPY --from=base /usr/local/bin/node /usr/local/bin/node
|
||||
COPY --from=build /app /app
|
||||
COPY --from=build /app/apps/web/.next/static /app/apps/web/.next/standalone/apps/web/.next/static
|
||||
COPY --from=build /app/content/playbooks /content/playbooks
|
||||
COPY --from=build /app/catalog/seed-catalog.yaml /content/catalog/seed-catalog.yaml
|
||||
COPY docker/all-in-one-entrypoint.sh /usr/local/bin/devrunbook-all-in-one
|
||||
RUN groupadd --gid 1000 node \
|
||||
&& useradd --uid 1000 --gid 1000 --create-home --shell /usr/sbin/nologin node \
|
||||
&& mkdir -p /config/postgres /config/artifacts /config/operator-content /content/playbooks /content/catalog \
|
||||
&& chown -R node:node /app /content \
|
||||
&& chown -R postgres:postgres /config/postgres \
|
||||
&& chown -R node:node /config/artifacts /config/operator-content \
|
||||
&& chmod 0755 /usr/local/bin/devrunbook-all-in-one
|
||||
EXPOSE 3000
|
||||
VOLUME ["/config"]
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
|
||||
CMD ["node", "-e", "fetch('http://127.0.0.1:3000/health/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"]
|
||||
ENTRYPOINT ["/usr/local/bin/devrunbook-all-in-one"]
|
||||
Reference in New Issue
Block a user