Files
homelab-n8n/workflows/paperless-ngx/Paperless Sync_ 192.168.2.94 docker-prod.json

540 lines
14 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"name": "Paperless Sync: 192.168.2.94 docker-prod",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-208,
0
],
"id": "bec01fe8-0669-4a97-8d24-8a64e5ba9e27",
"name": "When clicking Execute workflow"
},
{
"parameters": {
"url": "https://192.168.2.94: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": "1b967026-4fea-4e46-8e56-a9187665b445",
"name": "get stack list",
"credentials": {
"httpHeaderAuth": {
"id": "WoXk7wT9xl4CdXWx",
"name": "portainer-api 192.168.2.94"
}
}
},
{
"parameters": {
"method": "POST",
"url": "=https://192.168.2.94: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": "623797dc-08de-4afd-8273-09003b8a2b88",
"name": "stop stack",
"credentials": {
"httpBasicAuth": {
"id": "iJkXePPAceSyENTx",
"name": "CMI CAN Bus local"
},
"httpHeaderAuth": {
"id": "WoXk7wT9xl4CdXWx",
"name": "portainer-api 192.168.2.94"
}
}
},
{
"parameters": {
"amount": 10
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
912,
0
],
"id": "6906b359-67b5-4859-8950-160240eb10f0",
"name": "wait 10 secs",
"webhookId": "6453ed08-d462-4b7b-a67d-ae20f7344824"
},
{
"parameters": {
"method": "POST",
"url": "=https://192.168.2.94: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": "3b3174c8-37b3-4ed0-aeb1-228815493df7",
"name": "start stack",
"executeOnce": true,
"credentials": {
"httpBasicAuth": {
"id": "iJkXePPAceSyENTx",
"name": "CMI CAN Bus local"
},
"httpHeaderAuth": {
"id": "WoXk7wT9xl4CdXWx",
"name": "portainer-api 192.168.2.94"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"url": "https://192.168.2.94: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": "991a2178-603b-4889-a50d-1b33e1909460",
"name": "list containers",
"credentials": {
"httpHeaderAuth": {
"id": "WoXk7wT9xl4CdXWx",
"name": "portainer-api 192.168.2.94"
}
}
},
{
"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": "69deb8f4-353e-4b37-8da8-ebf8bd5f8f82",
"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": "0a0648af-b75f-4cae-8624-534b27a51246",
"name": "select stack by name"
},
{
"parameters": {
"url": "={{ 'https://192.168.2.94: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": "f4bdf391-2dcc-42ae-a6a3-5a60d6a8c6ed",
"name": "list volumes",
"credentials": {
"httpHeaderAuth": {
"id": "WoXk7wT9xl4CdXWx",
"name": "portainer-api 192.168.2.94"
}
}
},
{
"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": "919a3b70-e545-45f6-9780-7a4fdd45d08d",
"name": "filter paperless volumes"
},
{
"parameters": {
"method": "DELETE",
"url": "=https://192.168.2.94: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": "6a02e938-ce11-4948-ae5c-fbf64617700a",
"name": "delete volume",
"alwaysOutputData": true,
"credentials": {
"httpHeaderAuth": {
"id": "WoXk7wT9xl4CdXWx",
"name": "portainer-api 192.168.2.94"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"amount": 10
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
16,
224
],
"id": "0ae959f1-c10a-4201-928d-0c95a0909573",
"name": "wait 10 secs1",
"webhookId": "ad3cb65f-a426-419d-82cc-20a2d0371452"
},
{
"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_94.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": "6002f69d-5703-4f5e-9ee8-c43fc1922239",
"name": "restore auf docker volumes",
"executeOnce": true,
"credentials": {
"sshPassword": {
"id": "U7t5C8ojILO0e5FI",
"name": "SSH Password account 192.168.2.94"
}
}
},
{
"parameters": {
"amount": 10
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
464,
224
],
"id": "d09b9a74-f89d-46fa-b2e9-c93edb801859",
"name": "wait 10 secs2",
"webhookId": "69110676-7a21-460e-bf59-82f593d6de2d",
"executeOnce": true
},
{
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-208,
-160
],
"id": "75f8fe17-f37e-4fbb-84b2-2841c70e0af2",
"name": "Schedule Trigger"
},
{
"parameters": {
"chatId": "749279624",
"text": "Paperless-ngx auf 192.168.2.94 wurde aktualisiert.",
"additionalFields": {}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1136,
224
],
"id": "eee23f9f-4485-48db-bc71-f6b1731bce57",
"name": "send a message",
"webhookId": "5dbf1c11-6431-4576-a8ad-4f7855d335eb",
"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": "186ee1fc-a26d-4ae2-b34e-eaebde96b755",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "3cc6c4256e2bbdec1b3708c49dc3889c7266357f3e239651c157c2de760e6c65"
},
"id": "Kt55YxdiletY5q2q",
"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"
}
]
}