From d10e8063e9f0b23d8b99e0d90a9db4783db4d53b Mon Sep 17 00:00:00 2001 From: Joel Maxwell Date: Wed, 13 May 2026 07:28:35 -0300 Subject: [PATCH] Add supervisor + Postgres/Redis integration for TrueNAS deployment --- Dockerfile | 36 +++++++++++++++++++++++++++++++++++- supervisord.conf | 31 +++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 supervisord.conf diff --git a/Dockerfile b/Dockerfile index 4213818..97c0171 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,51 @@ +# --------------------------------------------------------- +# 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 ./ -CMD ["node", "dist/index.js"] +# 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"] diff --git a/supervisord.conf b/supervisord.conf new file mode 100644 index 0000000..22dabbf --- /dev/null +++ b/supervisord.conf @@ -0,0 +1,31 @@ +[supervisord] +nodaemon=true +logfile=/var/log/supervisor/supervisord.log + +[program:postgres] +command=/usr/bin/postgres -D /var/lib/postgresql/data +autostart=true +autorestart=true +priority=10 + +[program:redis] +command=/usr/bin/redis-server --appendonly yes +autostart=true +autorestart=true +priority=20 + +[program:api] +command=node dist/index.js +directory=/app +autostart=true +autorestart=true +priority=30 +environment=NODE_ENV="production" + +[program:worker] +command=node dist/worker.js +directory=/app +autostart=true +autorestart=true +priority=40 +environment=NODE_ENV="production"