Initial commit: Harat's Booking monorepo with deploy setup
This commit is contained in:
+73
@@ -0,0 +1,73 @@
|
||||
# ═══════════════════════════════════════════════
|
||||
# Harat's Booking — Production Dockerfile
|
||||
# ═══════════════════════════════════════════════
|
||||
# Client is pre-built by deploy.ps1 (npm run build)
|
||||
# This Dockerfile only handles server + copies dist
|
||||
# ═══════════════════════════════════════════════
|
||||
|
||||
# ── Stage 1: Server Dependencies ──
|
||||
FROM node:20-alpine AS server-deps
|
||||
WORKDIR /app
|
||||
|
||||
COPY server/package.json server/package-lock.json* ./
|
||||
RUN npm install --omit=dev
|
||||
|
||||
# ── Stage 2: Prisma Generate ──
|
||||
FROM node:20-alpine AS prisma-gen
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=server-deps /app/node_modules ./node_modules
|
||||
COPY server/prisma ./prisma
|
||||
COPY server/package.json ./
|
||||
|
||||
RUN npx prisma generate
|
||||
|
||||
# ── Stage 3: Final Image ──
|
||||
FROM node:20-alpine
|
||||
WORKDIR /app
|
||||
|
||||
# Runtime deps + pm2
|
||||
RUN apk add --no-cache curl \
|
||||
&& npm install -g pm2@latest \
|
||||
&& pm2 install pm2-logrotate \
|
||||
&& pm2 set pm2-logrotate:max_size 10M \
|
||||
&& pm2 set pm2-logrotate:retain 7 \
|
||||
&& pm2 set pm2-logrotate:compress true
|
||||
|
||||
# Don't run as root
|
||||
RUN addgroup -S harats && adduser -S harats -G harats \
|
||||
&& mkdir -p /data/logs \
|
||||
&& chown -R harats:harats /data
|
||||
|
||||
# Copy production node_modules (with generated Prisma client)
|
||||
COPY --chown=harats:harats --from=prisma-gen /app/node_modules ./node_modules
|
||||
|
||||
# Copy server compiled source
|
||||
COPY --chown=harats:harats server/dist ./dist
|
||||
COPY --chown=harats:harats server/prisma ./prisma
|
||||
|
||||
# Copy shared package (workspace dependency)
|
||||
COPY --chown=harats:harats packages/shared/ ./node_modules/@harats/shared/
|
||||
|
||||
# Copy pre-built client dist
|
||||
COPY --chown=harats:harats client/dist ./public
|
||||
|
||||
# Copy ecosystem config
|
||||
COPY --chown=harats:harats ecosystem.config.cjs ./ecosystem.config.cjs
|
||||
|
||||
# Copy version.json
|
||||
COPY --chown=harats:harats version.json ./version.json
|
||||
|
||||
# Version info (injected at build time)
|
||||
ARG BUILD_VERSION=0.0.0
|
||||
ARG BUILD_DATE=unknown
|
||||
RUN echo "{\"version\":\"${BUILD_VERSION}\",\"build\":\"$(echo $BUILD_DATE | cut -c1-16)\",\"buildDate\":\"${BUILD_DATE}\"}" > version.json
|
||||
|
||||
USER harats
|
||||
|
||||
EXPOSE 3001
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
||||
CMD curl -sf http://localhost:3001/api/health || exit 1
|
||||
|
||||
CMD ["pm2-runtime", "ecosystem.config.cjs"]
|
||||
Reference in New Issue
Block a user