Dateien nach "workflow/n8n/workflows" hochladen

This commit is contained in:
2025-12-27 19:06:05 +01:00
parent 46c896a797
commit 92c23014b9

View File

@@ -0,0 +1,543 @@
{
"name": "Paperless Sync: 192.168.2.142 docker-prod",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-208,
0
],
"id": "324fa415-ab8b-46f2-a9cc-00a6036aecb2",
"name": "When clicking Execute workflow"
},
{
"parameters": {
"url": "https://192.168.2.142:9443/api/stacks",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"options": {
"allowUnauthorizedCerts": true
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
240,
0
],
"id": "83017d97-7949-4a14-8ad5-e5d9db55d4ad",
"name": "get stack list",
"credentials": {
"httpHeaderAuth": {
"id": "lmln2LlZ5kgMGNWh",
"name": "portainer-api 192.168.2.142"
}
}
},
{
"parameters": {
"method": "POST",
"url": "=https://192.168.2.142:9443/api/stacks/{{$json.stackId}}/stop?endpointId={{$json.endpointId}}\n",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {
"allowUnauthorizedCerts": true
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
688,
0
],
"id": "8dac28cc-1772-4843-b741-366628c78c09",
"name": "stop stack",
"credentials": {
"httpBasicAuth": {
"id": "iJkXePPAceSyENTx",
"name": "CMI CAN Bus local"
},
"httpHeaderAuth": {
"id": "lmln2LlZ5kgMGNWh",
"name": "portainer-api 192.168.2.142"
}
}
},
{
"parameters": {
"amount": 10
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
912,
0
],
"id": "a4a0f38c-ff47-47f5-8fc8-3926971d5e71",
"name": "wait 10 secs",
"webhookId": "0fc1095d-f6c6-4fe7-ac78-1de703458b29"
},
{
"parameters": {
"method": "POST",
"url": "=https://192.168.2.142:9443/api/stacks/{{ $('select stack by name').item.json.stackId }}/start?endpointId={{ $('select stack by name').item.json.endpointId }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {
"allowUnauthorizedCerts": true
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
688,
224
],
"id": "16ea4b2f-85cc-4815-905c-716e8e9444fb",
"name": "start stack",
"executeOnce": true,
"credentials": {
"httpBasicAuth": {
"id": "iJkXePPAceSyENTx",
"name": "CMI CAN Bus local"
},
"httpHeaderAuth": {
"id": "lmln2LlZ5kgMGNWh",
"name": "portainer-api 192.168.2.142"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"url": "https://192.168.2.142:9443/api/endpoints/3/docker/containers/json?all=1",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {
"allowUnauthorizedCerts": true
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
912,
224
],
"id": "b31681b7-e9c2-4202-bff3-175141f54c8f",
"name": "list containers",
"credentials": {
"httpHeaderAuth": {
"id": "lmln2LlZ5kgMGNWh",
"name": "portainer-api 192.168.2.142"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "dfe53d42-71aa-4bbd-9cc1-90228d46ba6c",
"name": "stackName",
"value": "paperless-ngx",
"type": "string"
},
{
"id": "b350e0c4-751a-4b8f-a8fd-29cae43f3953",
"name": "endpointId",
"value": 3,
"type": "number"
},
{
"id": "bae42f62-9ca5-48ac-ba32-3b9fff0df26a",
"name": "confirmWipe",
"value": "YES_I_KNOW_THIS_DELETES_DATA",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
16,
0
],
"id": "ba4ead74-e20f-479e-b4f6-1f3ece3c793e",
"name": "stack config"
},
{
"parameters": {
"jsCode": "const targetName = $('stack config').item.json.stackName; // paperless-ngx\nconst endpointIdWanted = $('stack config').item.json.endpointId; // 3\n\n// get stack list liefert mehrere items (je stack ein item)\nconst stacks = $input.all().map(i => i.json);\n\nconst match = stacks.find(s =>\n s.Name === targetName && Number(s.EndpointId) === Number(endpointIdWanted)\n);\n\nif (!match) {\n throw new Error(`Stack '${targetName}' (endpoint ${endpointIdWanted}) nicht gefunden`);\n}\n\nreturn [{\n json: {\n ...$('stack config').item.json,\n stackId: match.Id,\n endpointId: match.EndpointId,\n stackType: match.Type,\n projectPath: match.ProjectPath,\n entryPoint: match.EntryPoint,\n }\n}];\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
464,
0
],
"id": "e496f2af-54c7-4a60-b3bc-5f75ff53bc40",
"name": "select stack by name"
},
{
"parameters": {
"url": "={{ 'https://192.168.2.142:9443/api/endpoints/' + $json.EndpointId + '/docker/volumes' }}\n\n\n\n",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {
"allowUnauthorizedCerts": true
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
1136,
0
],
"id": "9b2584f1-07ae-4dcf-a908-69da38c7cecf",
"name": "list volumes",
"credentials": {
"httpHeaderAuth": {
"id": "lmln2LlZ5kgMGNWh",
"name": "portainer-api 192.168.2.142"
}
}
},
{
"parameters": {
"jsCode": "const stackCfg = $items('stack config')[0].json;\n\nconst stackName = stackCfg.stackName; // paperless-ngx\nconst confirm = stackCfg.confirmWipe; // YES_I_KNOW_THIS_DELETES_DATA\n\n\nif (confirm !== 'YES_I_KNOW_THIS_DELETES_DATA') {\n throw new Error('confirmWipe fehlt oder falsch. Abbruch (Sicherheitsgurt).');\n}\n\nconst volumes = $input.first().json.Volumes || [];\nconst filtered = volumes.filter(v => {\n const name = v.Name || '';\n const labels = v.Labels || {};\n // Sicherster Weg: compose project label\n const project = labels['com.docker.compose.project'];\n return project === stackName || name.startsWith(`${stackName}_`);\n});\n\nreturn filtered.map(v => ({\n json: {\n volumeName: v.Name,\n volumeNameEncoded: encodeURIComponent(v.Name),\n mountpoint: v.Mountpoint || null\n }\n}));\n\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1360,
0
],
"id": "61bf6894-ffcf-4da1-9e97-8ee1e7e42947",
"name": "filter paperless volumes"
},
{
"parameters": {
"method": "DELETE",
"url": "=https://192.168.2.142:9443/api/endpoints/{{$items('stack config')[0].json.endpointId}}/docker/volumes/{{$json.volumeNameEncoded}}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {
"allowUnauthorizedCerts": true
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
-208,
224
],
"id": "efccd544-eee0-429d-a5f7-4f62609d326c",
"name": "delete volume",
"alwaysOutputData": true,
"credentials": {
"httpHeaderAuth": {
"id": "lmln2LlZ5kgMGNWh",
"name": "portainer-api 192.168.2.142"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"amount": 10
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
16,
224
],
"id": "8134a5d1-6127-45d0-a9b4-6e4b6693d119",
"name": "wait 10 secs1",
"webhookId": "f1303df5-4fcd-4e01-a703-d57e59f4c837"
},
{
"parameters": {
"command": "docker exec duplicati sh -lc '\nset -eux\nSRC=\"file:///backups/paperless-ngx\"\nREST=\"/docker-volumes\"\nLOG=\"/backups/_logfiles_/restore-paperless-to-volumes-192_168_2_142.log\"\n\nmkdir -p \"$(dirname \"$LOG\")\"\nrm -f \"$LOG\"\n\n/app/duplicati/duplicati-cli restore \"$SRC\" \\\n --restore-path=\"$REST\" \\\n --passphrase=\"?Aichwald01\" \\\n --overwrite=true \\\n --restore-permissions=true \\\n --restore-metadata=true \\\n --console-log-level=Information \\\n --log-file-log-level=Information \\\n --log-file=\"$LOG\" \\\n --progress\n\necho \"RC=$?\"\ntail -n 40 \"$LOG\" || true\n'"
},
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
"position": [
240,
224
],
"id": "279df0c2-cef9-435e-ade7-229f2112b21f",
"name": "restore auf docker volumes",
"executeOnce": true,
"credentials": {
"sshPassword": {
"id": "OWWGwX8FprplHTEu",
"name": "SSH Password account 192.168.2.142"
}
}
},
{
"parameters": {
"amount": 10
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
464,
224
],
"id": "b36dd6a9-a50f-4168-b70d-668be7ae1245",
"name": "wait 10 secs2",
"webhookId": "f71f70aa-2e67-4e6d-acd3-d0b57d5e7cee",
"executeOnce": true
},
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 23,
"triggerAtMinute": 30
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-208,
-160
],
"id": "872c878c-aa13-4e19-aa10-c47ba17da9b9",
"name": "Schedule Trigger"
},
{
"parameters": {
"chatId": "749279624",
"text": "Paperless-ngx auf 192.168.2.142 wurde aktualisiert.",
"additionalFields": {}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1136,
224
],
"id": "915a7f3f-4d42-4615-ad04-08e993dc8754",
"name": "send a message",
"webhookId": "8474c08a-567f-4e93-8100-38b208770f29",
"executeOnce": true,
"credentials": {
"telegramApi": {
"id": "EUy2hT71fSdnEr2w",
"name": "Telegram account"
}
}
}
],
"pinData": {},
"connections": {
"When clicking Execute workflow": {
"main": [
[
{
"node": "stack config",
"type": "main",
"index": 0
}
]
]
},
"get stack list": {
"main": [
[
{
"node": "select stack by name",
"type": "main",
"index": 0
}
]
]
},
"stop stack": {
"main": [
[
{
"node": "wait 10 secs",
"type": "main",
"index": 0
}
]
]
},
"wait 10 secs": {
"main": [
[
{
"node": "list volumes",
"type": "main",
"index": 0
}
]
]
},
"start stack": {
"main": [
[
{
"node": "list containers",
"type": "main",
"index": 0
}
]
]
},
"list containers": {
"main": [
[
{
"node": "send a message",
"type": "main",
"index": 0
}
]
]
},
"stack config": {
"main": [
[
{
"node": "get stack list",
"type": "main",
"index": 0
}
]
]
},
"select stack by name": {
"main": [
[
{
"node": "stop stack",
"type": "main",
"index": 0
}
]
]
},
"list volumes": {
"main": [
[
{
"node": "filter paperless volumes",
"type": "main",
"index": 0
}
]
]
},
"filter paperless volumes": {
"main": [
[
{
"node": "delete volume",
"type": "main",
"index": 0
}
]
]
},
"delete volume": {
"main": [
[
{
"node": "wait 10 secs1",
"type": "main",
"index": 0
}
]
]
},
"wait 10 secs1": {
"main": [
[
{
"node": "restore auf docker volumes",
"type": "main",
"index": 0
}
]
]
},
"restore auf docker volumes": {
"main": [
[
{
"node": "wait 10 secs2",
"type": "main",
"index": 0
}
]
]
},
"wait 10 secs2": {
"main": [
[
{
"node": "start stack",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "stack config",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "e450aa82-3ea8-426f-a7ec-700efcc9caa8",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "3cc6c4256e2bbdec1b3708c49dc3889c7266357f3e239651c157c2de760e6c65"
},
"id": "OcvLZ6BURSXpKgaP",
"tags": [
{
"name": "Paperless-ngx",
"id": "2gKReVMDIhJ1ungJ",
"updatedAt": "2025-12-27T15:20:11.288Z",
"createdAt": "2025-12-27T15:20:11.288Z"
},
{
"updatedAt": "2025-12-20T20:16:34.199Z",
"createdAt": "2025-12-20T20:16:34.199Z",
"id": "RCWZE5pB9KsORMxb",
"name": "Office Automation"
}
]
}