FROM node:22-alpine WORKDIR /app # Copy package files COPY package.json package-lock.json* pnpm-lock.yaml* npm-shrinkwrap.json* ./ # Install dependencies RUN if [ -f pnpm-lock.yaml ]; then npm install -g pnpm && pnpm install --frozen-lockfile; \ elif [ -f package-lock.json ]; then npm ci --legacy-peer-deps; \ else npm install --legacy-peer-deps; fi # Copy source code COPY . . # Build-time env vars (VITE_* are baked into the bundle at build time) ARG VITE_SUPABASE_URL ARG VITE_SUPABASE_ANON_KEY ARG VITE_AUTHENTIK_PROVIDER ENV VITE_SUPABASE_URL=$VITE_SUPABASE_URL ENV VITE_SUPABASE_ANON_KEY=$VITE_SUPABASE_ANON_KEY ENV VITE_AUTHENTIK_PROVIDER=$VITE_AUTHENTIK_PROVIDER # Build the client so the Activity gets compiled JS (no Vite dev mode in Discord iframe) RUN npm run build:client # Set environment ENV NODE_ENV=production ENV PORT=3000 # Expose port EXPOSE 3000 # Start the server CMD ["npm", "run", "dev"]