Automatische Updates für selbstgehostete Anwendungen (Coolify-Deployment)

Experte

Dies ist ein DevOps, Multimodal AI-Bereich Automatisierungsworkflow mit 18 Nodes. Hauptsächlich werden If, Set, Merge, HttpRequest, ManualTrigger und andere Nodes verwendet. Automatische Updates für selbstgehostete Anwendungen mit Coolify

Voraussetzungen
  • Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "meta": {
    "instanceId": "96b96d0aa1e4ff5d5b6779332b149e3ef3364191562d79083d0309cf3ddfa53e"
  },
  "nodes": [
    {
      "id": "74922542-1a88-41fd-83ca-9ff2b1599b50",
      "name": "Sticky • Übersicht",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        16
      ],
      "parameters": {
        "color": 3,
        "width": 520,
        "height": 872,
        "content": "## Overview\n**Purpose:** Auto-check your n8n version and deploy an update via Coolify if a newer release is available.\n\n**Pipeline:** Manual/Schedule → HTTP n8n settings → HTTP GitHub latest → Merge (SQL) → Set (normalize) → IF compare → Deploy or No-Op.\n\n**Before running:**\n- Replace the n8n URL in the *N8N Settings* node.\n- Replace the Coolify API URL (domain + UUID) and add a valid Bearer token credential in *Deploy* node.\n- Adjust the schedule interval if needed."
      },
      "typeVersion": 1
    },
    {
      "id": "34b0fe1d-6b44-4847-a4fe-16a23730cdd0",
      "name": "Sticky • Manueller Trigger",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        256,
        304
      ],
      "parameters": {
        "color": "blue",
        "width": 384,
        "height": 220,
        "content": "## Manual Trigger\nClick **Execute workflow** to run tests immediately.\nNo configuration required."
      },
      "typeVersion": 1
    },
    {
      "id": "c2f1cd58-bf94-4be0-a938-5b758c966798",
      "name": "Sticky • Zeitplan",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        256,
        16
      ],
      "parameters": {
        "color": "blue",
        "width": 376,
        "height": 272,
        "content": "## Schedule Trigger\nRuns the check on a timer.\n- Open **Rule → Interval** and set how often to run (e.g., every 6h).\n- Keep both HTTP nodes connected so data reaches the Merge."
      },
      "typeVersion": 1
    },
    {
      "id": "00114438-dacd-43a4-b344-ea20ec8fab78",
      "name": "Sticky • N8N Einstellungen",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 468,
        "height": 344,
        "content": "## N8N Settings (HTTP Request)\nFetch your instance settings.\n- **Set URL:** `https://<your-n8n-domain>/rest/settings`\n- Output must include `data.versionCli`.\n- No auth needed for default public settings; add auth only if your instance requires it."
      },
      "typeVersion": 1
    },
    {
      "id": "165a79fe-1a72-4308-9595-8b253ac213f5",
      "name": "Sticky • GitHub Latest",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        560
      ],
      "parameters": {
        "color": 5,
        "width": 516,
        "height": 324,
        "content": "## GitHub Latest (HTTP Request)\nGets latest n8n release.\n- **URL:** `https://api.github.com/repos/n8n-io/n8n/releases/latest`\n- Field used later: **`name`** (e.g., `n8n@1.60.0`).\n- Keep method GET and no auth."
      },
      "typeVersion": 1
    },
    {
      "id": "29a1e319-7c3f-4442-8563-9ae0dc6dd2f3",
      "name": "Sticky • Merge SQL",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        32
      ],
      "parameters": {
        "color": "orange",
        "width": 328,
        "height": 528,
        "content": "## Merge (SQL)\nReduces inputs to 2 fields.\nUse this query:\n```sql\nSELECT input1.data->versionCli AS versionCli,\n       input2.name             AS name\nFROM input1\nLEFT JOIN input2 ON 1=1;\n```\n- Requires exactly 1 item per input.\n- Output keys: `versionCli`, `name`."
      },
      "typeVersion": 1
    },
    {
      "id": "80a0247d-df92-416a-8737-2d7319af0cef",
      "name": "Sticky • Set",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1520,
        144
      ],
      "parameters": {
        "color": "orange",
        "width": 356,
        "height": 420,
        "content": "## Set (Normalize)\nCreate clean variables for comparison:\n- `actualn8nversion = $json.versionCli`\n- `newn8nversion = $json.name.split('@')[1]`\nBoth as **string**."
      },
      "typeVersion": 1
    },
    {
      "id": "7f5d83a6-5510-414f-9ccb-c3e31bd4b748",
      "name": "Sticky • IF",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1888,
        144
      ],
      "parameters": {
        "color": "red",
        "width": 420,
        "height": 420,
        "content": "## IF (Compare)\nCondition: `actualn8nversion !== newn8nversion`.\n- True → deploy update.\n- False → do nothing.\nKeep **caseSensitive** and **strict type** enabled."
      },
      "typeVersion": 1
    },
    {
      "id": "86697e08-a3a2-49ee-af28-8540e7f9983e",
      "name": "Sticky • Deploy",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2384,
        112
      ],
      "parameters": {
        "color": "purple",
        "width": 460,
        "height": 348,
        "content": "## Deploy (HTTP Request)\nTriggers Coolify deploy.\n- **URL:** `https://<your-coolify-domain>/api/v1/services/<APP_UUID>/restart?latest=true`\n- **Auth:** *HTTP Bearer* credential with a valid API token.\n- Optional: set timeout/retries in **Options**.\nReplace domain and UUID."
      },
      "typeVersion": 1
    },
    {
      "id": "f8ae7d2b-4458-4686-b7e5-7737c5d7b95a",
      "name": "Zeitplan für Update-Prüfungen starten",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        496,
        160
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "cb7eadb0-7fa3-479c-9fd4-4ef804844999",
      "name": "No Operation, keine Aktion",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2448,
        496
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3217fe2c-eae5-4499-9008-33d4cd7b0f09",
      "name": "Wenn die 2 Versionen nicht identisch sind make ein Image-Update",
      "type": "n8n-nodes-base.if",
      "position": [
        2064,
        368
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c8ee8d9d-1227-4738-a315-478475601721",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.actualn8nversion }}",
              "rightValue": "={{ $json.newn8nversion }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "81a3cf57-6269-4237-8671-0a1e5f46c15d",
      "name": "COOLIFY ODER ÄHNLICHEN DIENST FÜR IMAGE-UPDATE AUFRUFEN",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2448,
        288
      ],
      "parameters": {
        "url": "https://app.coolify.io/api/v1/services/your-services-uuid/restart?latest=true",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "M2C49Bi5D2s9DGwo",
          "name": "Coolify n8n autom aifb token"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3675b8ea-b9d3-4383-9422-d4335f7bc5f4",
      "name": "Variable umbenennen und Format vereinheitlichen",
      "type": "n8n-nodes-base.set",
      "position": [
        1680,
        368
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a7787c92-705f-445f-8eee-a36c3555203c",
              "name": "actualn8nversion",
              "type": "string",
              "value": "={{ $json.versionCli }}"
            },
            {
              "id": "7e6dc6fa-44be-4e52-bf5c-1ebf4262f18a",
              "name": "newn8nversion",
              "type": "string",
              "value": "={{ $json.name.split(\"@\")[1] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "16bd29a3-b38a-42ec-97e7-533e145eae65",
      "name": "Bot-Daten zusammenführen und nur Nötiges weitergeben",
      "type": "n8n-nodes-base.merge",
      "position": [
        1200,
        368
      ],
      "parameters": {
        "mode": "combineBySql",
        "query": "SELECT\n  input1.data->versionCli AS versionCli,\n  input2.name AS name\nFROM input1\nLEFT JOIN input2 ON 1=1;",
        "options": {
          "emptyQueryResult": "success"
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "50112ebc-7fda-4cb9-94a1-4d7cd924e657",
      "name": "Bei Klick auf ‚Workflow ausführen‘",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        496,
        384
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "6d60b6eb-9827-4d46-b4ee-27aedefc7801",
      "name": "N8N INSTANZ AUFRUFEN und Version abrufen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        976,
        176
      ],
      "parameters": {
        "url": "https://yourn8ndomain/rest/settings",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "59b20003-8247-43e1-aa68-7435055aa6e9",
      "name": "GITHUB AUFRUFEN und letzte stabile n8n Image-Version abrufen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        960,
        704
      ],
      "parameters": {
        "url": "https://api.github.com/repos/n8n-io/n8n/releases/latest",
        "options": {}
      },
      "typeVersion": 4.2
    }
  ],
  "pinData": {},
  "connections": {
    "3675b8ea-b9d3-4383-9422-d4335f7bc5f4": {
      "main": [
        [
          {
            "node": "3217fe2c-eae5-4499-9008-33d4cd7b0f09",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "50112ebc-7fda-4cb9-94a1-4d7cd924e657": {
      "main": [
        [
          {
            "node": "59b20003-8247-43e1-aa68-7435055aa6e9",
            "type": "main",
            "index": 0
          },
          {
            "node": "6d60b6eb-9827-4d46-b4ee-27aedefc7801",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "16bd29a3-b38a-42ec-97e7-533e145eae65": {
      "main": [
        [
          {
            "node": "3675b8ea-b9d3-4383-9422-d4335f7bc5f4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6d60b6eb-9827-4d46-b4ee-27aedefc7801": {
      "main": [
        [
          {
            "node": "16bd29a3-b38a-42ec-97e7-533e145eae65",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f8ae7d2b-4458-4686-b7e5-7737c5d7b95a": {
      "main": [
        [
          {
            "node": "6d60b6eb-9827-4d46-b4ee-27aedefc7801",
            "type": "main",
            "index": 0
          },
          {
            "node": "59b20003-8247-43e1-aa68-7435055aa6e9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3217fe2c-eae5-4499-9008-33d4cd7b0f09": {
      "main": [
        [
          {
            "node": "81a3cf57-6269-4237-8671-0a1e5f46c15d",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "cb7eadb0-7fa3-479c-9fd4-4ef804844999",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "59b20003-8247-43e1-aa68-7435055aa6e9": {
      "main": [
        [
          {
            "node": "16bd29a3-b38a-42ec-97e7-533e145eae65",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Experte - DevOps, Multimodales KI

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes18
Kategorie2
Node-Typen8
Schwierigkeitsbeschreibung

Für fortgeschrittene Benutzer, komplexe Workflows mit 16+ Nodes

Autor
Edoardo Guzzi

Edoardo Guzzi

@mredodos

Automation expert with 10+ years in programming, AI, Chrome extensions, and mobile apps. Specializing in PHP, JS, and Python, I design custom n8n workflows to streamline processes and boost productivity. Explore my templates or contact me for tailored solutions.

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34