# Use the official Node.js image as the base image | |
FROM node:20-alpine | |
# Set environment variables for n8n | |
ENV N8N_VERSION=1.16.0 \ | |
N8N_USER=n8n \ | |
N8N_HOME=/home/n8n | |
# Create a non-root user | |
RUN addgroup -S $N8N_USER && adduser -S $N8N_USER -G $N8N_USER | |
# Create a working directory | |
WORKDIR $N8N_HOME | |
# Install dependencies | |
RUN apk add --no-cache \ | |
bash \ | |
tini \ | |
python3 \ | |
py3-pip \ | |
libc6-compat \ | |
openssh-client \ | |
curl \ | |
git | |
# Install n8n globally | |
RUN npm install -g n8n@$N8N_VERSION | |
# Change ownership to the n8n user | |
RUN chown -R $N8N_USER:$N8N_USER $N8N_HOME | |
# Switch to the non-root user | |
USER $N8N_USER | |
# Expose the default n8n port | |
EXPOSE 5678 | |
# Use tini to handle process signals correctly | |
ENTRYPOINT ["tini", "--"] | |
# Start n8n with authentication from environment variables | |
CMD ["n8n"] |