# Migrate from DigitalOcean App Platform to fortrabbit

Source: https://www.fortrabbit.com/migrate/from-digitalocean-app-platform
Published: 2026-10-31
Updated: 2026-10-31


## Migrate from DigitalOcean App Platform with a coding agent

Claude Code, Codex, Cursor and other coding agents can run this migration. Paste this prompt into the agent, in the project folder:



```txt
Read https://www.fortrabbit.com/agents.md and set up fortrabbit. Then move this site from DigitalOcean App Platform to fortrabbit, following https://www.fortrabbit.com/raw/migrate/from-digitalocean-app-platform.md
```

Sign-in happens in the browser, see [agent setup](/agents). The agent uses the `doctl` CLI to read the app spec and the database connection. The steps below are what the agent follows, and what to do by hand without one. The agent changes nothing on the old host: a person deletes the old setup once the site runs on fortrabbit.

## App Platform components and where they go

| On App Platform | On fortrabbit |
| -- | -- |
| Repository of the web service | Same repository, deployed by the [GitHub integration](https://docs.fortrabbit.com/platform/deployment/github-app) |
| App-level and component-level environment variables | [Environment variables](https://docs.fortrabbit.com/platform/settings/env-vars) |
| `build_command` | [Build commands](https://docs.fortrabbit.com/platform/deployment/build-commands) |
| `PRE_DEPLOY` and `POST_DEPLOY` jobs | [Post-deploy commands](https://docs.fortrabbit.com/platform/deployment/post-deploy-commands) |
| `SCHEDULED` jobs | [Cron jobs](https://docs.fortrabbit.com/platform/jobs/crons) |
| Worker components | [Workers](https://docs.fortrabbit.com/platform/jobs/workers) |
| Managed MySQL database | MySQL component |
| Spaces bucket | Keep the bucket, or the storage component |

## 1. Create the app

Create an app in the dashboard with the software template matching the CMS or framework. Its default domain works with HTTPS right away, so the whole move can be tested before DNS changes. Lower the TTL of the domain's DNS records now, see [migrate to fortrabbit](https://docs.fortrabbit.com/dev/how-to/migrate-to-fortrabbit).

## 2. Export the app spec

The app spec holds every component, command and variable. Download it under Settings → App Spec, or with doctl:



```shell
doctl apps spec get <app-id> --format yaml
```

- Copy every environment variable except the bindable database ones, such as `${db.DATABASE_URL}`, into the environment variables of the fortrabbit environment. Copy encrypted values from their source, such as a password manager.
- `build_command` goes into the build commands. `PRE_DEPLOY` and `POST_DEPLOY` jobs, such as `php artisan migrate --force`, go into the post-deploy commands.
- Each `SCHEDULED` job becomes a cron job. App Platform runs them every 15 minutes at the shortest. `php artisan schedule:run` needs a cron job every minute.
- Each worker component becomes a worker.

fortrabbit has no Redis. A Laravel app sets the queue, cache and session drivers to `database` or `file`, see [Laravel queues and scheduler](https://docs.fortrabbit.com/guides/laravel/queues-scheduler).

## 3. Deploy the code

Connect the same GitHub repository to the environment and push. A Dockerfile is not used on fortrabbit: the build commands replace it.

## 4. Move the database

Add the IP address of the machine running the dump to the trusted sources of the Managed Database, then dump it:



```shell
mysqldump -u doadmin -p -h <host> -P 25060 --single-transaction --set-gtid-purged=OFF <database> > dump.sql
```

Import the dump into the MySQL component as described under [MySQL export and import](https://docs.fortrabbit.com/platform/mysql/export-import). A PostgreSQL database needs converting to MySQL first, since fortrabbit runs MySQL only.

## 5. Move the files

App Platform has no persistent disk, so uploads live in a Spaces bucket. Keep the bucket and its credentials in the environment variables, or download it with an S3 client and push the files to the storage component with [rsync](https://docs.fortrabbit.com/dev/how-to/rsync).

## 6. Switch the DNS

Test the app on its default domain, add the custom domain to the environment and point the records to fortrabbit, see [external domain setup](https://docs.fortrabbit.com/platform/domains/external-domain-setup). Domains on DigitalOcean DNS change in the DigitalOcean control panel.

Once the app runs on fortrabbit, delete the app on App Platform, then the database cluster.

---

- [Migrate to fortrabbit](/dev/how-to/migrate-to-fortrabbit)
- [App Platform alternative](/alternatives/digitalocean-app-platform)
