# syntax=docker/dockerfile:1 FROM node:22-alpine AS dependencies WORKDIR /app RUN apk add --no-cache libc6-compat COPY package.json package-lock.json ./ COPY apps/web/package.json ./apps/web/package.json COPY apps/discord-bot/package.json ./apps/discord-bot/package.json COPY packages/auth/package.json ./packages/auth/package.json COPY packages/contracts/package.json ./packages/contracts/package.json COPY packages/database/package.json ./packages/database/package.json COPY packages/minecraft/package.json ./packages/minecraft/package.json COPY packages/network/package.json ./packages/network/package.json RUN npm ci FROM dependencies AS builder COPY . . RUN npm run build --workspace @minecraft-account-manager/web FROM node:22-alpine AS runner ARG VERSION=development LABEL org.opencontainers.image.title="Minecraft Account Manager" \ org.opencontainers.image.version="${VERSION}" \ org.opencontainers.image.source="https://git.garvis.dev/dmg/minecraft-account-manager" WORKDIR /app ENV NODE_ENV=production \ HOSTNAME=0.0.0.0 \ PORT=3000 RUN addgroup --system app && adduser --system --ingroup app app COPY --from=builder --chown=app:app /app/apps/web/.next/standalone ./ COPY --from=builder --chown=app:app /app/apps/web/.next/static ./apps/web/.next/static USER app EXPOSE 3000 CMD ["node", "apps/web/server.js"] FROM dependencies AS bot ARG VERSION=development LABEL org.opencontainers.image.title="Minecraft Account Manager Discord Bot" \ org.opencontainers.image.version="${VERSION}" \ org.opencontainers.image.source="https://git.garvis.dev/dmg/minecraft-account-manager" WORKDIR /app ENV NODE_ENV=production RUN addgroup --system app && adduser --system --ingroup app app COPY --chown=app:app package.json package-lock.json tsconfig.base.json ./ COPY --chown=app:app apps/discord-bot ./apps/discord-bot COPY --chown=app:app packages ./packages USER app CMD ["npm", "run", "start", "--workspace", "@minecraft-account-manager/discord-bot"] FROM dependencies AS migrate ARG VERSION=development LABEL org.opencontainers.image.title="Minecraft Account Manager Migrations" \ org.opencontainers.image.version="${VERSION}" \ org.opencontainers.image.source="https://git.garvis.dev/dmg/minecraft-account-manager" WORKDIR /app ENV NODE_ENV=production RUN addgroup --system app && adduser --system --ingroup app app COPY --chown=app:app package.json package-lock.json tsconfig.base.json ./ COPY --chown=app:app packages ./packages USER app CMD ["npm", "run", "db:migrate"]