feat: Add Dockerfile for Railway deployment
Added production-ready Dockerfile: - Node.js 18 Alpine (lightweight) - Multi-stage dependency installation - Health check monitoring - Non-root user for security - Production optimizations Added .dockerignore: - Exclude node_modules (reinstalled in Docker) - Exclude .env files (Railway injects env vars) - Reduce image size - Faster build times Railway will now detect project type via Dockerfile instead of guessing from package.json. This ensures proper build configuration for BullMQ worker.
This commit is contained in:
parent
a9d894b2fd
commit
94499d02d5
|
|
@ -0,0 +1,54 @@
|
||||||
|
# ===================================================================
|
||||||
|
# .dockerignore - File yang diabaikan saat build Docker image
|
||||||
|
# Mengurangi ukuran image dan mempercepat build
|
||||||
|
# ===================================================================
|
||||||
|
|
||||||
|
# Dependencies (akan di-install ulang di Dockerfile)
|
||||||
|
node_modules/
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Environment files (Railway akan inject environment variables)
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
.env.example
|
||||||
|
|
||||||
|
# Git files
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.github/
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
README.md
|
||||||
|
*.md
|
||||||
|
docs/
|
||||||
|
|
||||||
|
# IDE files
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# OS files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Test files
|
||||||
|
test/
|
||||||
|
*.test.js
|
||||||
|
coverage/
|
||||||
|
|
||||||
|
# Build artifacts
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
# ===================================================================
|
||||||
|
# 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"]
|
||||||
Loading…
Reference in New Issue