FROM node:24-bookworm-slim USER root # Build-time args ARG N8N_PATH=/usr/local/lib/node_modules/n8n ARG BASE_PATH=/root/.n8n ARG DATABASE_PATH=$BASE_PATH/database ARG CONFIG_PATH=$BASE_PATH/config ARG WORKFLOWS_PATH=$BASE_PATH/workflows ARG LOGS_PATH=$BASE_PATH/logs ARG allowVulnerableTags=true # Environment Variables ENV N8N_DIAGNOSTICS_ENABLED=false ENV N8N_VERSION_NOTIFICATIONS_ENABLED=false ENV N8N_TEMPLATES_ENABLED=false ENV N8N_ENDPOINT_WEBHOOK=io ENV N8N_ENDPOINT_WEBHOOK_TEST=io-in ENV N8N_ENDPOINT_WEBHOOK_WAIT=io-call ENV N8N_USER_FOLDER=/home/node/.n8n ENV N8N_CONFIG_FILES=/home/node/.n8n/settings.json ENV NODE_FUNCTION_ALLOW_BUILTIN=* ENV NODE_FUNCTION_ALLOW_EXTERNAL=* ENV N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/nodes ENV NODE_ENV=production ENV DEBIAN_FRONTEND=noninteractive # Expose ports n8n typically uses EXPOSE 7860 5678 5679 # Install minimal system deps RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ git \ curl \ python3 \ build-essential \ g++ \ libcairo2-dev \ libpango1.0-dev \ libcairo2 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ python3-pip \ postgresql-client \ ffmpeg \ libnss3 \ chromium \ libatk-bridge2.0-0 \ libx11-xcb1 \ libxcomposite1 \ libxdamage1 \ libxrandr2 \ libgbm1 \ libasound2 \ libxshmfence1 \ libgtk-3-0 \ libenchant-2-2 \ libsecret-1-0 \ libhyphen0 \ libmanette-0.2-0 \ libunwind8 \ libdw1 \ libegl1 \ libgudev-1.0-0 \ libgles2 \ yt-dlp \ && rm -rf /var/lib/apt/lists/* # Prepare runtime folders and settings file (owned by node) RUN mkdir -p /home/node/.n8n/nodes \ && touch $N8N_CONFIG_FILES \ && printf '{}' > $N8N_CONFIG_FILES \ && chmod 600 $N8N_CONFIG_FILES \ && chown -R node:node /home/node/.n8n || true # Install n8n globally RUN npm install -g --unsafe-perm n8n@latest RUN npm install -g pnpm # Install community nodes RUN cd /home/node/.n8n/nodes \ && npm init -y \ && npm --unsafe-perm install --no-audit --no-fund \ @devlikeapro/n8n-nodes-waha \ @aldinokemal2104/n8n-nodes-gowa \ n8n-nodes-cheerio-html-parser \ n8n-nodes-scrapeninja \ n8n-nodes-puppeteer \ n8n-nodes-playwright-session \ n8n-nodes-evolution-api-english \ n8n-nodes-chatery-whatsapp \ && pnpm rebuild n8n-nodes-playwright-session \ && chown -R node:node /home/node/.n8n # Switch to non-root node user and set workdir USER node WORKDIR /home/node # Install Playwright & Puppeteer browsers as node RUN npx playwright install \ && npx puppeteer browsers install chrome # Start n8n CMD ["n8n", "start"]