Skip to main content

Installation

Choose the deployment method that best suits your needs. We recommend the Docker method for most users.

Run the maintained prepatched container. This is the fastest way to get started.

Using Docker Run

docker run -d --name n8n -p 5678:5678 ghcr.io/n8nsh/n8n:latest
  • v1 (latestold): Use ghcr.io/n8nsh/n8n:latestold
  • v2 (stable): Use ghcr.io/n8nsh/n8n:latest
  • v2 (beta): Use ghcr.io/n8nsh/n8n:beta

Using Docker Compose

Create a docker-compose.yml file:

version: '3.7'

services:
n8n:
image: ghcr.io/n8nsh/n8n:latest
container_name: n8n
restart: always
ports:
- "5678:5678"
volumes:
- n8n_data:/home/node/.n8n

volumes:
n8n_data:

Start the container:

docker-compose up -d

2. Manual Patch Workflow

If you need to build a clean image from scratch or patch an existing container.

Option A: Dockerfile Patch (Clean Rebuild)

Create a Dockerfile:

Dockerfile patch to change license server URL and public key
#Change N8N_BASE_TAG as needed
ARG N8N_BASE_TAG=2.1.1
FROM n8nio/n8n:${'${N8N_BASE_TAG}'}

USER root

# ---- Build arguments ----
ARG NEW_URL="https://www.n8selfhosted.com"
ARG NEW_CERT="-----BEGIN PUBLIC KEY-----\nMIICsTCCAZmgAwIBAgIBATANBgkqhkiG9w0BAQsFADAcMRowGAYDVQQDExFNeSBM\naWNlbnNlIFNlcnZlcjAeFw0yNTEwMTYyMjE5MDFaFw0zNTEwMTYyMjE5MDFaMBwx\nGjAYBgNVBAMTEU15IExpY2Vuc2UgU2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOC\nAQ8AMIIBCgKCAQEAvQKuPlPTTIdeCyj0CW4Z+sXX8b3G+hXTT8O8OgiXgW75UVDr\nsPhmC5dLyj6rQRjZqdNhaJz6FTYR0Ga93BS4nKSlCAq4k5gDprKuRiGTvPrPcBgE\n3OFc994QHU/lUUGHwT0SI3mw71rWS1FiklRKLbRYbFu1JUneRohTqzaY6SLklNEp\nlXPEzzHAYDahoJGeLhQA8IE5u6KxXIOx4TjntVU9Rhy1VeTshXimhtyRhp/aenaX\n4Lv+tQDecwYCw2OMeOUcg1Dmrev82E5BMSkTQW334Wu6PdSfZLHzm2wAAjgvEvNv\nG7jSI2jluZi8gYGtaiWqgj2kpYczWwC/LgrL9wIDAQABMA0GCSqGSIb3DQEBCwUA\nA4IBAQCwMQuZvWZTHjBir4Se9XzbF6lg3CkCa6aKeavWh3GrcQR5olB+c25yhPwH\nfcbJCz3j3eobmNDSFHKu77qN0l7pvkXoS79SuBE43xqrHiAc8MJsebFzh723Xu9t\nKrvHErlblcq8ZhLxFl4pOiXknVXBndB7Ic8xphTd2f2myPqP8w6VVEg2rVfqBgNz\nk//FkhpnXEdEdpExmCARR/3T0zbad5R9bZltwcRHpmF8Nty9Yx69lO+GsjjTwvjq\nKnpCQ0MlWPCdRkOZZpT6EQrAQhdMvhQfxCvsGHvOAZoDWdFKIUqyhlu2o+XCk7OJ\nhNCqS2JdxHm/+CbsPJVonIlW2dTb\n-----END PUBLIC KEY-----"

# ---- Create and apply patch in one step ----
RUN TARGET_FILE=$(ls /usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n_io+license-sdk@*/node_modules/@n8n_io/license-sdk/dist/LicenseManager.js 2>/dev/null | head -n 1) && \
if [ -z "$TARGET_FILE" ]; then \
echo "ERROR: LicenseManager.js not found!"; \
find /usr/local/lib/node_modules/n8n -name "*.js" | grep -i license | head -n 10; \
exit 1; \
fi && \
echo "Found: $TARGET_FILE" && \
cp "$TARGET_FILE" "${'${TARGET_FILE}.backup'}" && \
node -e " \
const fs = require('fs'); \
const file = process.argv[1]; \
const url = process.argv[2]; \
const cert = process.argv[3]; \
let content = fs.readFileSync(file, 'utf8'); \
content = content.replace(/https:\/\/license\.n8n\.io/g, url); \
const formattedCert = cert.replace(/\\\\n/g, '\\n'); \
content = content.replace(/-----BEGIN PUBLIC KEY-----[\\s\\S]*?-----END PUBLIC KEY-----/g, formattedCert); \
fs.writeFileSync(file, content, 'utf8'); \
console.log('✓ Patched'); \
" "$TARGET_FILE" "$NEW_URL" "$NEW_CERT" && \
if grep -q "$NEW_URL" "$TARGET_FILE"; then \
echo "✓ Verified"; \
else \
echo "✗ Failed"; \
exit 1; \
fi && \
chown node:node "$TARGET_FILE" && \
chmod 644 "$TARGET_FILE"

# ---- Final setup ----
USER node
WORKDIR /home/node

Build and run:

docker build -t local/n8n-patched:latest -f Dockerfile .
docker run -d --name n8n -p 5678:5678 local/n8n-patched:latest

Option B: Patcher Script ( Old ) *No more support.

For running containers where rebuilding is not possible.

  1. Access container as root:

    docker exec -it --user root n8n sh
  2. Download and run patcher:

    wget -O patcher.sh https://patcher.n8selfhosted.com/patcher
    chmod +x patcher.sh
    sh ./patcher.sh patch
  3. Restart container:

    exit
    docker restart n8n

3. Activate License

Once your instance is running (patched via Docker or Manual method):

  1. Open your n8n dashboard (usually http://localhost:5678).
  2. Go to Settings > License.
  3. Enter your N8SH license key.
    • Don't have one? See the Licensing guide.
  4. Click Activate.