셀프 호스팅 앱 자동 업데이트 (Coolify 배포)
고급
이것은DevOps, Multimodal AI분야의자동화 워크플로우로, 18개의 노드를 포함합니다.주로 If, Set, Merge, HttpRequest, ManualTrigger 등의 노드를 사용하며. Coolify 배포를 통한 자체 호스팅 애플리케이션 자동 업데이트
사전 요구사항
- •대상 API의 인증 정보가 필요할 수 있음
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "96b96d0aa1e4ff5d5b6779332b149e3ef3364191562d79083d0309cf3ddfa53e"
},
"nodes": [
{
"id": "74922542-1a88-41fd-83ca-9ff2b1599b50",
"name": "Sticky • 개요",
"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 • 수동 트리거",
"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 • 스케줄",
"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 설정",
"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 최신 버전",
"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 • 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 • 설정",
"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 • 조건문",
"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 • 배포",
"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": "업데이트 확인을 시작할 스케줄 설정",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
496,
160
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "cb7eadb0-7fa3-479c-9fd4-4ef804844999",
"name": "작업 없음, 아무 동작도 하지 않음",
"type": "n8n-nodes-base.noOp",
"position": [
2448,
496
],
"parameters": {},
"typeVersion": 1
},
{
"id": "3217fe2c-eae5-4499-9008-33d4cd7b0f09",
"name": "두 버전이 다른 경우 make 이미지 업데이트",
"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 또는 유사 서비스 호출하여 이미지 업데이트",
"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": "변수 이름 변경 및 형식 통일",
"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": "봇 데이터 병합 및 필요한 데이터만 전달",
"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": "'워크플로 실행' 클릭 시",
"type": "n8n-nodes-base.manualTrigger",
"position": [
496,
384
],
"parameters": {},
"typeVersion": 1
},
{
"id": "6d60b6eb-9827-4d46-b4ee-27aedefc7801",
"name": "N8N 인스턴스 호출하여 버전 확인",
"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 호출하여 최신 n8n 이미지 안정 버전 확인",
"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
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 데브옵스, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
GitHub 동기화 대시보드 - V2
提交 기록과 롤백 기능을 갖춘 GitHub 워크플로우 버전 관리 대시보드
If
N8n
Set
+
If
N8n
Set
94 노드Eduard
데브옵스
자동화된 n8n 워크플로우 백업至 GitHub 및 삭제 추적
삭제 추적이 포함된 GitHub 자동화 n8n 워크플로우 백업
If
N8n
Set
+
If
N8n
Set
31 노드Marcial Ambriz
데브옵스
Typebot 플로우와 GitHub 양방향 동기화, Typebot API 사용
Typebot API를 활용한 Typebot 플로우와 GitHub 양방향 동기화
If
Set
Code
+
If
Set
Code
31 노드Marcial Ambriz
데브옵스
고급 n8n 워크플로우와 GitHub 동기화
GitHub를 활용한 지능형 변경 감지 자동화 워크플로우 백업
If
N8n
Set
+
If
N8n
Set
38 노드Maksym Brashenko
데브옵스
GPT-4와 Airtable을 사용한 작업 기록 및 백업 워크플로 자동화
GPT-4와 Airtable로 워크플로우 자동 기록 및 백업
If
N8n
Set
+
If
N8n
Set
38 노드Guillaume Duvernay
AI 요약
n8n 업데이트
Telegram 승인 시스템을 사용한 Docker 컨테이너 업데이트 자동화
If
Set
Ssh
+
If
Set
Ssh
27 노드Jaber Zare
데브옵스
워크플로우 정보
난이도
고급
노드 수18
카테고리2
노드 유형8
저자
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.
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유