Files
silo-server/docs/continuum-to-silo-docker-migration.md
T

129 lines
3.7 KiB
Markdown

# Continuum to Silo Docker Migration
This guide is for admins who already run a Docker Compose based Continuum install
and want to switch that host to the Silo repository without rebuilding their
library from scratch.
## Best Practice
Treat the rename as a controlled cutover, not an in-place edit while the old app
is running:
1. Take a host snapshot or a PostgreSQL dump.
2. Run the migration helper in read-only `check` mode.
3. Fix `.env` until the check output matches the old deployment.
4. Run the cutover during a quiet window.
5. Verify health, readiness, media paths, users, and plugins before deleting any
old compatibility symlink or backup.
The migration helper is intentionally conservative. Its default mode is
read-only, and mutating modes require `--apply`.
## Prepare `.env`
From a Silo checkout:
```sh
cp .env.example .env
```
Set these values before migrating:
```dotenv
MEDIA_ROOT=/host/path/to/media
MEDIA_CONTAINER_ROOT=/old/container/path/to/media
SILO_DATA_ROOT=/opt/silo
POSTGRES_USER=continuum
POSTGRES_PASSWORD=continuum
POSTGRES_DB=continuum
```
`MEDIA_CONTAINER_ROOT` matters for existing installs. New Silo installs can use
`/mnt/media`, but migrated libraries may already store absolute paths from the
old container. Preserve the old in-container path here if existing library paths
use it.
If your old database used different PostgreSQL credentials, keep those exact
values. Do not switch to the Silo defaults unless you are starting with a fresh
database.
## Run The Preflight
```sh
scripts/migrate-continuum-docker.sh check
```
Common overrides:
```sh
CONTINUUM_DATA_ROOT=/srv/continuum \
SILO_DATA_ROOT=/srv/silo \
scripts/migrate-continuum-docker.sh check
```
If the old stack does not use obvious `continuum-*` container names, point the
script at the old compose file:
```sh
CONTINUUM_COMPOSE_FILE=/path/to/old/docker-compose.yml \
CONTINUUM_ENV_FILE=/path/to/old/.env \
scripts/migrate-continuum-docker.sh check
```
## Cut Over
After reviewing the preflight output:
```sh
sudo scripts/migrate-continuum-docker.sh migrate --apply
```
The migration mode:
- creates a `pg_dump` backup unless `--skip-db-dump` is provided
- stops the old Continuum compose stack or detected `continuum-*` containers
- moves `CONTINUUM_DATA_ROOT` to `SILO_DATA_ROOT`
- leaves a compatibility symlink from the old data root to the new one unless
`--no-compat-symlink` is provided
- starts the Silo compose stack
- updates plugin cache paths from `/var/lib/continuum/plugins` to
`/var/lib/silo/plugins`
- disables old `continuum.*` plugin installations and the old plugin catalog
Old Continuum plugin binaries are disabled because they may not be compatible
with the Silo plugin runtime. Install Silo-native plugin packages from the admin
UI after the server is healthy.
## Verify
```sh
docker compose ps
curl -fsS http://localhost:8090/api/v1/health
curl -fsS http://localhost:8090/api/v1/ready
docker compose logs --tail=200 silo
```
In the admin UI, verify:
- admin login works
- libraries point at paths visible inside the Silo container
- users and profiles are present
- metadata plugins are installed and provider chains are configured
- playback starts for at least one direct-play item and one transcode/remux item
## DB Fix Only
If you already moved data and started Silo manually, run just the compatibility
SQL against the current Silo compose stack:
```sh
scripts/migrate-continuum-docker.sh db-fix --apply
```
## Rollback
Prefer restoring the host snapshot. If no snapshot is available, stop Silo,
restore the PostgreSQL dump created under the migration backup directory, and
move the data root back to the old location. Keep the backup until you have
verified library scans, metadata refreshes, and playback under Silo.