46 lines
1.3 KiB
Docker
46 lines
1.3 KiB
Docker
# ===================================================================
|
|
# Dockerfile untuk ApsGo Railway Worker
|
|
# Background service untuk IoT automation dengan BullMQ + Redis
|
|
# ===================================================================
|
|
|
|
# Base image: Node.js 18 LTS (Alpine untuk size kecil)
|
|
FROM node:18-alpine
|
|
|
|
# Metadata
|
|
LABEL maintainer="ApsGo Team"
|
|
LABEL description="Railway Worker untuk ApsGo - 24/7 IoT Automation"
|
|
LABEL version="1.0.0"
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Copy package files dulu (untuk leverage Docker cache)
|
|
COPY package.json package-lock.json* ./
|
|
|
|
# Install dependencies
|
|
# --production: hanya production dependencies (tanpa devDependencies)
|
|
# --silent: suppress npm warnings
|
|
RUN npm install --production --silent
|
|
|
|
# Copy source code
|
|
COPY worker.js ./
|
|
|
|
# Environment variables (akan di-override oleh Railway)
|
|
ENV NODE_ENV=production
|
|
ENV LOG_LEVEL=info
|
|
|
|
# Health check (optional - Railway bisa monitor via process)
|
|
# Cek apakah process masih berjalan setiap 30 detik
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
|
|
CMD node -e "process.exit(0)"
|
|
|
|
# Expose port (OPTIONAL - worker tidak butuh port)
|
|
# Tapi tetap define untuk dokumentasi
|
|
# EXPOSE 3000
|
|
|
|
# User non-root untuk security (best practice)
|
|
USER node
|
|
|
|
# Start command: jalankan worker
|
|
CMD ["node", "worker.js"]
|