summaryrefslogtreecommitdiff
path: root/backend/Dockerfile
diff options
context:
space:
mode:
Diffstat (limited to 'backend/Dockerfile')
-rw-r--r--backend/Dockerfile43
1 files changed, 43 insertions, 0 deletions
diff --git a/backend/Dockerfile b/backend/Dockerfile
new file mode 100644
index 0000000..47a96e6
--- /dev/null
+++ b/backend/Dockerfile
@@ -0,0 +1,43 @@
+# syntax=docker/dockerfile:1
+
+# BUILD STAGE
+FROM node:22-alpine AS builder
+
+WORKDIR /app
+
+COPY package*.json ./
+
+# Install all dependencies, dev dependencies needed for build
+RUN npm ci
+
+COPY . .
+
+# Build TypeScript
+RUN npm run build
+
+# PRODUCTION STAGE
+FROM node:22-alpine AS production
+
+WORKDIR /app
+
+COPY package*.json ./
+
+# Install only production dependencies
+RUN npm ci --omit=dev
+
+# Copy .env.docker to .env to silence Docker warning
+COPY .env.docker .env
+
+# Copy compiled code from builder stage
+COPY --from=builder /app/dist ./dist
+
+# Create non-root user for security
+RUN addgroup -g 1001 -S nodejs && \
+ adduser -S nodejs -u 1001 && \
+ chown -R nodejs:nodejs /app
+
+USER nodejs
+
+EXPOSE 3000
+
+CMD ["npm", "start"] \ No newline at end of file