71 lines
2.7 KiB
Docker
71 lines
2.7 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
FROM node:22-alpine AS manifests
|
|
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/logging/package.json ./packages/logging/package.json
|
|
COPY packages/minecraft/package.json ./packages/minecraft/package.json
|
|
COPY packages/network/package.json ./packages/network/package.json
|
|
|
|
FROM manifests AS dependencies
|
|
RUN npm ci
|
|
|
|
FROM manifests AS production-dependencies
|
|
RUN npm ci --omit=dev
|
|
|
|
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 \
|
|
APP_VERSION=${VERSION} \
|
|
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 production-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 \
|
|
APP_VERSION=${VERSION}
|
|
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 production-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"]
|