Private
Public Access
Migration Workflow hinzugefügt
@@ -0,0 +1,153 @@
|
||||
# Migration Service
|
||||
|
||||
The Romexis Migration Service helps migrate an existing Romexis installation into the Docker-based Romexis Server stack.
|
||||
|
||||
It provides:
|
||||
|
||||
- Flask Web UI
|
||||
- REST API
|
||||
- temporary SFTP users
|
||||
- migration job state tracking
|
||||
- database backup upload
|
||||
- manifest creation
|
||||
- upload validation
|
||||
- restore orchestration
|
||||
- final completion/cancellation workflow
|
||||
|
||||
---
|
||||
|
||||
## Why a Migration Service?
|
||||
|
||||
Romexis installations can contain:
|
||||
|
||||
- large SQL Server backups
|
||||
- large image directories
|
||||
- ergo data directories
|
||||
- cache directories
|
||||
- many small files
|
||||
|
||||
Browser uploads alone are not ideal for this. Therefore the migration service combines:
|
||||
|
||||
```text
|
||||
Web UI / API
|
||||
for orchestration and state
|
||||
|
||||
SFTP
|
||||
for large file and directory transfer
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Migration Job State
|
||||
|
||||
Migration jobs are stored as JSON state files.
|
||||
|
||||
Typical workflow:
|
||||
|
||||
```text
|
||||
created
|
||||
-> database_uploaded
|
||||
-> database_restored
|
||||
-> upload_complete
|
||||
-> validated
|
||||
-> restored
|
||||
-> completed
|
||||
```
|
||||
|
||||
Final states:
|
||||
|
||||
```text
|
||||
completed
|
||||
cancelled
|
||||
failed
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## SFTP User Lifecycle
|
||||
|
||||
The service creates one temporary SFTP user per active migration.
|
||||
|
||||
Important behavior:
|
||||
|
||||
- active jobs recreate SFTP users on service startup
|
||||
- completed jobs should not recreate SFTP users
|
||||
- cancelled jobs should not recreate SFTP users
|
||||
- failed jobs should not recreate SFTP users unless intentionally reactivated
|
||||
- completing or cancelling a job removes or disables the temporary SFTP access
|
||||
|
||||
---
|
||||
|
||||
## Manual Browser Workflow
|
||||
|
||||
1. Create migration job in the Web UI.
|
||||
2. Upload database backup through the browser.
|
||||
3. The service creates `manifest.json` automatically.
|
||||
4. Trigger database restore.
|
||||
5. Upload file directories through SFTP.
|
||||
6. Mark upload as complete.
|
||||
7. Validate upload.
|
||||
8. Run restore.
|
||||
9. Complete migration and remove SFTP access.
|
||||
|
||||
---
|
||||
|
||||
## SFTP Upload
|
||||
|
||||
The Web UI shows the SFTP credentials and example commands.
|
||||
|
||||
Typical rclone setup:
|
||||
|
||||
```bash
|
||||
rclone config create romexis-migration sftp \
|
||||
host <host> \
|
||||
port <port> \
|
||||
user <username> \
|
||||
pass "$(rclone obscure '<password>')"
|
||||
```
|
||||
|
||||
Upload images:
|
||||
|
||||
```bash
|
||||
rclone sync "/PATH/TO/LOCAL/romexis_images" \
|
||||
"romexis-migration:/romexis_images" \
|
||||
--progress \
|
||||
--transfers 4 \
|
||||
--checkers 8
|
||||
```
|
||||
|
||||
Upload ergo data:
|
||||
|
||||
```bash
|
||||
rclone sync "/PATH/TO/LOCAL/romexis_ergodata" \
|
||||
"romexis-migration:/romexis_ergodata" \
|
||||
--progress \
|
||||
--transfers 4 \
|
||||
--checkers 8
|
||||
```
|
||||
|
||||
Optional cache upload:
|
||||
|
||||
```bash
|
||||
rclone sync "/PATH/TO/LOCAL/romexis_cache" \
|
||||
"romexis-migration:/romexis_cache" \
|
||||
--progress \
|
||||
--transfers 4 \
|
||||
--checkers 8
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Restart Coordination
|
||||
|
||||
The migration service and Romexis container coordinate restarts using a shared state file:
|
||||
|
||||
```text
|
||||
/data/romexis_images/.romexis_restart_state
|
||||
```
|
||||
|
||||
The migration service writes a pending restart request.
|
||||
|
||||
The Romexis entrypoint/process observes the state, restarts the Romexis service and writes the result.
|
||||
|
||||
The migration service reads the result and removes the state file.
|
||||
Reference in New Issue
Block a user