Skip to content

Commit a0d0eb1

Browse files
mjonkusclaudeM0NsTeRRR
authored
docs: update Unraid install and migration guides with dual permission methods (#2532)
Co-authored-by: Mindaugas Jonkus <mjonkusgmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Ludovic Ortega <github@mail.adminafk.fr>
1 parent 7e9dff3 commit a0d0eb1

2 files changed

Lines changed: 157 additions & 110 deletions

File tree

docs/getting-started/third-parties/unraid.mdx

Lines changed: 141 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ description: Install Seerr using Unraid
44
sidebar_position: 3
55
---
66

7+
import Tabs from '@theme/Tabs';
8+
import TabItem from '@theme/TabItem';
9+
710
# Unraid
811

912
:::warning
@@ -14,76 +17,160 @@ Third-party installation methods are maintained by the community. The Seerr team
1417
This method is not recommended for most users. It is intended for advanced users who are using Unraid.
1518
:::
1619

20+
## Template installation
1721

18-
If an official Unraid Community Applications template for Seerr isn't available in your catalog, you can install Seerr manually using Unraid's Docker UI.
22+
Several templates from Unraid Community are available right now
23+
- [Unraid Community Apps](https://unraid.net/community/apps#community-apps-iframe)
1924

20-
## Fresh Installation
25+
In case you still want to do it manually, please follow the instructions below.
2126

22-
### 1. Create the config directory
27+
## Manual Installation
2328

24-
:::note
25-
Seerr is now rootless. Unraid typically runs Docker containers as `nobody:users` (UID 99, GID 100), but Seerr now runs internally as UID 1000, GID 1000. This creates a permission mismatch.
26-
:::
29+
Before proceeding, choose which installation method best suits your server:
2730

28-
:::info
29-
**If migrating**: Copy your existing Jellyseerr/Overseerr config files (e.g., from `/mnt/user/appdata/overseerr/` or `/mnt/user/appdata/jellyseerr`) to `/mnt/user/appdata/seerr`, then apply the permissions below
30-
:::
31+
**Seerr Default** (`UID 1000:1000`) — Runs with the container's native `node` user. Matches the official image, but may break SMB share access, trigger "Fix Common Problems" warnings, and cause issues with backup plugins (such as CA Appdata Backup) and network integrations (such as Tailscale).
3132

32-
Open the Unraid terminal and run:
33+
**Unraid Default** (`UID 99:100`) — Runs with Unraid's native `nobody:users` ownership. Follows Unraid best practices, but overrides Seerr's built-in rootless user and may cause compatibility issues with future Seerr updates.
3334

34-
```bash
35-
mkdir -p /mnt/user/appdata/seerr
36-
chown -R 1000:1000 /mnt/user/appdata/seerr
37-
```
35+
<Tabs groupId="unraid-permissions" queryString>
36+
<TabItem value="seerr-default" label="Seerr Default">
3837

39-
### 2. Add the Docker container
38+
### 1. Create the config directory
4039

41-
Navigate to the **Docker** tab in Unraid and click **Add Container**. Fill in the following:
40+
Open the Unraid terminal and run:
4241

43-
| Field | Value |
44-
|---|---|
45-
| **Name** | `seerr` |
46-
| **Repository** | `ghcr.io/seerr-team/seerr:latest` |
47-
| **Registry URL** (optional) | `https://ghcr.io` |
48-
| **Icon URL** | `https://raw.githubusercontent.com/seerr-team/seerr/develop/public/android-chrome-512x512.png` |
49-
| **WebUI** | `http://[IP]:[PORT:5055]` |
50-
| **Extra Parameters** | `--init` |
51-
| **Network Type** | `bridge` |
52-
| **Privileged** | `Off` |
42+
```bash
43+
mkdir -p /mnt/user/appdata/seerr
44+
```
5345

54-
Then click **Add another Path, Port, Variable** to add:
46+
### 2. Set folder permissions
5547

56-
**Port:**
57-
| Field | Value |
58-
|---|---|
59-
| Container Port | `5055` |
60-
| Host Port | `5055` |
61-
| Connection Type | `TCP` |
48+
```bash
49+
chown -R 1000:1000 /mnt/user/appdata/seerr
50+
```
6251

63-
**Path:**
64-
| Field | Value |
65-
|---|---|
66-
| Container Path | `/app/config` |
67-
| Host Path | `/mnt/user/appdata/seerr` |
52+
### 3. Add the Docker container
6853

69-
**Variable:**
70-
| Field | Value |
71-
|---|---|
72-
| Key | `TZ` |
73-
| Value | Your [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) (e.g., `America/New_York`) |
54+
:::warning
55+
The **Extra Parameters** field is critical. You **must** add `--init --restart=unless-stopped` (see table below). Without `--init`, the container will not handle signals properly or shut down cleanly. Without `--restart=unless-stopped`, the container will not automatically restart after a reboot.
7456

75-
**Variable (optional):**
76-
| Field | Value |
77-
|---|---|
78-
| Key | `LOG_LEVEL` |
79-
| Value | `info` |
57+
To see the **Extra Parameters** field, click **Basic View** in the top-right corner of the template page to switch to the advanced editor.
58+
:::
8059

81-
Click **Apply** to create and start the container.
60+
Navigate to the **Docker** tab in Unraid and click **Add Container**. Fill in the following:
8261

83-
### 3. Access Seerr
62+
| Field | Value |
63+
|---|---|
64+
| **Name** | `seerr` |
65+
| **Repository** | `ghcr.io/seerr-team/seerr:latest` |
66+
| **Icon URL** | `https://raw.githubusercontent.com/seerr-team/seerr/develop/public/android-chrome-512x512.png` |
67+
| **WebUI** | `http://[IP]:[PORT:5055]` |
68+
| **Extra Parameters** | `--init --restart=unless-stopped` |
69+
| **Network Type** | `bridge` |
70+
| **Privileged** | `Off` |
8471

85-
Open the WebUI at `http://<your-unraid-ip>:5055` and follow the setup wizard.
72+
Then click **Add another Path, Port, Variable** to add:
8673

87-
:::info
88-
The `--init` flag in **Extra Parameters** is required. Seerr does not include its own init process, so `--init` ensures proper signal handling and clean container shutdowns.
89-
:::
74+
**Port:**
75+
| Field | Value |
76+
|---|---|
77+
| Container Port | `5055` |
78+
| Host Port | `5055` |
79+
| Connection Type | `TCP` |
80+
81+
**Path:**
82+
| Field | Value |
83+
|---|---|
84+
| Container Path | `/app/config` |
85+
| Host Path | `/mnt/user/appdata/seerr` |
86+
87+
**Variable:**
88+
| Field | Value |
89+
|---|---|
90+
| Key | `TZ` |
91+
| Value | Your [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) (e.g., `America/New_York`) |
92+
93+
**Variable (optional):**
94+
| Field | Value |
95+
|---|---|
96+
| Key | `LOG_LEVEL` |
97+
| Value | `info` |
98+
99+
Click **Apply** to create and start the container.
100+
101+
### 4. Access Seerr
102+
103+
Open the WebUI at `http://<your-unraid-ip>:5055` and follow the setup wizard.
104+
105+
</TabItem>
106+
<TabItem value="unraid-default" label="Unraid Default">
107+
108+
### 1. Create the config directory
109+
110+
Open the Unraid terminal and run:
111+
112+
```bash
113+
mkdir -p /mnt/user/appdata/seerr
114+
```
115+
116+
### 2. Set folder permissions
117+
118+
```bash
119+
chown -R 99:100 /mnt/user/appdata/seerr
120+
```
121+
122+
### 3. Add the Docker container
123+
124+
:::warning
125+
The **Extra Parameters** field is critical. You **must** add `--init --restart=unless-stopped --user 99:100` (see table below). Without `--init`, the container will not handle signals properly or shut down cleanly. Without `--restart=unless-stopped`, the container will not automatically restart after a reboot. The `--user 99:100` parameter runs the container process with Unraid's default UID/GID and avoids permission errors accessing your shares without changing host folder ownership.
126+
127+
To see the **Extra Parameters** field, click **Basic View** in the top-right corner of the template page to switch to the advanced editor.
128+
:::
129+
130+
Navigate to the **Docker** tab in Unraid and click **Add Container**. Fill in the following:
131+
132+
| Field | Value |
133+
|---|---|
134+
| **Name** | `seerr` |
135+
| **Repository** | `ghcr.io/seerr-team/seerr:latest` |
136+
| **Icon URL** | `https://raw.githubusercontent.com/seerr-team/seerr/develop/public/android-chrome-512x512.png` |
137+
| **WebUI** | `http://[IP]:[PORT:5055]` |
138+
| **Extra Parameters** | `--init --restart=unless-stopped --user 99:100` |
139+
| **Network Type** | `bridge` |
140+
| **Privileged** | `Off` |
141+
142+
Then click **Add another Path, Port, Variable** to add:
143+
144+
**Port:**
145+
| Field | Value |
146+
|---|---|
147+
| Container Port | `5055` |
148+
| Host Port | `5055` |
149+
| Connection Type | `TCP` |
150+
151+
**Path:**
152+
| Field | Value |
153+
|---|---|
154+
| Container Path | `/app/config` |
155+
| Host Path | `/mnt/user/appdata/seerr` |
156+
157+
**Variable:**
158+
| Field | Value |
159+
|---|---|
160+
| Key | `TZ` |
161+
| Value | Your [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) (e.g., `America/New_York`) |
162+
163+
**Variable (optional):**
164+
| Field | Value |
165+
|---|---|
166+
| Key | `LOG_LEVEL` |
167+
| Value | `info` |
168+
169+
Click **Apply** to create and start the container.
170+
171+
### 4. Access Seerr
172+
173+
Open the WebUI at `http://<your-unraid-ip>:5055` and follow the setup wizard.
174+
175+
</TabItem>
176+
</Tabs>

docs/migration-guide.mdx

Lines changed: 16 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -258,63 +258,23 @@ Refer to [Seerr Unraid Documentation](/getting-started/third-parties/unraid), al
258258

259259
Seerr will automatically migrate your existing Overseerr or Jellyseerr data on first startup. No manual database migration is needed.
260260

261-
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 ⚠️**
261+
**1. Stop the existing container**
262+
In the Unraid **Docker** tab, stop your Overseerr (or Jellyseerr) container.
263+
**⚠️ Do not remove the container or delete the appdata folder yet ⚠️**
262264

263-
2. Back up your existing appdata folder:
265+
**2. Copy existing data to Seerr appdata**
266+
Open the Unraid terminal and copy your existing appdata folder into the new Seerr appdata directory:
264267
```bash
265-
cp -a /mnt/user/appdata/overseerr /mnt/user/appdata/overseerr-backup
268+
cp -a /mnt/user/appdata/overseerr /mnt/user/appdata/seerr
266269
```
267270

268-
3. Fix config folder permissions — Seerr runs as the `node` user (UID 1000) instead of root:
269-
```bash
270-
chown -R 1000:1000 /mnt/user/appdata/overseerr
271-
```
272-
For Jellyseerr users, replace `overseerr` with `jellyseerr` in the path above.
273-
274-
4. Add a new container in the Unraid **Docker** tab. Click **Add Container** and fill in the following:
275-
276-
| Field | Value |
277-
|---|---|
278-
| **Name** | `seerr` |
279-
| **Repository** | `ghcr.io/seerr-team/seerr:latest` |
280-
| **Registry URL** (optional) | `https://ghcr.io` |
281-
| **Icon URL** | `https://raw.githubusercontent.com/seerr-team/seerr/develop/public/android-chrome-512x512.png` |
282-
| **WebUI** | `http://[IP]:[PORT:5055]` |
283-
| **Extra Parameters** | `--init` |
284-
| **Network Type** | `bridge` |
285-
| **Privileged** | `Off` |
286-
287-
Then click **Add another Path, Port, Variable** to add:
288-
289-
**Port:**
290-
| Field | Value |
291-
|---|---|
292-
| Container Port | `5055` |
293-
| Host Port | `5055` |
294-
| Connection Type | `TCP` |
295-
296-
**Path** — point this to your existing config folder:
297-
| Field | Value |
298-
|---|---|
299-
| Container Path | `/app/config` |
300-
| Host Path | `/mnt/user/appdata/overseerr` |
301-
302-
For Jellyseerr users, use `/mnt/user/appdata/jellyseerr`.
303-
304-
**Variable:**
305-
| Field | Value |
306-
|---|---|
307-
| Key | `TZ` |
308-
| Value | Your [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) (e.g., `America/New_York`) |
309-
310-
**Variable (optional):**
311-
| Field | Value |
312-
|---|---|
313-
| Key | `LOG_LEVEL` |
314-
| Value | `info` |
315-
316-
5. Click **Apply** to start the container. Check the container logs to confirm the automatic migration completed successfully.
317-
318-
:::tip
319-
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`.
320-
:::
271+
*(For Jellyseerr users, replace `overseerr` with `jellyseerr` in the paths).*
272+
273+
**3. Set permissions and install Seerr**
274+
Follow the [Unraid Installation Guide](/getting-started/third-parties/unraid#2-set-folder-permissions), **starting from step 2** — this covers setting the correct folder permissions and adding the Docker container. The guide offers two permission methods (**Seerr Default** and **Unraid Default**), each with trade-offs — read the descriptions before choosing.
275+
276+
**4. Start the new Seerr app**
277+
Start the newly created Seerr container. Check the container logs to confirm the automatic migration completed successfully.
278+
279+
**5. Remove the old app**
280+
Once you have confirmed Seerr is working properly and your data has successfully migrated, you can safely **Remove** the old Overseerr (or Jellyseerr) container from Unraid.

0 commit comments

Comments
 (0)