Assume you have a Laravel application with a huge storage folder, which is directly on your server (local file storage). This document explains how to move the files from your current server to a new one, with minimal maintenance mode time.
Step 1: Zip storage folder
SSH into your server and zip your storage/app folder.
tar -cf storage-app.tar storage/app
The flagg c means a new tar archive will be created and -f means we want to specify the filename (which we did with storage.tar).
We intentionally did not use zip or gzip, because that would compress the storage file. At this step, we are only concerned about bundling it, because we may have a huge set of files here, and compressing could take ages, depending on your storage.
You can compress the .tar file afterwards if you have the need to do so:
Step 2: Transfer file:
scp mydata.tar.gz user@destination-server:/path/to/destination/
Step 3: Unzip at destination server
Now go to your new Laravel application. Untar like this:
tar -xf storage-app.tar
All files that already exists in /storage/app will be overwritten, if they existis in storage-app.tar
If you want to be warned about overwriting files, you may use
tar -xf /path/to/storage-app.tar --keep-old-files
Step 4: Set status at your current server at Maintenance
Move your current application to maintenance. If you have a public website and a dashboard, its probably enough to just disable the dashboard. The goal here is to avoid having new files in your storage folder.
Step 5: Resync remaining files
From the time you copied till you hit the maintenance mode, there may have been new files been received. To get them aswell, resync them using this command:
rsync -avz /path/to/your/website user@destination-server:/path/to/destination/
Step 6: Update DNS settings
Now change DNS settings, so that your new website will become eventually online.
A lot of hustle right? How about you use some external storage? If you had an external service for hosting your files, you would not need all of this.
I am not getting any money of this. So here are the two services that I found the cheapest for my use case:
Cloudflare is for free for the first 10 GB. Bunny starts with 0.1$ per month for the first 10 GB.