# n8n self-hosted image (Hugging Face Spaces / any Docker host) # HF Spaces runs the container as uid 1000 (= "node" user in node images), # so we run as node and keep all writable data in /home/node. FROM node:24-alpine USER root RUN apk add --no-cache \ git python3 py3-pip make g++ build-base \ cairo-dev pango-dev chromium postgresql-client yt-dlp \ tini curl # Pin a version that really exists. If the build fails with "No matching version", # change this to n8n@latest (or run: npm view n8n versions --json to see valid ones). RUN npm install -g n8n@2.42.6 # Writable data folder for uid 1000 RUN mkdir -p /home/node/.n8n && chown -R node:node /home/node ENV NODE_OPTIONS="--dns-result-order=ipv4first" \ PUPPETEER_SKIP_DOWNLOAD=true \ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium \ N8N_RUNNERS_ENABLED=true \ N8N_PORT=7860 \ N8N_LISTEN_ADDRESS=0.0.0.0 \ N8N_USER_FOLDER=/home/node \ HOME=/home/node \ N8N_PROTOCOL=https \ N8N_PROXY_HOPS=1 \ N8N_DEFAULT_BINARY_DATA_MODE=filesystem \ N8N_DIAGNOSTICS_ENABLED=false \ N8N_PERSONALIZATION_ENABLED=false \ EXECUTIONS_DATA_PRUNE=true \ EXECUTIONS_DATA_MAX_AGE=168 \ GENERIC_TIMEZONE=Asia/Kolkata \ TZ=Asia/Kolkata \ NODE_FUNCTION_ALLOW_BUILTIN=* \ NODE_FUNCTION_ALLOW_EXTERNAL=* USER node WORKDIR /home/node EXPOSE 7860 HEALTHCHECK --interval=60s --timeout=10s --start-period=90s --retries=3 \ CMD curl -fs http://127.0.0.1:7860/healthz || exit 1 ENTRYPOINT ["/sbin/tini", "--"] CMD ["n8n", "start"]