* 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
61 lines
1.8 KiB
Docker
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"] |