Kiln
Log in Get started
New Whole-server migrations with one switch-over

Move every site on a Forge server. Keep every one online.

Kiln copies databases, files, .env, deploy scripts, nginx, PHP and firewall settings to a new server, converts each site to zero-downtime deploys, then moves your reserved IP. DNS never changes.

Start your first migration See how it works

New accounts start in demo mode, so you can click through a whole migration before connecting Forge.

kilnmigrate.com/migrations/42
web-01 → web-01-2026
3 sites · reserved IP moves at switch-over
Ready to switch
SiteDatabaseFilesDeploySmoke test
example.com copied 2.3 GB synced zero-downtime HTTP 200
staging.example.com copied 960 MB synced zero-downtime HTTP 200
shop.example.co.uk copied 410 MB synced zero-downtime HTTP 200
Old sites go into maintenance, data re-syncs, then traffic moves. Switch over all 3 sites
Built for Laravel Forge DigitalOcean Craft CMS Laravel Statamic

Everything a server move touches, moved together.

Old server web-01 Ubuntu 20.04 · PHP 8.3
Databases Asset folders .env files Deploy scripts Nginx rules PHP settings Firewall rules SSL certificates Reserved IP
New server web-01-2026 Ubuntu 26.04 · PHP 8.5

Four steps, one button that matters.

Nothing changes on your old server until you press Switch over.

  1. Step 01 Pick the old server Kiln reads every site, its .env, deploy script, nginx, PHP and firewall settings from Forge.
  2. Step 02 Review each site Tabs per site for the deploy script, .env, database, domains, files and nginx, with review tracking so nothing is missed.
  3. Step 03 Kiln builds the new server New droplet, databases, zero-downtime sites, copied data and assets, cloned SSL, then a deploy and a smoke test of every site.
  4. Step 04 Switch over Old sites go into maintenance, data re-syncs, and your reserved IP moves to the new server in seconds.
DEPLOY SCRIPTS

Old script in, zero-downtime script out.

Each site's Forge deploy script is rewritten for release-based deploys. You see the old one beside the new one, and every edit you make is kept so the converter keeps getting better.

How conversion works →
cd /home/forge/example.com
git pull origin $FORGE_SITE_BRANCH

$FORGE_COMPOSER install --no-dev

npm ci
npm run build

( flock -w 10 9 || exit 1
  sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock

$FORGE_PHP craft up
$CREATE_RELEASE()

cd $FORGE_RELEASE_DIRECTORY

$FORGE_COMPOSER install --no-dev

npm ci || npm install
npm run build

$FORGE_PHP craft up

$ACTIVATE_RELEASE()
$RESTART_QUEUES()
Whole servers

Move every site at once

One migration per server, one switch-over for all its sites. Leave a site behind and Kiln switches the rest by DNS instead.

Presets

PHP settings you set once

Load max_input_vars, memory limits and FPM pool sizes for Craft, Commerce or Laravel from a preset, then tweak per server.

Network

VPN-only stays VPN-only

Firewall rules and DigitalOcean cloud firewalls carry over, and Kiln opens a temporary SSH path only for the copy.

Security

Built to hold your keys

Required two-factor login, database passwords never written to Forge command history, and temporary access removed when you finish.

Plan your next server move in ten minutes.

Connect Forge, pick a server, review each site. Kiln does the rest.

Create an account View pricing