What Gets Migrated
The migration script transfers the following data from your V2 instance:- PostgreSQL database — Complete draftable database including all comparisons, user accounts, and settings
- Application files — All data stored in the /srv/draftable volume (config, data, fonts)
- License — Your existing product key is automatically activated in V3
What Gets Migrated
Prerequisites
Migration Overview
Step 1: Prepare V3 Configuration
Step 2: Start V3 on Alternate Ports
Step 3: Run Migration Script
Step 4: Validate Migration
Step 5: Switch to V3
Cleanup
Troubleshooting
Prerequisites
Software Requirements
- Docker Engine: Version 20.10 or higher
- Docker Compose V2: Must use docker compose command (not legacy docker-compose)
- Bash shell: Linux/macOS native
- Windows: Use WSL2 (recommended), Git Bash, or Cygwin
Note: If you are not using Docker as part of your existing deployment, you may need to configure a V3 container from the ground up, as this migration process only supports Docker.
Hardware Requirements
- Storage: At least 2× your current V2 data size in free disk space
- Memory: 8 GB RAM minimum (same as V2 requirements)
Verify Your Environment
Run these commands to confirm your setup meets the requirements:Required Files
Before proceeding, ensure you have:- V3 Docker Compose file —Can be found here: https://github.com/draftable/apish/tree/v3
- V3 .env file — Sample file can be found here: https://github.com/draftable/apish/tree/v3
- Migration script (migrate-data.sh) — Can be found here: https://github.com/draftable/apish/tree/v3/v3_migration
Migration Overview
The migration follows a side-by-side approach:Start V3 instance on alternate ports and on the same server/machine as your V2 instance (V2 continues running normally)
Note: Your V2 instance remains fully operational throughout the migration process until you explicitly switch over.
Step 1: Prepare V3 Configuration
Create or update your .env file for the V3 deployment:Step 2: Start V3 on Alternate Ports
Launch the V3 instance on custom ports to avoid conflicts with your running V2 instance. Ensure that containers are running on the same machine:<http://localhost:3080\> before proceeding.
Step 3: Run Migration Script
Execute the migration script, providing paths to both your V2 and V3 compose files:What the Script Does
The migration script performs these operations automatically:- Export V2 database — Uses pg_dump to create a complete export of the draftable database
- Import to V3 — Loads the database dump into V3’s PostgreSQL service
- Copy application files — Transfers config, data, and fonts directories from V2 volume to V3
- Apply schema updates — Runs Django migrations to update the database schema for V3
- Activate license — Re-activates your product key in the V3 instance
- Verify migration — Performs basic integrity checks
Migration Progress
The script provides timestamped output for each step:Step 4: Validate Migration
Before switching over, thoroughly test the V3 instance:Current State
At this point, you have two instances running:- V2: Running on default ports (https://localhost or your SERVER_DNS)
- V3: Running on http://localhost:3080
Note: localhost is in reference to the current domain/address of your container.
Validation Checklist
- [ ] Log in with existing administrator credentials
- [ ] Verify all existing comparisons are present and viewable
- [ ] Confirm application files (documents) are accessible
- [ ] Create a new test comparison to verify functionality
- [ ] Check license status in the admin portal
- [ ] Review any custom configurations or user accounts
Important:Do not proceed to the switchover step until you’ve confirmed V3 is working correctly with your migrated data.
Step 5: Switch to V3
Once validation is complete, switch V3 to production:<https://localhost\> or your configured SERVER_DNS.
Cleanup
After confirming V3 is stable in production:Remove Temporary Migration Files
Stop V2 Containers
Remove V2 Volumes (Optional)
Troubleshooting
Migration Script Fails to Find Containers
Error: Existing API instance not detected, are you sure it’s running on this machine? Ensure your V2 instance is running:Volume Not Found
Error: Old volume not found:<volume\_name>
The script auto-detects volumes from compose files. Verify your V2 instance has been started at least once and volumes exist: