Skip to content
Back

Issue - Migration From Cloud > Self Hosted

  • 0
  • Self Hosted
  • Cloud
sarun1001
16 Sep, 2025, 10:58

Hi team,

I’m trying to migrate a few of my Appwrite projects from the cloud to a self-hosted instance. These projects are currently in “archive mode” due to the free plan limit of 2 projects. However, I’ve encountered several issues during the migration process:

When I enter the self-hosted endpoint URL in the Cloud Dashboard and go through: Create Migration → Select Organization → Create New Project, I receive the error:

Invalid region param: Value must be one of (default)

When I try: Create Migration → Select Organization → Existing Project, I get:

Couldn’t load resources. The API key required for the migration may no longer be valid or has expired. Please verify and start the migration again.

I would appreciate guidance on how to successfully migrate archived projects from the cloud to a self-hosted Appwrite instance. Are there any workarounds for projects in archive mode or steps I might be missing to refresh the API key?

Thanks in advance for any help!

TL;DR
Developers trying to migrate from cloud to self-hosted Appwrite instance face issues with authentication methods, inconsistent maximum size values, and poor logging on failed migrations. An improvement suggestion is to add an "override everything" option. The migration process doesn't recreate objects with existing names. Updating environment default values may resolve size discrepancies. A specific error message is needed for document/entity failures. Migrations between different versions might cause errors. For archived projects, API key issues may arise. Diagnose errors by ensuring API key validity and matching version numbers between instances.
sarun1001
16 Sep, 2025, 20:30

Hi, can anyone help?

ideclon
18 Sep, 2025, 22:03

I think this is probably because the Project is archived. But even if it weren't, Migrations are only officially supported between instances of the same version - and since Cloud is currently on v1.8.0, but the latest Self-hosted release is v1.7.4, you'll probably end up with other issues.

Konstantin
7 Nov, 2025, 19:14

What if i have the same issue? create droplet in DO update to 1.8.0 version but still can't migrate from cloud 1.8.0. "The API key required for the migration may no longer be valid or has expired. Please verify and start migration again." @Support How to diagnose real error?

Konstantin
8 Nov, 2025, 04:29

and the project is not achieved. Just active instance on both sides.

Konstantin
8 Nov, 2025, 06:15

well i tried migration from selfhosted creating from import wizard - "resourceData": [], "errors": [ { "code": 400, "message": "Invalid maximumFileSize param: Value must be a valid range between 1 and 30,000,000" }, { "code": 404, "message": "Storage bucket with the requested ID could not be found." }, { "code": 404, "message": "Storage bucket with the requested ID could not be found." } ] } - now see errors that something already

Konstantin
8 Nov, 2025, 06:19

on my selfhosted instance - see env - _APP_STORAGE_LIMIT=30000000 _APP_STORAGE_PREVIEW_LIMIT=20000000

Konstantin
8 Nov, 2025, 06:33

ok. on cloud instance value for max size was 50mb on self-hosted 30mb. i think should be changed in env default values to 30mb or 50 everywhere. Now different errors

Database 1 Table 1 Columns 6

"status": "failed", "stage": "finished", "source": "Appwrite", "destination": "Appwrite", "resources": [ "user", "team", "membership", "database", "table", "column", "row", "function", "environment-variable", "deployment", "bucket", "file" ], "resourceId": "", "statusCounters": { "database": { "pending": 0, "success": 0, "error": 1, "skip": 0, "processing": 0, "warning": 0 }, "table": { "pending": 0, "success": 0, "error": 1, "skip": 0, "processing": 0, "warning": 0 }, "column": { "pending": 0, "success": 0, "error": 6, "skip": 0, "processing": 0, "warning": 0 }, "bucket": { "pending": 0, "success": 1, "error": 0, "skip": 0, "processing": 0, "warning": 0 }, "file": { "pending": 0, "success": 1, "error": 0, "skip": 0, "processing": 0, "warning": 0 } }, "resourceData": [], "errors": [ { "code": 23000, "message": "Document already exists" }, { "code": 23000, "message": "Document already exists" }, { "code": 0, "message": "Attribute already exists" }, { "code": 0, "message": "Attribute already exists" }, { "code": 0, "message": "Attribute already exists" }, { "code": 0, "message": "Attribute already exists" }, { "code": 0, "message": "Attribute already exists" }, { "code": 0, "message": "Attribute already exists" } ] }

Konstantin
8 Nov, 2025, 06:39

ok now i see table migration succeed even shows not success "status": "failed", "stage": "finished", "source": "Appwrite", "destination": "Appwrite", "resources": [ "user", "team", "membership", "database", "table", "column", "row", "function", "environment-variable", "deployment", "bucket", "file" ], "resourceId": "", "statusCounters": { "database": { "pending": 0, "success": 0, "error": 1, "skip": 0, "processing": 0, "warning": 0 }, "table": { "pending": 0, "success": 1, "error": 0, "skip": 0, "processing": 0, "warning": 0 }, "column": { "pending": 0, "success": 6, "error": 0, "skip": 0, "processing": 0, "warning": 0 }, "row": { "pending": 0, "success": 5, "error": 0, "skip": 0, "processing": 0, "warning": 0 }, "bucket": { "pending": 0, "success": 0, "error": 0, "skip": 1, "processing": 0, "warning": 0 }, "file": { "pending": 0, "success": 0, "error": 0, "skip": 1, "processing": 0, "warning": 0 } }, "resourceData": [], "errors": [ { "code": 23000, "message": "Document already exists" } ] } - what problem i see here there is no information about which document or entity failed migration (no name, no id). can be improved logining here

Konstantin
8 Nov, 2025, 06:55

in final (from cloud host migration can't work using export wizard, but import from self-hosted was working). I was using incognito browser mode to prevent browser extensions from negatively impacting the data migration process):

  1. Auth - Auth methods not migrated from cloud instance to self-hosted. Checkboxes have different stage on both sides
  2. on cloud instance value for max size was 50mb on self-hosted 30mb. i think should be changed in env default values to 30mb or 50 everywhere.
  3. Logging about object that failed migration can be extended. Because now from log you can's understand which object failed (db or bucket or something else - what name, what id object). Poor logining

Everything else on small data looks like working. Migration don't override objects just created what do not exist, but if both instances have same name of object will not be recreated but just failed in migration. i can see like improvement kinda checkbox "override everything" - like delete objects and created from migration instance but it more dangerous way let's say for a regular user

Reply

Reply to this thread by joining our Discord

Reply on Discord

Need support?

Join our Discord

Get community support by joining our Discord server.

Join Discord

Get premium support

Join Appwrite Pro and get email support from our team.

Learn more