Files
buzz-sheet/Dockerfile
T
gunshiz 76395a0b42
CI / Verify (push) Successful in 1m13s
CI / Build immutable images and deploy (push) Successful in 5m34s
feat(catalog) : sync Lunaris updates from Discord
2026-09-03 17:51:02 +07:00

64 lines
2.1 KiB
Docker

# syntax=docker/dockerfile:1.7
ARG BUN_VERSION=1.3.14
FROM oven/bun:${BUN_VERSION} 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 \
--minify \
--outfile=dist/discord.js
FROM node:22-bookworm-slim AS next-builder
WORKDIR /app
ARG NEXT_DEPLOYMENT_ID=container-build
ENV NEXT_DEPLOYMENT_ID=${NEXT_DEPLOYMENT_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 dependencies AS migration
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 --chown=bun:bun db ./db
COPY --chown=bun:bun drizzle ./drizzle
COPY --chown=bun:bun scripts/migrate.ts ./scripts/migrate.ts
COPY --chown=bun:bun tsconfig.json ./tsconfig.json
USER 1000:1000
ENTRYPOINT ["bun", "scripts/migrate.ts"]
FROM oven/bun:${BUN_VERSION} AS app
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"]