316 lines
10 KiB
Plaintext
316 lines
10 KiB
Plaintext
---
|
|
title: Migration guide
|
|
---
|
|
|
|
import Tabs from '@theme/Tabs';
|
|
import TabItem from '@theme/TabItem';
|
|
|
|
:::important
|
|
Read our [release announcement](/blog/seerr-release) to learn what Seerr means for Jellyseerr and Overseerr users.
|
|
:::
|
|
|
|
Whether you come from Overseerr or Jellyseerr, you don't need to perform any manual migration steps, your instance will automatically be migrated to Seerr.
|
|
This migration will run automatically the first time you start your instance using the Seerr codebase (Docker image or source build or Kubernetes, etc.).
|
|
An additional migration will happen for Overseerr users, to migrate their configuration to the new codebase.
|
|
|
|
:::danger
|
|
Before doing anything you should backup your existing instance so that you can rollback in case something goes wrong.
|
|
See [Backups](/using-seerr/backups) for details on how to properly backup your instance.
|
|
:::
|
|
|
|
:::warning
|
|
Installation methods are now divided into two categories: official and third-party methods.
|
|
The Seerr team is only responsible for official installation methods, while third-party methods are maintained by the community.
|
|
Some methods are currently not maintained, but this does not mean they are permanently discontinued. The community may restore and support them if they choose to do so.
|
|
|
|
- **Snap package:** Not maintained
|
|
:::
|
|
|
|
## Docker
|
|
Refer to [Seerr Docker Documentation](/getting-started/docker), all of our examples have been updated to reflect the below change.
|
|
|
|
:::info
|
|
Seerr provides a secure, fully featured image with everything you need included.
|
|
We sincerely appreciate the past contributions from third-party maintainers, which helped enhance this image and its capabilities.
|
|
To maintain consistency and security, we encourage everyone to use the features available in the official Seerr image.
|
|
If you feel something is missing, please submit a feature request—your feedback is always welcome!
|
|
|
|
Our Docker images are available with the following tags:
|
|
|
|
- `latest`: Always points to the most recent stable release.
|
|
- Version tags (e.g., `v3.0.0`): For specific stable versions.
|
|
- `develop`: Rolling release/nightly builds for using the latest changes (use with caution).
|
|
:::
|
|
|
|
Changes :
|
|
- Renamed all references from `overseerr` or `jellyseerr` to `seerr`.
|
|
- The container image reference has been updated.
|
|
- The container can now be run as a non-root user (`node` user); remove the `user` directive if you have configured it.
|
|
- The container no longer provides an init process, so you must configure it by adding `init: true` for Docker Compose or `--init` for the Docker CLI.
|
|
|
|
#### Config folder permissions
|
|
:::info
|
|
Since the container now runs as the `node` user (UID 1000), you must ensure your config folder has the correct permissions. The `node` user must have read and write access to the `/app/config` directory.
|
|
|
|
If you're migrating from a previous installation, you may need to update the ownership of your config folder:
|
|
```bash
|
|
docker run --rm -v /path/to/appdata/config:/data alpine chown -R 1000:1000 /data
|
|
```
|
|
|
|
This ensures the `node` user (UID 1000) owns the config directory and can read and write to it.
|
|
:::
|
|
|
|
### Unix
|
|
|
|
Summary of changes :
|
|
<Tabs groupId="docker-methods" queryString>
|
|
<TabItem value="docker-compose" label="Docker compose">
|
|
```yaml {3-6}
|
|
---
|
|
services:
|
|
seerr:
|
|
image: ghcr.io/seerr-team/seerr:latest
|
|
init: true
|
|
container_name: seerr
|
|
environment:
|
|
- LOG_LEVEL=debug
|
|
- TZ=Asia/Tashkent
|
|
- PORT=5055 #optional
|
|
ports:
|
|
- 5055:5055
|
|
volumes:
|
|
- /path/to/appdata/config:/app/config
|
|
healthcheck:
|
|
test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1
|
|
start_period: 20s
|
|
timeout: 3s
|
|
interval: 15s
|
|
retries: 3
|
|
restart: unless-stopped
|
|
```
|
|
</TabItem>
|
|
<TabItem value="docker-cli" label="Docker CLI">
|
|
```bash {2-3,10}
|
|
docker run -d \
|
|
--name seerr \
|
|
--init \
|
|
-e LOG_LEVEL=debug \
|
|
-e TZ=Asia/Tashkent \
|
|
-e PORT=5055 \
|
|
-p 5055:5055 \
|
|
-v /path/to/appdata/config:/app/config \
|
|
--restart unless-stopped \
|
|
ghcr.io/seerr-team/seerr:latest
|
|
```
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
### Windows
|
|
Summary of changes :
|
|
<Tabs groupId="docker-methods" queryString>
|
|
<TabItem value="docker-compose" label="Docker compose">
|
|
```yaml {3-6,13,23}
|
|
---
|
|
services:
|
|
seerr:
|
|
image: ghcr.io/seerr-team/seerr:latest
|
|
init: true
|
|
container_name: seerr
|
|
environment:
|
|
- LOG_LEVEL=debug
|
|
- TZ=Asia/Tashkent
|
|
ports:
|
|
- 5055:5055
|
|
volumes:
|
|
- seerr-data:/app/config
|
|
healthcheck:
|
|
test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1
|
|
start_period: 20s
|
|
timeout: 3s
|
|
interval: 15s
|
|
retries: 3
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
seerr-data:
|
|
external: true
|
|
```
|
|
</TabItem>
|
|
<TabItem value="docker-cli" label="Docker CLI">
|
|
```bash {2-3,8,10}
|
|
docker run -d \
|
|
--name seerr \
|
|
--init \
|
|
-e LOG_LEVEL=debug \
|
|
-e TZ=Asia/Tashkent \
|
|
-e PORT=5055 \
|
|
-p 5055:5055 \
|
|
-v seerr-data:/app/config \
|
|
--restart unless-stopped \
|
|
ghcr.io/seerr-team/seerr:latest
|
|
```
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
|
|
## Build From Source
|
|
Refer to [Seerr Build From Source Documentation](/getting-started/buildfromsource), all of our examples have been updated to reflect the below change.
|
|
|
|
Install from scratch by following the documentation, restore your data as described in [Backups](/using-seerr/backups), and then start Seerr. No additional steps are required.
|
|
|
|
## Kubernetes
|
|
Refer to [Seerr Kubernetes Documentation](/getting-started/kubernetes), all of our examples have been updated to reflect the below change.
|
|
|
|
Changes :
|
|
- All references to `jellyseerr` have been renamed to `seerr` in the manifests.
|
|
- The container image reference has been updated.
|
|
- The default `securityContext` and `podSecurityContext` have been updated to support running the container without root permissions.
|
|
|
|
Summary of changes :
|
|
<Tabs groupId="kubernetes-values" queryString>
|
|
<TabItem value="old" label="Old values">
|
|
```yaml
|
|
image:
|
|
repository: fallenbagel/jellyseerr
|
|
podSecurityContext: {}
|
|
securityContext: {}
|
|
```
|
|
</TabItem>
|
|
<TabItem value="new" label="New values">
|
|
```yaml
|
|
image:
|
|
repository: seerr-team/seerr
|
|
podSecurityContext:
|
|
fsGroup: 1000
|
|
fsGroupChangePolicy: OnRootMismatch
|
|
securityContext:
|
|
allowPrivilegeEscalation: false
|
|
capabilities:
|
|
drop:
|
|
- ALL
|
|
readOnlyRootFilesystem: false
|
|
runAsNonRoot: true
|
|
privileged: false
|
|
runAsUser: 1000
|
|
runAsGroup: 1000
|
|
seccompProfile:
|
|
type: RuntimeDefault
|
|
```
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
## Third-party installation methods
|
|
### Nix
|
|
|
|
Waiting for https://github.com/NixOS/nixpkgs/pull/450096 and https://github.com/NixOS/nixpkgs/pull/450093
|
|
|
|
### AUR
|
|
|
|
See https://aur.archlinux.org/packages/seerr
|
|
|
|
### TrueNAS
|
|
|
|
Refer to [Seerr TrueNAS Documentation](/getting-started/third-parties/truenas), all of our examples have been updated to reflect the below change.
|
|
|
|
<Tabs groupId="truenas-migration" queryString>
|
|
<TabItem value="hostpath" label="Host Path">
|
|
**This guide describes how to migrate from Host Path storage (not ixVolume).**
|
|
1. Stop Jellyseerr/Overseerr
|
|
2. Install Seerr and use the same Host Path storage that was used by Jellyseerr/Overseerr
|
|
3. Start Seerr app
|
|
4. Delete Jellyseerr/Overseerr app
|
|
</TabItem>
|
|
<TabItem value="ixvolume" label="ixVolume">
|
|
**This guide describes how to migrate from ixVolume storage (not Host Path).**
|
|
1. Stop Jellyseerr/Overseerr
|
|
2. Create a dataset for Seerr
|
|
If your apps normally store data under something like:
|
|
```
|
|
/mnt/storage/<app-name>
|
|
```
|
|
then create a dataset named:
|
|
```
|
|
storage/seerr
|
|
```
|
|
resulting in:
|
|
```
|
|
/mnt/storage/seerr
|
|
```
|
|
3. Copy ixVolume Data
|
|
Open System Settings → Shell, or SSH into your TrueNAS server as root and run :
|
|
```bash
|
|
rsync -av /mnt/.ix-apps/app_mounts/jellyseerr/ /mnt/storage/seerr/
|
|
```
|
|
4. Install Seerr and use the same Host Path storage that was created before (`/mnt/storage/seerr/config` in our example)
|
|
5. Start Seerr app
|
|
6. Delete Jellyseerr/Overseerr app
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
### Unraid
|
|
|
|
Refer to [Seerr Unraid Documentation](/getting-started/third-parties/unraid), all of our examples have been updated to reflect the below change.
|
|
|
|
Seerr will automatically migrate your existing Overseerr or Jellyseerr data on first startup. No manual database migration is needed.
|
|
|
|
1. Stop and remove the old Overseerr (or Jellyseerr) container from the Unraid **Docker** tab. Click the container icon, then **Stop**, then **Remove**. **⚠️ Do not delete the appdata folder ⚠️**
|
|
|
|
2. Back up your existing appdata folder:
|
|
```bash
|
|
cp -a /mnt/user/appdata/overseerr /mnt/user/appdata/overseerr-backup
|
|
```
|
|
|
|
3. Fix config folder permissions — Seerr runs as the `node` user (UID 1000) instead of root:
|
|
```bash
|
|
chown -R 1000:1000 /mnt/user/appdata/overseerr
|
|
```
|
|
For Jellyseerr users, replace `overseerr` with `jellyseerr` in the path above.
|
|
|
|
4. Add a new container in the Unraid **Docker** tab. Click **Add Container** and fill in the following:
|
|
|
|
| Field | Value |
|
|
|---|---|
|
|
| **Name** | `seerr` |
|
|
| **Repository** | `ghcr.io/seerr-team/seerr:latest` |
|
|
| **Registry URL** (optional) | `https://ghcr.io` |
|
|
| **Icon URL** | `https://raw.githubusercontent.com/seerr-team/seerr/develop/public/android-chrome-512x512.png` |
|
|
| **WebUI** | `http://[IP]:[PORT:5055]` |
|
|
| **Extra Parameters** | `--init` |
|
|
| **Network Type** | `bridge` |
|
|
| **Privileged** | `Off` |
|
|
|
|
Then click **Add another Path, Port, Variable** to add:
|
|
|
|
**Port:**
|
|
| Field | Value |
|
|
|---|---|
|
|
| Container Port | `5055` |
|
|
| Host Port | `5055` |
|
|
| Connection Type | `TCP` |
|
|
|
|
**Path** — point this to your existing config folder:
|
|
| Field | Value |
|
|
|---|---|
|
|
| Container Path | `/app/config` |
|
|
| Host Path | `/mnt/user/appdata/overseerr` |
|
|
|
|
For Jellyseerr users, use `/mnt/user/appdata/jellyseerr`.
|
|
|
|
**Variable:**
|
|
| Field | Value |
|
|
|---|---|
|
|
| Key | `TZ` |
|
|
| Value | Your [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) (e.g., `America/New_York`) |
|
|
|
|
**Variable (optional):**
|
|
| Field | Value |
|
|
|---|---|
|
|
| Key | `LOG_LEVEL` |
|
|
| Value | `info` |
|
|
|
|
5. Click **Apply** to start the container. Check the container logs to confirm the automatic migration completed successfully.
|
|
|
|
:::tip
|
|
If you are using a reverse proxy (such as SWAG or Nginx Proxy Manager), update your proxy configuration to point to the new container name `seerr`. The default port remains `5055`.
|
|
:::
|