# Hybrid Debian-based Dockerfile for n8n with PostgreSQL secrets and Puppeteer FROM buildpack-deps:22.04-curl # Non-interactive installs and timezone ENV DEBIAN_FRONTEND=noninteractive \ TZ=Asia/Kolkata\ N8N_EDITOR_BASE_URL="https://kumar-aditya-n8n.hf.space" \ WEBHOOK_URL="https://kumar-aditya-n8n.hf.space/" # Define n8n environment variables ENV N8N_HOME=/home/n8n/.n8n ENV NODE_ENV=production # Mount secrets for PostgreSQL credentials RUN --mount=type=secret,id=DB_TYPE,required=true \ --mount=type=secret,id=DB_POSTGRESDB_DATABASE,required=true \ --mount=type=secret,id=DB_POSTGRESDB_HOST,required=true \ --mount=type=secret,id=DB_POSTGRESDB_PORT,required=true \ --mount=type=secret,id=DB_POSTGRESDB_USER,required=true \ --mount=type=secret,id=DB_POSTGRESDB_PASSWORD,required=true \ --mount=type=secret,id=DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED,required=true \ export DB_TYPE=$(cat /run/secrets/DB_TYPE) && \ export DB_POSTGRESDB_DATABASE=$(cat /run/secrets/DB_POSTGRESDB_DATABASE) && \ export DB_POSTGRESDB_HOST=$(cat /run/secrets/DB_POSTGRESDB_HOST) && \ export DB_POSTGRESDB_PORT=$(cat /run/secrets/DB_POSTGRESDB_PORT) && \ export DB_POSTGRESDB_USER=$(cat /run/secrets/DB_POSTGRESDB_USER) && \ export DB_POSTGRESDB_PASSWORD=$(cat /run/secrets/DB_POSTGRESDB_PASSWORD) && \ export DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=$(cat /run/secrets/DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED) && \ echo "DB setup complete" # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ git \ python3 \ python3-pip \ postgresql-client \ chromium-browser \ build-essential \ libssl-dev \ libnss3 \ libasound2 \ libxss1 && rm -rf /var/lib/apt/lists/* # Install Node.js 20.x and n8n RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - && \ apt-get update && \ apt-get install -y nodejs && \ npm install -g n8n@latest # Configure Puppeteer to use Chromium ENV PUPPETEER_SKIP_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser # Create n8n user and home RUN useradd -m -u 1000 n8n USER n8n WORKDIR /home/n8n # Expose n8n port env APP_PORT=5678 EXPOSE ${APP_PORT} # Start n8n CMD ["n8n", "start"]