70 lines
2.5 KiB
Docker
70 lines
2.5 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
|
|
ARG BUN_IMAGE=oven/bun:1.3.14-alpine@sha256:5acc90a93e91ff07bf72aa90a7c9f0fa189765aec90b47bdbf2152d2196383c0
|
|
|
|
FROM ${BUN_IMAGE} AS dependencies
|
|
WORKDIR /app
|
|
COPY package.json bun.lock ./
|
|
RUN bun install --frozen-lockfile
|
|
|
|
FROM dependencies AS worker-builder
|
|
WORKDIR /app
|
|
COPY . .
|
|
RUN bun build scripts/outbox-worker.ts \
|
|
--target=bun \
|
|
--minify \
|
|
--outfile=dist/outbox-worker.js && \
|
|
bun build backend/discord.ts \
|
|
--target=bun \
|
|
--conditions=react-server \
|
|
--minify \
|
|
--outfile=dist/discord.js && \
|
|
bun build scripts/migrate.ts --target=bun --minify --outfile=dist/migrate.js
|
|
|
|
FROM node:22-bookworm-slim@sha256:48e4b67d85f87bd551df43704e24d252f56cc5f8e9718841aace50f19948f0f9 AS next-builder
|
|
WORKDIR /app
|
|
ARG NEXT_DEPLOYMENT_ID=container-build
|
|
ARG BASE_URL
|
|
ARG NEXT_PUBLIC_GOOGLE_ADSENSE_CLIENT_ID
|
|
ENV BASE_URL=${BASE_URL}
|
|
ENV NEXT_DEPLOYMENT_ID=${NEXT_DEPLOYMENT_ID}
|
|
ENV NEXT_PUBLIC_GOOGLE_ADSENSE_CLIENT_ID=${NEXT_PUBLIC_GOOGLE_ADSENSE_CLIENT_ID}
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
COPY --from=dependencies /app/node_modules ./node_modules
|
|
COPY . .
|
|
# Bun 1.3.14 can crash after a successful Next build on arm64. The application
|
|
# still runs on Bun; Node is used only for the deterministic compiler process.
|
|
RUN node node_modules/next/dist/bin/next build
|
|
|
|
FROM ${BUN_IMAGE} AS migration
|
|
RUN apk upgrade --no-cache
|
|
WORKDIR /app
|
|
ARG VCS_REF=unknown
|
|
LABEL org.opencontainers.image.title="Buzz Sheet migrations" \
|
|
org.opencontainers.image.revision=${VCS_REF}
|
|
ENV NODE_ENV=production
|
|
COPY --from=worker-builder --chown=bun:bun /app/dist/migrate.js ./migrate.js
|
|
COPY --chown=bun:bun drizzle ./drizzle
|
|
USER 1000:1000
|
|
ENTRYPOINT ["bun", "migrate.js"]
|
|
|
|
FROM ${BUN_IMAGE} AS app
|
|
RUN apk upgrade --no-cache
|
|
WORKDIR /app
|
|
ARG VCS_REF=unknown
|
|
LABEL org.opencontainers.image.title="Buzz Sheet" \
|
|
org.opencontainers.image.revision=${VCS_REF}
|
|
ENV HOSTNAME=0.0.0.0
|
|
ENV NODE_ENV=production
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
ENV PORT=3000
|
|
COPY --from=next-builder --chown=bun:bun /app/.next/standalone ./
|
|
COPY --from=next-builder --chown=bun:bun /app/.next/static ./.next/static
|
|
COPY --from=next-builder --chown=bun:bun /app/public ./public
|
|
COPY --from=worker-builder --chown=bun:bun /app/dist/outbox-worker.js ./worker/outbox-worker.js
|
|
COPY --from=worker-builder --chown=bun:bun /app/dist/discord.js ./worker/discord.js
|
|
COPY --from=worker-builder --chown=bun:bun /app/lib/catalog/assets ./lib/catalog/assets
|
|
USER 1000:1000
|
|
EXPOSE 3000
|
|
CMD ["bun", "server.js"]
|