Files
classroomio/docker/Dockerfile.dashboard
T
Rotimi Best b96d91cd7c feat: setup drizzle (#594)
* chore: migration to SvelteKit 2

* stage 1: migrate to svelte 5 and fix rerendering issues

* stage 2: fix more $: reactivity across dashboard

* fix merge conflicts

* chore: migrate code in main to svelte 5

* chore: update preventDefault

* chore: simplify tsconfig and remove unused mobileMenuRef in MobileMenu.svelte

* chore: enforce .ts across dashboard

* rename from classroomio-com to website

* stage-3: Replace carbon icon svelte with lucide icon

* update lock file

* chore: finish icon replacement

* fix: settings and setup page multiple rerender

* stage 3: More icon and rerendering fixes

* feat: setup drizzle and better auth

* fix: onboarding validation error showing translation key #586 (#593)

* fix: onboarding validation error showing translation key #586

* fix: remove debug log for profile update errors

* chore: add a clean command

* fix: remove message from email verification response
2025-11-01 15:49:29 +01:00

61 lines
1.8 KiB
Docker

# ----------- Build Stage -----------
FROM node:20.19.3-alpine AS builder
WORKDIR /cio
# Install pnpm globally so it's available in the final container
RUN npm install -g pnpm
# Install pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate
# Copy everything (filtered by .dockerignore)
COPY package.json ./
COPY pnpm-lock.yaml ./
COPY pnpm-workspace.yaml ./
COPY turbo.json ./
COPY packages/tsconfig ./packages/tsconfig
COPY packages/utils ./packages/utils
# Copy the api package.json
COPY apps/dashboard ./apps/dashboard
COPY apps/api ./apps/api
# Install all dependencies (monorepo context)
RUN pnpm install
RUN ls -la
# Build the dashboard app
RUN NODE_OPTIONS="--max-old-space-size=3072" PUBLIC_IS_SELFHOSTED=true pnpm build --filter @cio/dashboard
# ----------- Production Stage -----------
FROM node:20.19.3-alpine AS runner
WORKDIR /app
# Install pnpm and turbo before switching to non-root user
RUN corepack enable && corepack prepare pnpm@latest --activate
RUN npm install -g turbo@1.10.16
# Don't run production as root
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 cio-user
USER cio-user
# Copy the entire dashboard app (including build output)
COPY --from=builder --chown=cio-user:nodejs ./cio/apps/dashboard ./apps/dashboard
COPY --from=builder --chown=cio-user:nodejs ./cio/node_modules ./node_modules
COPY --from=builder --chown=cio-user:nodejs ./cio/package.json ./package.json
COPY --from=builder --chown=cio-user:nodejs ./cio/turbo.json ./turbo.json
COPY --from=builder --chown=cio-user:nodejs ./cio/pnpm-workspace.yaml ./pnpm-workspace.yaml
# Expose the port (default for SvelteKit Node adapter)
EXPOSE 3082
# Set environment variables for production
ENV PORT=3082 \
NODE_ENV=production \
PUBLIC_IS_SELFHOSTED=true
# Start the app
CMD ["pnpm", "dashboard:start"]