- Added Docker support (Dockerfiles, docker-compose.yml) - Fixed authentication and authorization (token storage, CORS, permissions) - Fixed API response transformations for all modules - Added production deployment scripts and guides - Fixed frontend permission checks and module access - Added database seeding script for production - Complete documentation for deployment and configuration Co-authored-by: Cursor <cursoragent@cursor.com>
68 lines
1.5 KiB
Docker
68 lines
1.5 KiB
Docker
# Backend Dockerfile
|
|
FROM node:18-alpine AS base
|
|
|
|
# Install dependencies only when needed
|
|
FROM base AS deps
|
|
# Install OpenSSL 3.x which is compatible with Prisma
|
|
RUN apk add --no-cache libc6-compat openssl openssl-dev
|
|
WORKDIR /app
|
|
|
|
# Set Prisma environment variables
|
|
ENV PRISMA_ENGINES_MIRROR=https://prisma-builds.s3-eu-west-1.amazonaws.com
|
|
ENV PRISMA_CLI_BINARY_TARGETS=linux-musl-openssl-3.0.x
|
|
|
|
# Copy package files
|
|
COPY package*.json ./
|
|
COPY prisma ./prisma/
|
|
|
|
# Install dependencies
|
|
RUN npm ci
|
|
|
|
# Build stage
|
|
FROM base AS builder
|
|
RUN apk add --no-cache libc6-compat openssl openssl-dev
|
|
WORKDIR /app
|
|
|
|
ENV PRISMA_CLI_BINARY_TARGETS=linux-musl-openssl-3.0.x
|
|
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY . .
|
|
|
|
# Generate Prisma Client with correct binary target
|
|
RUN npx prisma generate
|
|
|
|
# Build TypeScript
|
|
RUN npm run build
|
|
|
|
# Production stage
|
|
FROM base AS runner
|
|
RUN apk add --no-cache libc6-compat openssl openssl-dev
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENV PRISMA_CLI_BINARY_TARGETS=linux-musl-openssl-3.0.x
|
|
|
|
# Create non-root user first
|
|
RUN addgroup --system --gid 1001 nodejs && \
|
|
adduser --system --uid 1001 expressjs
|
|
|
|
# Install production dependencies as root
|
|
COPY package*.json ./
|
|
COPY prisma ./prisma/
|
|
RUN npm ci --only=production && \
|
|
npx prisma generate && \
|
|
npm cache clean --force
|
|
|
|
# Copy built application
|
|
COPY --from=builder /app/dist ./dist
|
|
|
|
# Change ownership of all files to the nodejs user
|
|
RUN chown -R expressjs:nodejs /app
|
|
|
|
# Switch to non-root user
|
|
USER expressjs
|
|
|
|
EXPOSE 5001
|
|
|
|
CMD ["node", "dist/server.js"]
|