- Updated Dockerfile to copy all tsconfig*.json files (includes tsconfig.build.json) - Updated Dockerfile.railway with same fix - Changed standard Dockerfile to use 'tsc -p tsconfig.build.json' for consistency - This fixes the missing file errors preventing Docker builds in CI The issue was that tsconfig.build.json was added for the testing infrastructure but the Docker COPY commands were not updated to include it. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
82 lines
2.5 KiB
Docker
82 lines
2.5 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
# Ultra-optimized Dockerfile - minimal runtime dependencies (no n8n packages)
|
|
|
|
# Stage 1: Builder (TypeScript compilation only)
|
|
FROM node:22-alpine AS builder
|
|
WORKDIR /app
|
|
|
|
# Copy tsconfig files for TypeScript compilation
|
|
COPY tsconfig*.json ./
|
|
|
|
# Create minimal package.json and install ONLY build dependencies
|
|
RUN --mount=type=cache,target=/root/.npm \
|
|
echo '{}' > package.json && \
|
|
npm install --no-save typescript@^5.8.3 @types/node@^22.15.30 @types/express@^5.0.3 \
|
|
@modelcontextprotocol/sdk@^1.12.1 dotenv@^16.5.0 express@^5.1.0 axios@^1.10.0 \
|
|
n8n-workflow@^1.96.0 uuid@^11.0.5 @types/uuid@^10.0.0
|
|
|
|
# Copy source and build
|
|
COPY src ./src
|
|
# Note: src/n8n contains TypeScript types needed for compilation
|
|
# These will be compiled but not included in runtime
|
|
RUN npx tsc -p tsconfig.build.json
|
|
|
|
# Stage 2: Runtime (minimal dependencies)
|
|
FROM node:22-alpine AS runtime
|
|
WORKDIR /app
|
|
|
|
# Install only essential runtime tools
|
|
RUN apk add --no-cache curl && \
|
|
rm -rf /var/cache/apk/*
|
|
|
|
# Copy runtime-only package.json
|
|
COPY package.runtime.json package.json
|
|
|
|
# Install runtime dependencies with cache mount
|
|
RUN --mount=type=cache,target=/root/.npm \
|
|
npm install --production --no-audit --no-fund
|
|
|
|
# Copy built application
|
|
COPY --from=builder /app/dist ./dist
|
|
|
|
# Copy pre-built database and required files
|
|
# Cache bust: 2025-07-06-trigger-fix-v3 - includes is_trigger=true for webhook,cron,interval,emailReadImap
|
|
COPY data/nodes.db ./data/
|
|
COPY src/database/schema-optimized.sql ./src/database/
|
|
COPY .env.example ./
|
|
|
|
# Copy entrypoint script
|
|
COPY docker/docker-entrypoint.sh /usr/local/bin/
|
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
|
|
|
# Add container labels
|
|
LABEL org.opencontainers.image.source="https://github.com/czlonkowski/n8n-mcp"
|
|
LABEL org.opencontainers.image.description="n8n MCP Server - Runtime Only"
|
|
LABEL org.opencontainers.image.licenses="MIT"
|
|
LABEL org.opencontainers.image.title="n8n-mcp"
|
|
|
|
# Create non-root user
|
|
RUN addgroup -g 1001 -S nodejs && \
|
|
adduser -S nodejs -u 1001 && \
|
|
chown -R nodejs:nodejs /app
|
|
|
|
# Switch to non-root user
|
|
USER nodejs
|
|
|
|
# Set Docker environment flag
|
|
ENV IS_DOCKER=true
|
|
|
|
# Expose HTTP port
|
|
EXPOSE 3000
|
|
|
|
# Set stop signal to SIGTERM (default, but explicit is better)
|
|
STOPSIGNAL SIGTERM
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD curl -f http://127.0.0.1:3000/health || exit 1
|
|
|
|
# Optimized entrypoint
|
|
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
|
CMD ["node", "dist/mcp/index.js"]
|