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
txt

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 RunCloudOn fortrabbit
/home/<user>/webapps/<app>Git repository, deployed by the GitHub integration
.env editor of the web appEnvironment variables
Git deployment scriptBuild commands and post-deploy commands
Cron JobsCron jobs
Supervisor jobsWorkers
MySQL on the serverMySQL component
Uploads in the web app directoryStorage 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 .env in the RunCloud dashboard or in the web app directory. Copy every value except DB_*, APP_URL, REDIS_*, QUEUE_CONNECTION, CACHE_STORE (or CACHE_DRIVER) and SESSION_DRIVER into the environment variables of the fortrabbit environment.
  • Open the deployment script of the Git deployment. composer install and npm run build go 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
shell

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.