n8n Installation

Für die Installation nehmen wir ein frisches Ubuntu 24.04, installieren Docker und verwenden die Container von n8n, PostgreSQL und den Nginx Proxy Manager:

# apt install -y ca-certificates curl gnupg
# install -m 0755 -d /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list
# apt-get update
# apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# systemctl enable docker --now

Verzeichnisse für den Stack:

# mkdir -p /opt/n8n-stack/nginx/data /opt/n8n-stack/nginx/letsencrypt
# cd /opt/n8n-stack

Im Ordner legen wir einen docker-compose.yml an:

services:
  n8n-db:
    image: postgres:15
    container_name: n8n-db
    restart: unless-stopped
    environment:
      - POSTGRES_DB=n8n
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=SehrGeheimesPasswort
    volumes:
      - n8n_db_data:/var/lib/postgresql/data
    networks:
      - n8n-network

  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=n8n-db
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=SehrGeheimesPasswort
      - N8N_HOST=n8n.max-it.de
      - WEBHOOK_URL=https://n8n.max-it.de/
      - N8N_PROTOCOL=https
      - GENERIC_TIMEZONE=Europe/Berlin
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - n8n-network
    depends_on:
      - n8n-db

  nginxproxymanager:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginxproxymanager
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - ./nginx/data:/data
      - ./nginx/letsencrypt:/etc/letsencrypt
    networks:
      - n8n-network

volumes:
  n8n_data:
  n8n_db_data:

networks:
  n8n-network:
    driver: bridge

Wir starten mit docker compose up -d und verfolgen den Prozess:

[+] Running 64/64
✔ n8n-db Pulled 40.2s
✔ 59e22667830b Pull complete 18.7s
✔ 5f89f15368a7 Pull complete 18.8s
✔ 0bb403f9f337 Pull complete 19.3s
✔ 8a87db2cd315 Pull complete 19.5s
✔ 646b3426f78e Pull complete
...
[+] Running 6/6
✔ Network n8n-stack_n8n-network Created 0.1s
✔ Volume "n8n-stack_n8n_data" Created 0.0s
✔ Volume "n8n-stack_n8n_db_data" Created 0.0s
✔ Container nginxproxymanager Started 1.5s
✔ Container n8n-db Started 1.3s
✔ Container n8n Started 0.9s

Anschließend ist ein Login auf n8n.max-it.de:81 auf dem Proxy Manager möglich und wir loggen uns mit admin@example.com und changeme ein und ändern die Daten.

Ein wunderschöner Screen begrüßt uns nach dem Login:

Wir wechseln zu Hosts -> Proxy Hosts und fügen einen neuen Host hinzu.
Domain Name ist n8n.max-it.de (respektive die eigene Domain), 127.0.0.1 und Port 5678.
Im Tab SSL Request a new SSL Certificate auswählen und Force SSL aktivieren. Bitte prüfen ob FQDN aufgelöst und Port 80 von außen erreicht werden kann!

Die IP Localhost war erst mal nicht richtig, wir müssen die Adresse des Container herausfinden. Hierzu wechseln wir wieder auf die Console und prüfen die Container ID:

root@host:/opt/n8n-stack# docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
9d3f61cc159d   n8nio/n8n:latest                  "tini -- /docker-ent…"   14 minutes ago   Up 14 minutes   5678/tcp                                                                                   n8n
6a81b7fd554b   postgres:15                       "docker-entrypoint.s…"   14 minutes ago   Up 14 minutes   5432/tcp                                                                                   n8n-db
625dcdd85601   jc21/nginx-proxy-manager:latest   "/init"                  14 minutes ago   Up 14 minutes   0.0.0.0:80-81->80-81/tcp, [::]:80-81->80-81/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp   nginxproxymanager

Anschließend holen wir uns alle Info und tragen die korrekte IP ein (hier 172.18.0.4):

root@host:/opt/n8n-stack# docker inspect  9d3f61cc159d
...
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "6eb278eb258154f2f8ca9e3ee22945c9b1825617ff19390112fafa357012ad29",
            "SandboxKey": "/var/run/docker/netns/6eb278eb2581",
            "Ports": {
                "5678/tcp": null
            },
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "n8n-stack_n8n-network": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "n8n",
                        "n8n"
                    ],
                    "MacAddress": "46:20:45:27:65:d9",
                    "DriverOpts": null,
                    "GwPriority": 0,
                    "NetworkID": "9c4f9c4ada273d066d2bb39a35639d0fcd4d671a0717862d3cee37fc395f1d26",
                    "EndpointID": "ea9791925a47b5670dfce12166b0428f44ec9280a8e75985e1a0ecf2b7e0bf25",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DNSNames": [
                        "n8n",
                        "9d3f61cc159d"
                    ]
                }
            }
...

Schön begrüßt uns n8n:

Zugangsdaten erstellen und los geht …