# Migrate from DigitalOcean Droplets to fortrabbit

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


## Migrate from a DigitalOcean Droplet 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 a DigitalOcean Droplet to fortrabbit, following https://www.fortrabbit.com/raw/migrate/from-digitalocean-droplets.md
```

Sign-in happens in the browser, see [agent setup](/agents). The agent needs SSH access to the Droplet to find the setup, dump the database and copy the uploads. 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.

## Droplet setup and where it goes

A Droplet is a plain Linux server, so every setup differs. The table names the usual places.

| On the Droplet | On fortrabbit |
| -- | -- |
| Web root, often under `/var/www` | Git repository, deployed by the [GitHub integration](https://docs.fortrabbit.com/platform/deployment/github-app) |
| `.env` or config files | [Environment variables](https://docs.fortrabbit.com/platform/settings/env-vars) |
| Deploy script or manual `git pull` | [Build commands](https://docs.fortrabbit.com/platform/deployment/build-commands) and [post-deploy commands](https://docs.fortrabbit.com/platform/deployment/post-deploy-commands) |
| `crontab -l`, `/etc/cron.d` | [Cron jobs](https://docs.fortrabbit.com/platform/jobs/crons) |
| Supervisor or systemd services | [Workers](https://docs.fortrabbit.com/platform/jobs/workers) |
| MySQL on the Droplet or a Managed Database | MySQL component |
| Uploads on disk | Storage component, files copied with rsync |

## 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. Find the setup

Log in over SSH. The web server config names the web root: look in `/etc/nginx/sites-enabled` or `/etc/apache2/sites-enabled`. Then collect:

- The `.env` or config file. Copy every value except the database credentials and the app URL into the environment variables of the fortrabbit environment.
- The crontab of the web user and `/etc/cron.d`. Each entry becomes one cron job.
- Supervisor programs in `/etc/supervisor/conf.d` or systemd units for queue workers. Each becomes a worker.
- The PHP version and extensions, with `php -v` and `php -m`. Set the same PHP version on fortrabbit.

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 GitHub repository to the environment and push. Code that is not in Git yet goes into a new repository first, without uploads, `vendor` and credentials.

## 4. Move the database

Dump MySQL on the Droplet with mysqldump. For a DigitalOcean Managed Database, add the IP address of the machine running the dump to its trusted sources, then:



```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).

## 5. Copy the uploads

Pull the upload folder to the local machine with rsync, then push it to the environment, see [rsync](https://docs.fortrabbit.com/dev/how-to/rsync). Files on DigitalOcean Spaces stay where they are: keep the bucket credentials in the environment variables.

## 6. Switch the DNS

Domains on DigitalOcean DNS keep working there: change the records in the DigitalOcean control panel. 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).

## What stays on the Droplet

- Custom Nginx rules. fortrabbit runs Apache, so rewrites move into [.htaccess](https://docs.fortrabbit.com/dev/htaccess/redirects).
- Root-level software and services next to the app, such as Redis, Elasticsearch or a mail server. fortrabbit has no root shell, see [limits](https://docs.fortrabbit.com/platform/concepts/limits).

Once the site runs on fortrabbit, take a last snapshot and destroy the Droplet.

---

- [Migrate to fortrabbit](/dev/how-to/migrate-to-fortrabbit)
- [DigitalOcean alternative](/alternatives/digitalocean-droplets)
