Automatische Updates für selbstgehostete Anwendungen (Coolify-Deployment)
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
- •Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
Verwendete Nodes (18)
Kategorie
{
"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
}
]
]
}
}
}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.
Verwandte Workflows
Edoardo Guzzi
@mredodosAutomation 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.
Diesen Workflow teilen