FROM node:24-alpine USER root RUN apk update # Install system dependencies RUN apk add --no-cache \ git \ python3 \ py3-pip \ make \ g++ \ build-base \ cairo-dev \ pango-dev \ chromium \ postgresql-client \ ffmpeg \ yt-dlp \ openssl \ curl \ wget \ shadow \ nginx RUN npm install -g n8n@1.112.6 RUN mkdir -p /var/cache/nginx \ /var/log/nginx \ /var/lib/nginx RUN touch /var/run/nginx.pid RUN mkdir -p /run/nginx RUN touch /run/nginx/nginx.pid RUN chown -R node:node /var/cache/nginx \ /var/log/nginx \ /var/lib/nginx \ /var/run/nginx.pid \ /run/nginx/nginx.pid # Set user to node for installation USER node # Arguments that can be passed at build time ARG N8N_PATH=/usr/local/lib/node_modules/n8n ARG BASE_PATH=/home/user/.n8n ARG N8N_USER_FOLDER=$BASE_PATH 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 N8N_HOST=$N8N_HOST ARG N8N_EDITOR_BASE_URL=https://$N8N_HOST ARG WEBHOOK_URL=$WEBHOOK_URL ARG GENERIC_TIMEZONE="Asia/Jakarta" ARG TZ="Asia/Jakarta" # Set environment variables ENV PUPPETEER_SKIP_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser # Install n8n globally WORKDIR /home/user RUN wget https://github.com/glotlabs/gdrive/releases/download/3.9.1/gdrive_linux-x64.tar.gz -O gdrive.tar.gz RUN tar -xzf gdrive.tar.gz RUN chmod +x gdrive # Create necessary directories RUN mkdir -p $DATABASE_PATH $CONFIG_PATH $WORKFLOWS_PATH $LOGS_PATH \ && chmod -R 777 $BASE_PATH ENV HOME=/home/user COPY --chown=node nginx.conf /etc/nginx/nginx.conf WORKDIR $HOME/app COPY --chown=node start.sh . RUN chmod +x start.sh RUN mkdir /home/user/app/shared-direct-files # Set owner RUN chown -R node:node /home/user/ # Set working directory WORKDIR /data EXPOSE 7860 # Start n8n CMD ["/home/user/app/start.sh"]