52 lines
1.3 KiB
Docker
52 lines
1.3 KiB
Docker
# ---------------------------------------------------------
|
|
# Builder stage
|
|
# ---------------------------------------------------------
|
|
FROM node:20-alpine AS builder
|
|
WORKDIR /app
|
|
|
|
COPY package*.json ./
|
|
RUN npm install
|
|
|
|
# FIX: Install TypeScript so "tsc" exists
|
|
RUN npm install -g typescript
|
|
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# ---------------------------------------------------------
|
|
# Final runtime image
|
|
# ---------------------------------------------------------
|
|
FROM node:20-alpine
|
|
WORKDIR /app
|
|
|
|
# Install system packages needed for Postgres, Redis, Supervisor
|
|
RUN apk update && apk add --no-cache \
|
|
supervisor \
|
|
postgresql16 \
|
|
postgresql16-client \
|
|
redis \
|
|
bash
|
|
|
|
# Create directories for Postgres, Redis, and Supervisor logs
|
|
RUN mkdir -p /var/lib/postgresql/data \
|
|
&& mkdir -p /var/lib/redis \
|
|
&& mkdir -p /var/log/supervisor
|
|
|
|
# FIX OWNERSHIP (required for Alpine Postgres + Redis to start)
|
|
RUN chown -R postgres:postgres /var/lib/postgresql \
|
|
&& chown -R redis:redis /var/lib/redis
|
|
|
|
# Copy built app from builder
|
|
COPY --from=builder /app/node_modules ./node_modules
|
|
COPY --from=builder /app/dist ./dist
|
|
COPY package*.json ./
|
|
|
|
# Copy supervisor config
|
|
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
|
|
|
# Expose API port
|
|
EXPOSE 3333
|
|
|
|
# Start supervisor (which starts Postgres, Redis, API, Worker)
|
|
CMD ["/usr/bin/supervisord", "-n"]
|