Files
meat-monster/Dockerfile
T

45 lines
1.1 KiB
Docker

# --- Build Frontend ---
FROM node:20-alpine AS frontend-builder
WORKDIR /app/frontend
COPY frontend/package*.json ./
RUN npm install
COPY frontend/ ./
RUN npm run build
# --- Build Backend ---
FROM node:20-alpine AS backend-builder
WORKDIR /app/backend
# Install build dependencies for native modules (better-sqlite3)
RUN apk add --no-cache python3 make g++
COPY backend/package*.json ./
RUN npm install
COPY backend/ ./
RUN npx prisma generate
RUN npm run build
# --- Final Image ---
FROM node:20-alpine
WORKDIR /app
# Copy backend
COPY --from=backend-builder /app/backend/package*.json ./
COPY --from=backend-builder /app/backend/dist ./dist
COPY --from=backend-builder /app/backend/prisma ./prisma
COPY --from=backend-builder /app/backend/node_modules ./node_modules
# Copy frontend build to be served by backend
COPY --from=frontend-builder /app/frontend/dist ./frontend-dist
# Env vars
ENV NODE_ENV=production
ENV PORT=3000
ENV DATABASE_URL="file:/app/data/dev.db"
# Create data directory for SQLite
RUN mkdir -p /app/data
EXPOSE 3000
# Start script
CMD ["sh", "-c", "npx prisma db push && node dist/server.js"]