Installation
Choose the deployment method that best suits your needs. We recommend the Docker method for most users.
1. Docker (Recommended)
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.
-
Access container as root:
docker exec -it --user root n8n sh -
Download and run patcher:
wget -O patcher.sh https://patcher.n8selfhosted.com/patcher
chmod +x patcher.sh
sh ./patcher.sh patch -
Restart container:
exit
docker restart n8n
3. Activate License
Once your instance is running (patched via Docker or Manual method):
- Open your n8n dashboard (usually
http://localhost:5678). - Go to Settings > License.
- Enter your N8SH license key.
- Don't have one? See the Licensing guide.
- Click Activate.