Zum Inhalt

Produktions-Deployment


Automatische Installation (empfohlen)

Das mitgelieferte install.sh richtet Ripster vollautomatisch auf Debian/Ubuntu ein – inklusive Node.js, MakeMKV, HandBrake, nginx und systemd-Dienst.

Unterstützte Systeme: Debian 11/12, Ubuntu 22.04/24.04 Voraussetzung: root-Rechte, Internetzugang

Schnellstart via curl

curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash

Oder mit wget:

wget -qO- https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash

Optionen nur via Datei

Beim Pipen von curl/wget können keine Argumente übergeben werden. Für benutzerdefinierte Optionen zuerst herunterladen und dann mit sudo bash install.sh [Optionen] ausführen.

Optionen

Option Standard Beschreibung
--branch <branch> main Git-Branch für die Installation
--dir <pfad> /opt/ripster Installationsverzeichnis
--user <benutzer> ripster Systembenutzer für den Dienst
--port <port> 3001 Backend-Port
--host <hostname> Auto (Maschinen-IP) Hostname/IP für die Weboberfläche
--no-makemkv MakeMKV-Installation überspringen
--no-handbrake HandBrake-Installation überspringen
--no-nginx nginx-Einrichtung überspringen
--reinstall Bestehende Installation aktualisieren (Daten bleiben erhalten)
-h, --help Hilfe anzeigen

Beispiele

# Standard-Installation
sudo bash install.sh

# Anderen Branch und Port verwenden
sudo bash install.sh --branch dev --port 8080

# Ohne MakeMKV (bereits installiert)
sudo bash install.sh --no-makemkv

# Bestehende Installation aktualisieren
sudo bash install.sh --reinstall

# Ohne nginx (eigener Reverse-Proxy)
sudo bash install.sh --no-nginx --host mein-server.local

Was das Skript erledigt

  1. Systemprüfung – OS-Erkennung und Root-Check
  2. Systempaketecurl, wget, git, mediainfo, udev u. a.
  3. Node.js 20 – via NodeSource, falls noch nicht installiert
  4. MakeMKV – aktuelle Version wird aus dem offiziellen Forum ermittelt und aus dem Quellcode kompiliert (kann mit --no-makemkv übersprungen werden)
  5. HandBrake – interaktive Auswahl:
    • Option 1: Standard (apt install handbrake-cli)
    • Option 2: Gebündelte GPU-Version mit NVDEC aus bin/HandBrakeCLI
  6. Systembenutzer ripster – ohne Login-Shell, Gruppen: cdrom, optical, disk, video, render
  7. Repository – klont Branch nach --dir (bei --reinstall: sichert DB, pullt, stellt DB wieder her)
  8. npm-Abhängigkeiten – Root, Backend (nur production), Frontend
  9. Frontend-Buildnpm run build mit relativen API-URLs (nginx-kompatibel)
  10. Backend .env – wird automatisch generiert (bei --reinstall bleibt bestehende erhalten)
  11. Berechtigungenripster:ripster auf Installationsverzeichnis, 600 auf .env
  12. systemd-Dienstripster-backend.service erstellt, aktiviert und gestartet
  13. nginx – konfiguriert als Reverse-Proxy für Frontend, /api/ und /ws (kann mit --no-nginx übersprungen werden)

Nach der Installation

# Status prüfen
sudo systemctl status ripster-backend

# Logs verfolgen
sudo journalctl -u ripster-backend -f

# Neustart
sudo systemctl restart ripster-backend

# Aktualisieren
sudo bash /opt/ripster/install.sh --reinstall

Zugriff: http://<Maschinen-IP> (oder der mit --host angegebene Hostname)

HandBrake-Modus (GPU/NVDEC)

Bei nicht-interaktiver Ausführung (Pipe von curl) wird automatisch die Standard-Version gewählt. Für die GPU-Version zuerst herunterladen:

curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh -o install.sh
sudo bash install.sh
# → Interaktive Auswahl: Option 2 für NVDEC

Das gebündelte Binary liegt unter bin/HandBrakeCLI und wird nach /usr/local/bin/HandBrakeCLI kopiert.


Manuelle Installation

Die folgenden Abschnitte beschreiben die einzelnen Schritte für manuelle oder angepasste Setups.

Empfohlene Architektur

Client
  -> nginx (Reverse Proxy + statisches Frontend)
    -> Backend API/WebSocket (Node.js, Port 3001)

Wichtig: Das Backend serviert im aktuellen Stand keine frontend/dist-Dateien automatisch.


1) Frontend builden

cd frontend
npm install
npm run build

Artefakte liegen in frontend/dist/.


2) Backend als systemd-Service

Beispiel /etc/systemd/system/ripster-backend.service:

[Unit]
Description=Ripster Backend
After=network.target

[Service]
Type=simple
User=ripster
WorkingDirectory=/opt/ripster/backend
ExecStart=/usr/bin/env node src/index.js
Restart=on-failure
RestartSec=5
Environment=NODE_ENV=production
Environment=PORT=3001
Environment=LOG_LEVEL=info

[Install]
WantedBy=multi-user.target

Aktivieren:

sudo systemctl daemon-reload
sudo systemctl enable --now ripster-backend
sudo systemctl status ripster-backend

3) nginx konfigurieren

Beispiel /etc/nginx/sites-available/ripster:

server {
    listen 80;
    server_name ripster.local;

    root /opt/ripster/frontend/dist;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /ws {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

Aktivieren:

sudo ln -s /etc/nginx/sites-available/ripster /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Datenbank-Backup

sqlite3 /opt/ripster/backend/data/ripster.db \
  ".backup '/var/backups/ripster-$(date +%Y%m%d).db'"

Sicherheit

  • Ripster hat keine eingebaute Authentifizierung.
  • Für externen Zugriff mindestens Basic Auth + TLS + Netzwerksegmentierung/VPN einsetzen.
  • Secrets nicht ins Repo committen (.env, Settings-Felder).