Solutions
Device management
Remotely manage, and protect laptops and mobile devices.
Orchestration
Automate tasks across devices, from app installs to scripts.
Software management
Inventory, patch, and manage installed software.
Infrastructure as code
See every change, undo any error, repeat every success.
Extend Fleet
Integrate your favorite tools with Fleet.
More
Device management
Remotely manage, and protect laptops and mobile devices.
Orchestration
Automate tasks across devices, from app installs to scripts.
Software management
Inventory, patch, and manage installed software.
Infrastructure as code
See every change, undo any error, repeat every success.
Extend Fleet
Integrate your favorite tools with Fleet.
Kitzy
Kitzy
This guide covers migrating your Fleet server from one deployment to another. Every environment is different, so this guide focuses on the essential steps rather than trying to cover every possible scenario.
Before starting the migration, take time to prepare:
FLEET_SERVER_PRIVATE_KEY. This is critical - you must use the exact same FLEET_SERVER_PRIVATE_KEY value on the new instance. This key encrypts sensitive data in your database (passwords, API keys, MDM credentials). Without the same key, Fleet cannot decrypt this data and features like MDM, integrations, and automations will fail. Find this value in your current Fleet configuration (environment variables, config file, or AWS Secrets Manager).Before migrating the database, shut down all Fleet instances to prevent data corruption during the migration.
Make sure all Fleet instances are completely stopped before proceeding.
Create a backup of your Fleet database using mysqldump:
mysqldump -u fleet_user -p --single-transaction fleet > fleet_backup.sqlThe --single-transaction flag ensures a consistent backup without locking tables.
Verify your backup file exists and has content:
ls -lh fleet_backup.sqlOn your new server or deployment:
FLEET_SERVER_PRIVATE_KEY with the exact same value from your original instance. This is critical - without this key, Fleet cannot decrypt sensitive data stored in the database.Don't start Fleet yet - you'll import the database first.
Transfer your backup file to the new server, then import it:
mysql -u fleet_user -p fleet < fleet_backup.sqlThis creates all the necessary tables and imports your data.
If you're using S3 for software installers, carves, or other file storage, add your S3 credentials to the new Fleet instance configuration.
Your S3 bucket and its contents don't need to be migrated - just point the new instance to the same bucket by configuring these environment variables:
FLEET_S3_BUCKET=your-bucket-name
FLEET_S3_REGION=us-east-1
FLEET_S3_ACCESS_KEY_ID=your-access-key
FLEET_S3_SECRET_ACCESS_KEY=your-secret-keyStart the Fleet server on your new deployment.
Check that Fleet started successfully:
curl -k https://your-fleet-server-ip-address:8080/healthzUpdate your DNS records to point to the new Fleet instance. This is the critical step that switches traffic from the old server to the new one.
If you lowered your DNS TTL earlier, the change should propagate within that time window. Hosts will start connecting to the new server as their cached DNS entries expire.
If you're using a load balancer, update the backend pool to point to the new instance instead of updating DNS directly.
After DNS propagates:
Once the migration is stable and all hosts have reconnected, you can raise your DNS TTL back to its previous value.
Redis doesn't need migration. Redis stores ephemeral data (live query results, short-term caches), so you don't need to migrate Redis data. The new instance can start with a fresh Redis.
Secrets are in the database. Your API tokens, enroll secrets, and other configuration are stored in MySQL, so they'll carry over automatically. However, sensitive data is encrypted using FLEET_SERVER_PRIVATE_KEY, so you must use the same key on the new instance to decrypt this data.
Consider using MySQL replication. If you're using MySQL replication, you can set up a replica on the new deployment before migrating. When you're ready, promote the replica to primary and point Fleet to it. This can significantly reduce downtime.
Hosts aren't checking in
Hosts will reconnect as their DNS cache expires, which depends on your DNS TTL setting. If you didn't lower the TTL before migration and it's set to a high value (like 24 hours), hosts may take up to that long to start connecting to the new server.
If hosts still aren't reconnecting after the TTL period has passed:
dig or nslookup to check the DNS recordDatabase connection errors
If Fleet can't connect to the database:
mysql command-line clientCan't access the Fleet UI
If you can't access the web interface:
systemctl status fleet or check Docker container status)MDM features or integrations not working
If MDM enrollment fails, automations don't work, or you see decryption errors in the logs:
FLEET_SERVER_PRIVATE_KEY from your original Fleet server