Last validated: February 28, 2026 | Node.js v22 | Seerr v3.1.0
This guide provides a proven, step-by-step walkthrough to migrate from the deprecated Overseerr to its active fork Seerr within a Proxmox LXC environment.
⚠️ Prerequisites- 🔍 Step 0: Check for Automated Update
- 🛠 Step 1: Prepare the LXC
- ⚙️ Step 2: System Setup
- 📦 Step 3: Migration & Data Transfer
- 🏗️ Step 4: Build from Source
- ⚖️ Step 5: Finalize Permissions
- 🚀 Step 6: Service Configuration
- 🏁 Step 7: Post-Migration Steps
- 🔄 Maintenance & Updates
The build process for Seerr is resource-heavy. Before starting, ensure your LXC meets these requirements:
- Disk Space: Minimum 20GB free space is highly recommended. (Build fails with
ERR_PNPM_ENOSPCif space is insufficient). - RAM (Build Phase): Temporarily increase to 8GB (8192 MiB) if your host system allows it. Minimum 4GB + Swap is required to avoid "Out of Memory" errors.
- Node.js: Version 22.x is required.
Before performing a manual migration, check if your LXC helper script can handle the transition automatically.
- Open your LXC console.
- Run the following command:
update- If the update completes and your Overseerr has successfully changed to Seerr: Congratulations! You are done and do not need the rest of this guide.
- If the update fails, stays on the old Overseerr version, or the command is not found: Please proceed with Step 1 to perform the manual migration.
- Shutdown Old LXC: Power off your original Overseerr LXC (e.g., ID 106) to prevent IP and Tailscale conflicts.
- Clone or Backup: Create a clone of the offline LXC to a new ID (e.g., 115).
- Handle Bind Mounts: If cloning fails due to
mp0(mount points), you must edit the container's configuration file on the Proxmox Host (Node).- Path:
/etc/pve/lxc/106.conf - Action: Comment out the line starting with
mp0:(add a#at the beginning).
- Path:
- Adjust Resources: In Proxmox, increase Root Disk (min. 20GB), Memory (e.g., 8192 MiB), and Swap (e.g., 2048 MiB) based on your host's capacity.
- Start New LXC: Power on the new LXC (115).
# Install Node.js 22 and Build Essentials
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs build-essential git
# Install Pnpm globally
npm install -g pnpmcd /opt
mv overseerr overseerr_old
# Clone the repository and switch to stable main branch
git clone https://github.com/seerr-team/seerr.git overseerr
cd /opt/overseerr
git checkout main
# Copy your existing database and settings
cp -rp /opt/overseerr_old/config /opt/overseerr/cd /opt/overseerr
CYPRESS_INSTALL_BINARY=0 pnpm install --frozen-lockfile
# Adjust the max-old-space-size according to your assigned RAM (e.g., 4096 for 8GB RAM)
export NODE_OPTIONS="--max-old-space-size=4096"
# Run the build process
pnpm build# Set ownership (assuming root)
chown -R root:root /opt/overseerr
# Ensure config directory is writable
chmod -R 755 /opt/overseerr/config- Edit the service file:
nano /etc/systemd/system/overseerr.service - Update the content:
[Unit]
Description=Seerr Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/overseerr
ExecStart=/usr/bin/node dist/index.js
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target- Reload and start the service:
systemctl daemon-reload
systemctl enable overseerr
systemctl restart overseerr- Verify: Open
http://[LXC-IP]:5055in your browser. - Scale Down: Reduce LXC RAM back to its normal operating size (e.g., 2048 MiB).
- Prevent Auto-Start: Set old LXC (106) -> Options -> Start at boot to
No. - IP Reassignment: Assign the old static IP to the new LXC if desired.
- Restore Bind Mounts (mp0): To restore your media mount from the old container to the new one, run this command on the Proxmox Host shell:
# Copy the mount point line from ID 106 to ID 115 grep "mp0" /etc/pve/lxc/106.conf >> /etc/pve/lxc/115.conf
- Tailscale: Connection will resume. Keep the old LXC off.
- Cleanup: Once stable, you can remove old data:
rm -rf /opt/overseerr_old.
To update Seerr in the future, use this automation script. Note: Increase LXC RAM to 8GB before running!
- Create the script:
nano /opt/overseerr/update.sh - Paste the following content:
#!/bin/bash
# Path to your installation
APP_DIR="/opt/overseerr"
echo "--- Starting Seerr Update ---"
cd $APP_DIR || exit
# 1. Fetch latest stable code
echo "1/4: Pulling latest code from GitHub (Main Branch)..."
git fetch --all
git checkout main
git pull origin main
# 2. Install dependencies
echo "2/4: Installing dependencies..."
CYPRESS_INSTALL_BINARY=0 pnpm install --frozen-lockfile
# 3. Build the application
echo "3/4: Starting build process (High RAM required)..."
export NODE_OPTIONS="--max-old-space-size=4096"
pnpm build
# 4. Restart service
echo "4/4: Restarting service..."
systemctl restart overseerr
echo "--- Update to $(git describe --tags) successful! ---"- Make it executable and run it:
# Make the script executable
chmod +x /opt/overseerr/update.sh
# Run the update (Remember to increase RAM first!)
/opt/overseerr/update.sh