Migration Guide
Introduction
This guide explains how to migrate your Relution data from one object storage backend to another. Common scenarios include:
- Migrating from MinIO to SeaweedFS (MinIO is no longer maintained)
- Moving from cloud provider to self-hosted (or vice versa)
- Switching cloud providers
The examples below demonstrate a migration from MinIO to SeaweedFS, but the steps can be adapted for any S3-compatible source and destination.
Overview
The migration process consists of four steps:
- Set up the new storage backend
- Copy data from old to new storage
- Update Relution configuration
- Remove the old backend
Prerequisites
- Access to both storage backends simultaneously
- The
rclonecommand-line tool (installation guide) - Credentials for both storage backends
Step 1: Set Up the New Backend
If migrating to SeaweedFS, follow our SeaweedFS Setup Guide first, but do not start Relution yet.
Ensure both old and new storage backends are running:
docker compose up -d minio seaweedfs
Step 2: Configure rclone
The rclone tool provides a fast and reliable way to copy data between S3-compatible backends.
Install rclone
Follow the instructions at rclone.org/install for your operating system.
Create Remote Configurations
Run the configuration wizard:
rclone config
Configure the source (MinIO):
- Type
nfor new remote - Name:
source - Storage type: Select
s3 - Provider: Select
Minio(orOtherfor generic S3) - Enter your access key and secret key
- Endpoint:
http://localhost:9000 - Accept defaults for remaining options
- Confirm with
y
Configure the destination (SeaweedFS):
- Type
nfor new remote - Name:
dest - Storage type: Select
s3 - Provider: Select
Other - Enter your new access key and secret key
- Endpoint:
http://localhost:8333 - Accept defaults for remaining options
- Confirm with
y
Type q to exit the configuration.
Verify Port Access
Ensure the S3 API ports are exposed on your host. Check your compose.yml:
minio:
ports:
- "9000:9000" # S3 API - must be accessible
- "9001:9001" # Web console
# ...
seaweedfs:
ports:
- "8333:8333" # S3 API - must be accessible
- "23646:23646" # Web console
Step 3: Copy the Data
Verify Relution is stopped to prevent data changes during migration:
docker compose ps # Should show storage backends, but NOT relutionStart the transfer:
rclone copy source:relution dest:relution --progressWait for completion. Transfer time depends on the amount of data in your bucket.
Verify the transfer:
rclone check source:relution dest:relutionExpected output:
0 differences found
Step 4: Update Relution Configuration
Update your Relution configuration to point to the new backend. You’ll need to change:
| Setting | Old Value | New Value |
|---|---|---|
| Endpoint | http://minio:9000 | http://seaweedfs:8333 |
| Access Key | Old key | New key |
| Secret Key | Old secret | New secret |
See Configure Relution for detailed instructions on where to make these changes.
Step 5: Verify and Clean Up
Start Relution:
docker compose up -d relutionVerify functionality: Log into Relution and confirm that apps and resources load correctly.
Remove the old backend (only after thorough verification):
docker compose down minio # Stop the old serviceClean up configuration: Remove the old service from your
compose.yml.Delete old data: Remove the old storage volume or directory (e.g.,
./volumes/minio/data).Clean up rclone: Optionally remove the rclone configuration:
rclone config delete source rclone config delete dest
Troubleshooting
Connection Refused / Timeout
Ensure the S3 API ports are exposed and not blocked by a firewall or network segmentation. Test connectivity:
curl http://localhost:8333 # Should return an S3 error
Access Denied / 401 / 403
Verify your credentials are correct and the user has access to the bucket.
Missing Files After Migration
Re-run the verification:
rclone check source:relution dest:relution
If differences are found, run rclone copy again; it will only transfer missing files.