Attempted to restore Cloudron 9.0.12, receiving error when loading backup configuration and hitting Restore button
-
Description
I tried to run a dry-run restore of a Cloudron instance from 9.0.12 to a fresh 9.0.12. I receive this error:
Error put object cloudron-testfile. code: undefined message: Expected closing tag 'hr' (opened in line 5, col 1) instead of closing tag 'body'.:6:1 Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object. HTTP: 403Steps to reproduce
Download backup file from old Cloudron, upload to new Cloudron on Restore page. Set access keys / secrets, and encryption password, and click on the Restore button.
Logs
2025-11-22T17:43:50.056Z box:server ========================================== 2025-11-22T17:43:50.056Z box:server Cloudron 9.0.12 2025-11-22T17:43:50.056Z box:server ========================================== 2025-11-22T17:43:50.056Z box:platform initialize: start platform 2025-11-22T17:43:50.057Z box:tasks stopAllTasks: 0 tasks are running. sending abort signal 2025-11-22T17:43:50.057Z box:shell tasks: /usr/bin/sudo --non-interactive /home/yellowtent/box/src/scripts/stoptask.sh all 2025-11-22T17:43:50.108Z box:locks releaseAll: all locks released 2025-11-22T17:43:50.111Z box:platform initialize: not activated. generating IP based redirection config 2025-11-22T17:43:50.112Z box:reverseproxy writeDefaultConfig: create new cert 2025-11-22T17:43:50.112Z box:shell reverseproxy: openssl req -x509 -newkey rsa:2048 -keyout /home/yellowtent/platformdata/nginx/cert/default.key -out /home/yellowtent/platformdata/nginx/cert/default.cert -days 800 -subj /CN=cloudron-2025-11-22T17:43:50.112Z -nodes 2025-11-22T17:43:50.245Z box:reverseproxy writeDefaultConfig: writing configs for endpoint "setup" 2025-11-22T17:43:50.246Z box:shell reverseproxy: /usr/bin/sudo --non-interactive /home/yellowtent/box/src/scripts/restartservice.sh nginx 2025-11-22T17:43:50.274Z box:notifications add: cloudronInstalled Cloudron v9.0.12 installed 2025-11-22T17:43:50.330Z box:proxyAuth start: generating new token secret 2025-11-22T17:43:51.292Z box:box Received SIGTERM. Shutting down. 2025-11-22T17:43:51.292Z box:platform uninitializing platform 2025-11-22T17:43:51.293Z box:tasks stopAllTasks: 0 tasks are running. sending abort signal 2025-11-22T17:43:51.293Z box:shell tasks: /usr/bin/sudo --non-interactive /home/yellowtent/box/src/scripts/stoptask.sh all 2025-11-22T17:43:51.319Z box:database pool closed 2025-11-22T17:43:53.320Z box:box Shutdown complete 2025-11-22T17:44:24.061Z box:server ========================================== 2025-11-22T17:44:24.062Z box:server Cloudron 9.0.12 2025-11-22T17:44:24.062Z box:server ========================================== 2025-11-22T17:44:24.062Z box:platform initialize: start platform 2025-11-22T17:44:24.063Z box:tasks stopAllTasks: 0 tasks are running. sending abort signal 2025-11-22T17:44:24.063Z box:shell tasks: /usr/bin/sudo --non-interactive /home/yellowtent/box/src/scripts/stoptask.sh all 2025-11-22T17:44:24.128Z box:locks releaseAll: all locks released 2025-11-22T17:44:24.136Z box:platform initialize: not activated. generating IP based redirection config 2025-11-22T17:44:24.139Z box:reverseproxy writeDefaultConfig: writing configs for endpoint "setup" 2025-11-22T17:44:24.140Z box:shell reverseproxy: /usr/bin/sudo --non-interactive /home/yellowtent/box/src/scripts/restartservice.sh nginx 2025-11-22T17:44:44.508Z box:network/generic getIP: querying https://ipv4.api.cloudron.io/api/v1/helper/public_ip to get ipv4 2025-11-22T17:44:44.612Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T17:44:44.733Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T17:45:25.575Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T17:45:25.583Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T17:45:25.679Z box:shell system: lsblk --paths --bytes --json --list --fs --output +rota,fsused,fsavail 2025-11-22T17:56:24.449Z box:network/generic getIP: querying https://ipv4.api.cloudron.io/api/v1/helper/public_ip to get ipv4 2025-11-22T17:56:24.526Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T17:56:24.540Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T17:56:26.156Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T17:56:26.164Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T17:56:26.263Z box:shell system: lsblk --paths --bytes --json --list --fs --output +rota,fsused,fsavail 2025-11-22T18:26:11.498Z box:server no such route: PROPFIND / 2025-11-22T18:37:57.532Z box:network/generic getIP: querying https://ipv4.api.cloudron.io/api/v1/helper/public_ip to get ipv4 2025-11-22T18:37:57.611Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T18:37:57.641Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T18:37:57.754Z box:shell system: lsblk --paths --bytes --json --list --fs --output +rota,fsused,fsavail 2025-11-22T18:46:47.731Z box:network/generic getIP: querying https://ipv4.api.cloudron.io/api/v1/helper/public_ip to get ipv4 2025-11-22T18:46:47.807Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T18:46:47.839Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T18:46:47.941Z box:shell system: lsblk --paths --bytes --json --list --fs --output +rota,fsused,fsavail 2025-11-22T18:57:34.995Z box:backups add: validating new storage configuration 2025-11-22T18:57:35.228Z box:provision restore: error. BoxError: Error put object cloudron-testfile. code: undefined message: Expected closing tag 'hr' (opened in line 5, col 1) instead of closing tag 'body'.:6:1 Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object. HTTP: 403 at Object.verifyConfig (/home/yellowtent/box/src/storage/s3.js:648:25) at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async Object.createPseudo (/home/yellowtent/box/src/backupsites.js:586:29) at async Object.restore (/home/yellowtent/box/src/provision.js:251:28) { reason: 'External Error', details: {} } 2025-11-22T18:58:09.073Z box:backups add: validating new storage configuration 2025-11-22T18:58:09.097Z box:provision restore: error. BoxError: Error put object cloudron-testfile. code: undefined message: Expected closing tag 'hr' (opened in line 5, col 1) instead of closing tag 'body'.:6:1 Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object. HTTP: 403 at Object.verifyConfig (/home/yellowtent/box/src/storage/s3.js:648:25) at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async Object.createPseudo (/home/yellowtent/box/src/backupsites.js:586:29) at async Object.restore (/home/yellowtent/box/src/provision.js:251:28) { reason: 'External Error', details: {} } 2025-11-22T18:58:26.014Z box:network/generic getIP: querying https://ipv4.api.cloudron.io/api/v1/helper/public_ip to get ipv4 2025-11-22T18:58:26.093Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T18:58:26.125Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T18:58:26.224Z box:shell system: lsblk --paths --bytes --json --list --fs --output +rota,fsused,fsavail 2025-11-22T18:58:33.459Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T18:58:33.479Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T18:58:34.672Z box:network/generic getIP: querying https://ipv6.api.cloudron.io/api/v1/helper/public_ip to get ipv6 2025-11-22T18:58:34.680Z box:network/generic getIP: Error getting IP. connect ENETUNREACH 2604:a880:800:10::b66:f001:443 - Local (:::0) 2025-11-22T18:58:34.766Z box:shell system: lsblk --paths --bytes --json --list --fs --output +rota,fsused,fsavail 2025-11-22T18:59:10.993Z box:backups add: validating new storage configuration 2025-11-22T18:59:11.030Z box:provision restore: error. BoxError: Error put object cloudron-testfile. code: undefined message: Expected closing tag 'hr' (opened in line 5, col 1) instead of closing tag 'body'.:6:1 Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object. HTTP: 403 at Object.verifyConfig (/home/yellowtent/box/src/storage/s3.js:648:25) at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async Object.createPseudo (/home/yellowtent/box/src/backupsites.js:586:29) at async Object.restore (/home/yellowtent/box/src/provision.js:251:28) { reason: 'External Error', details: {} } 2025-11-22T19:02:00.947Z box:backups add: validating new storage configuration 2025-11-22T19:02:00.968Z box:provision restore: error. BoxError: Error put object cloudron-testfile. code: undefined message: Expected closing tag 'hr' (opened in line 5, col 1) instead of closing tag 'body'.:6:1 Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object. HTTP: 403 at Object.verifyConfig (/home/yellowtent/box/src/storage/s3.js:648:25) at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async Object.createPseudo (/home/yellowtent/box/src/backupsites.js:586:29) at async Object.restore (/home/yellowtent/box/src/provision.js:251:28) { reason: 'External Error', details: {} } -
Oh I fixed it. Embarrassingly, this was an issue on my side. I forgot I had added some IP allowlist to the iDrive e2 bucket which is what happened here. Once I added the new IP address, this all worked properly. Sorry about this. Hopefully this helps someone else in the future though.

