# SEO Image Renamer Worker Service Dockerfile FROM node:18-alpine AS base # Install system dependencies for image processing and virus scanning RUN apk add --no-cache \ python3 \ make \ g++ \ cairo-dev \ jpeg-dev \ pango-dev \ musl-dev \ giflib-dev \ pixman-dev \ pangomm-dev \ libjpeg-turbo-dev \ freetype-dev \ clamav \ clamav-daemon \ freshclam \ && rm -rf /var/cache/apk/* # Set working directory WORKDIR /app # Copy package files COPY package*.json ./ COPY tsconfig.json ./ COPY nest-cli.json ./ # Install dependencies FROM base AS dependencies RUN npm ci --only=production && npm cache clean --force # Install dev dependencies for building FROM base AS build-dependencies RUN npm ci # Build the application FROM build-dependencies AS build COPY src/ ./src/ RUN npm run build # Production image FROM base AS production # Create non-root user for security RUN addgroup -g 1001 -S worker && \ adduser -S worker -u 1001 -G worker # Copy production dependencies COPY --from=dependencies /app/node_modules ./node_modules # Copy built application COPY --from=build /app/dist ./dist COPY --from=build /app/package*.json ./ # Create required directories RUN mkdir -p /tmp/seo-worker /app/logs && \ chown -R worker:worker /tmp/seo-worker /app/logs /app # Configure ClamAV RUN mkdir -p /var/lib/clamav /var/log/clamav && \ chown -R clamav:clamav /var/lib/clamav /var/log/clamav && \ chmod 755 /var/lib/clamav /var/log/clamav # Copy ClamAV configuration COPY < /dev/null 2>&1; then echo "ClamAV is ready" break fi sleep 1 done fi # Start the worker service echo "Starting worker service..." exec node dist/main.js EOF RUN chmod +x /app/start.sh # Switch to non-root user USER worker # Expose health check port EXPOSE 3002 EXPOSE 8080 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8080/health || exit 1 # Set environment variables ENV NODE_ENV=production ENV WORKER_PORT=3002 ENV HEALTH_CHECK_PORT=8080 ENV TEMP_DIR=/tmp/seo-worker # Start the application CMD ["/app/start.sh"] # Labels for metadata LABEL maintainer="SEO Image Renamer Team" \ description="AI-powered image processing worker service" \ version="1.0.0" \ service="worker"