Migrate from RunCloud to fortrabbit
Published
Updated
🛠️
From RunCloud to fortrabbit.
How to move a Laravel, WordPress or other PHP web app from a server managed with RunCloud to a fortrabbit app. The code moves through Git, the settings by hand, the database as a dump, the uploads with rsync.
Migrate from RunCloud 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:
Read https://www.fortrabbit.com/agents.md and set up fortrabbit. Then move this site from RunCloud to fortrabbit, following https://www.fortrabbit.com/raw/migrate/from-runcloud.md
Sign-in happens in the browser, see agent setup. The agent needs SSH access to the RunCloud server to read the settings, 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.
RunCloud settings and where they go
| On RunCloud | On fortrabbit |
|---|---|
/home/<user>/webapps/<app> | Git repository, deployed by the GitHub integration |
.env editor of the web app | Environment variables |
| Git deployment script | Build commands and post-deploy commands |
| Cron Jobs | Cron jobs |
| Supervisor jobs | Workers |
| MySQL on the server | MySQL component |
| Uploads in the web app directory | Storage component, files copied with rsync |
1. Create the app
Create an app in the dashboard with the software template matching the 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.
2. Copy the settings off RunCloud
Log in over SSH as the system user that owns the web app, such as runcloud.
- Open the
.envin the RunCloud dashboard or in the web app directory. Copy every value exceptDB_*,APP_URL,REDIS_*,QUEUE_CONNECTION,CACHE_STORE(orCACHE_DRIVER) andSESSION_DRIVERinto the environment variables of the fortrabbit environment. - Open the deployment script of the Git deployment.
composer installandnpm run buildgo into the build commands, migrations and cache commands into the post-deploy commands. - Open Cron Jobs. Each entry becomes one cron job.
- Open the Supervisor jobs. Each queue worker 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.
3. Deploy the code
Connect the GitHub repository RunCloud deploys from to the environment and push. The first deployment runs the build commands.
4. Move the database
Dump the database over SSH with the credentials from the .env:
mysqldump -u <user> -p <database> > dump.sql
Import the dump into the MySQL component as described under MySQL export and import.
5. Copy the uploads
Find the upload folder in the web app directory, such as storage/app/public for Laravel or wp-content/uploads for WordPress. Pull it to the local machine with rsync, then push it to the environment, see rsync.
6. Switch the DNS
Test the app on its default domain, add the custom domain to the environment and point the records at the domain provider to fortrabbit, see external domain setup. RunCloud hosts no DNS: its DNS Manager edits records in a connected Cloudflare account, so change them there.
What stays on the RunCloud server
- Custom Nginx config in
/etc/nginx-rc/extra.d/. fortrabbit runs Apache, so rewrites move into .htaccess. - Root-level software, system packages and daemons outside the app. fortrabbit has no root shell, see limits.
Once the site runs on fortrabbit, delete the web app in RunCloud. Delete the server at the cloud provider when no other web app runs on it.