Files
betterhuman/Dockerfile
T

44 lines
1.0 KiB
Docker

# Stage 1: Build frontend
FROM node:20-alpine AS frontend-build
WORKDIR /app/frontend
COPY frontend/package*.json ./
# Remove lock file and reinstall fresh to avoid rollup musl bug on Alpine
RUN rm -f package-lock.json && npm install --legacy-peer-deps
COPY frontend/ ./
RUN npm run build
# Stage 2: Build backend
FROM node:20-alpine AS backend-build
WORKDIR /app/backend
COPY backend/package*.json ./
RUN npm install
COPY backend/ ./
# Copy prisma schema for generation
RUN npx prisma generate --schema=src/prisma/schema.prisma
RUN npm run build
# Stage 3: Production
FROM node:20-alpine
WORKDIR /app
RUN apk add --no-cache nginx
# Copy backend
COPY --from=backend-build /app/backend/dist ./dist
COPY --from=backend-build /app/backend/node_modules ./node_modules
COPY --from=backend-build /app/backend/src/prisma ./prisma
COPY backend/package.json ./package.json
# Copy frontend build
COPY --from=frontend-build /app/frontend/dist ./public
# Nginx config
COPY nginx.conf /etc/nginx/nginx.conf
COPY start.sh ./
RUN chmod +x start.sh
EXPOSE 80
CMD ["./start.sh"]