# Use the official Node.js 22.4.1 image FROM node:22.4.1-alpine # Install Redis and tmux RUN apk add --no-cache redis tmux # Set the working directory in the container WORKDIR /usr/src/ # Copy package.json and package-lock.json (if available) COPY package*.json ./ # Install application dependencies RUN npm install # Copy prisma schema COPY prisma ./prisma/ # Generate Prisma client RUN npx prisma generate # Copy the rest of your application code to the container COPY . . # Build the application RUN npm run build # Expose the ports your Node.js application and Redis will listen on EXPOSE 80 6379 # Create a shell script to run Redis, run migrations, and start the application in a tmux session RUN echo '#!/bin/sh' > /usr/src/start.sh && \ echo 'redis-server --daemonize yes' >> /usr/src/start.sh && \ echo 'npx prisma migrate deploy' >> /usr/src/start.sh && \ echo 'tmux new-session -d -s nodeapp "node dist/server.js"' >> /usr/src/start.sh && \ echo 'echo "App is running in tmux session. Attach with: tmux attach-session -t nodeapp"' >> /usr/src/start.sh && \ echo 'tail -f /dev/null' >> /usr/src/start.sh && \ chmod +x /usr/src/start.sh # Use the shell script as the entry point CMD ["/usr/src/start.sh"]