I do think the error message should be improved here though, it's a bit cryptic as it is currently.
-
J james has marked this topic as solved
-
@d19dotca I tried to reproduce this but I couldn't figure where to set this IP allowlist in iDrive e2. Maybe it's only for paying customers since I am on the trial plan ?
Error put object cloudron-testfile. code: undefined message: Expected closing tag 'hr' (opened in line 5, col 1) instead of closing tag 'body'.:6:1 Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object. HTTP: 403
Going by the output it seems that the "block" made the endpoint respond with some html (possibly saying the access is blocked) ! The AWS S3 module expects xml responses.
-
@d19dotca I tried to reproduce this but I couldn't figure where to set this IP allowlist in iDrive e2. Maybe it's only for paying customers since I am on the trial plan ?
Error put object cloudron-testfile. code: undefined message: Expected closing tag 'hr' (opened in line 5, col 1) instead of closing tag 'body'.:6:1 Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object. HTTP: 403
Going by the output it seems that the "block" made the endpoint respond with some html (possibly saying the access is blocked) ! The AWS S3 module expects xml responses.
@girish said in Attempted to restore Cloudron 9.0.12, receiving error when loading backup configuration and hitting Restore button:
@d19dotca I tried to reproduce this but I couldn't figure where to set this IP allowlist in iDrive e2. Maybe it's only for paying customers since I am on the trial plan ?
Hi Girish. This link can help, assuming it isn’t gated to paying customers (I’m not sure if it is or not), but hopefully this provides some instructions for setting up an allowlist.
https://www.idrive.com/s3-storage-e2/faq-buckets#ip-allowlisting
I suspect you’re right though, that it is sending back a non-XML response to provide a response message that it’s forbidden from accessing it. I understand this use-case may be rare, but I think if there’s a way to improve that error handling, it may help others too because at first glance it’s really not clear where the issue could be coming from.