Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Stalker Portal Manager

tem_invictus

Power Elite User
Premium
Registriert
18. Februar 2017
Beiträge
2.002
Lösungen
3
Reaktionspunkte
1.997
Punkte
2.120

IPTV Stalker Portal Manager​


Der IPTV Stalker Portal Manager ist eine Webanwendung, mit der ihr mehrere Stalker-Portale zentral verwalten könnt.

Kurz gesagt:
  • Portale und MAC-Pools verwalten
  • MACs validieren und Kategorien abrufen
  • TV/VOD/Serien-Playlists generieren
  • Client-Stream-Anfragen über den kontrollierten MAC-Selector mit Q/B/R-Logik auflösen
  • Jobs, Logs, Systemstatus, Proxy Logs, Stalker Diagnostics und PostgreSQL-Diagnosen überwachen
  • Outbound-Proxys verwalten, testen und für Portal-Requests/Scanner/Playback verwenden

Installation mit Docker Compose​


Für den Start werden zwei Dateien im Projektordner benötigt:
  • docker-compose.yml
  • .env für Image, UID/GID, PostgreSQL und Start-Token

Voraussetzungen​


  • Docker ist installiert
  • Docker Compose ist verfügbar
  • Ihr seid nicht als root angemeldet

1. Projektordner erstellen​


Code:
mkdir portal-manager
cd portal-manager

2. UID und GID ermitteln​


Die Werte werden später in der .env eingetragen, damit Dateien im Docker-Volume mit dem richtigen Benutzer laufen.

Code:
id

Beispiel:

Code:
uid=1000(username) gid=1000(username)

3. docker-compose.yml erstellen​


Code:
nano docker-compose.yml

Inhalt einfügen:

Code:
name: portal-manager

services:
  postgres:
    image: postgres:18-alpine
    container_name: portal-manager-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-portal_manager}
      POSTGRES_USER: ${POSTGRES_USER:-portal_manager}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-portal_manager_change_me}
    volumes:
      - portal_manager_postgres:/var/lib/postgresql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\""]
      interval: 10s
      timeout: 5s
      retries: 10

  portal-manager:
    image: ${IMAGE_REPO}:${IMAGE_TAG}
    container_name: portal-manager
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    ports:
      - "8000:17880"
    env_file:
      - ./.env
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ:-UTC}
      DATABASE_URL: postgresql+psycopg://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}
    volumes:
      - portal_manager_data:/opt/app/backend/data
    healthcheck:
      test:
        [
          "CMD",
          "python",
          "-c",
          "from urllib.request import urlopen; urlopen('http://127.0.0.1:17880/health', timeout=5).close(); urlopen('http://127.0.0.1:8000/', timeout=5).close()",
        ]
      interval: 30s
      timeout: 5s
      start_period: 25s
      retries: 3

volumes:
  portal_manager_data:
  portal_manager_postgres:

4. .env im Projektordner erstellen​


Code:
nano .env

Anpassen:
  • PUID und PGID auf eure Werte aus id setzen
  • POSTGRES_PASSWORD vor produktiver Nutzung ändern
  • Beim ersten Start den einmaligen Admin-Einrichtungscode aus den Container-Logs kopieren

Code:
# Docker image
IMAGE_REPO=teminvictus/spm
IMAGE_TAG=latest

# Host user/group for mounted data permissions
PUID=!!!ERSETZEN!!!
PGID=!!!ERSETZEN!!!

# Optional timezone
TZ=UTC

# PostgreSQL settings
POSTGRES_DB=portal_manager
POSTGRES_USER=portal_manager
POSTGRES_PASSWORD=!!!ERSETZEN!!!

# Required app startup setting.
# Muss exakt dem Release-Token entsprechen.
STARTUP_SECRET=M9v2Qk7rL4cX8nP1tF6bH3wZ5yD0sJ2uR7aN4eC9

# Startup logging: compact or verbose
STARTUP_LOG_MODE=compact

Hinweis: Bei einer leeren Datenbank erzeugt der Container einen einmaligen Einrichtungscode. Dieser wird nach erfolgreicher Admin-Erstellung ungültig.

5. Container starten​


Code:
docker compose pull
docker compose up -d

Beim ersten Start werden die Images geladen, PostgreSQL gestartet und die Datenbank-Migrationen automatisch ausgeführt.

6. Status prüfen​


Code:
docker ps
docker logs -f portal-manager

7. Webinterface öffnen​


Im Browser öffnen:

Code:
http://<IP-Adresse>:8000

Beispiel lokal:

Code:
http://localhost:8000

Ersteinrichtung:
  • Einrichtungscode aus docker logs portal-manager eingeben
  • Admin-Benutzername und Passwort im Webinterface festlegen

Nach dem ersten Login am besten direkt Settings öffnen und dort Portal-Defaults, Proxy-Selector, Proxy Base URL, Worker-Jobs und Cleanup/Wartung einstellen.

Optionale erweiterte Einstellungen​


Die meisten Nutzer brauchen diese Werte nicht. Wenn ihr Session-, Cookie-, Maintenance- oder Worker-Werte bewusst überschreiben wollt, könnt ihr sie zusätzlich in dieselbe .env eintragen.

Code:
# Optional external Postgres override.
# Docker Compose setzt DATABASE_URL automatisch.
# DATABASE_URL=postgresql+psycopg://portal_manager:!!!ERSETZEN!!!@postgres:5432/portal_manager

# Sessions
SESSION_TTL_MINUTES=720
SESSION_COOKIE_NAME=pm_session
SESSION_COOKIE_SECURE=false
SESSION_COOKIE_DOMAIN=

# Maintenance
MAINTENANCE_ENABLED=true
MAINTENANCE_INTERVAL_MINUTES=60

# Worker
WORKER_JOB_TIMEOUT_SECONDS=1800
WORKER_HEARTBEAT_INTERVAL_SECONDS=10
WORKER_HEARTBEAT_STALE_SECONDS=30

Nützliche Befehle​


Logs anzeigen:
Code:
docker logs -f portal-manager

Update auf das aktuell konfigurierte Image:
Code:
docker compose pull
docker compose up -d

Stoppen:
Code:
docker compose down

Stoppen inklusive Datenbank-Volumes:
Code:
docker compose down -v

Achtung: docker compose down -v löscht die persistenten Docker-Volumes, inklusive PostgreSQL-Datenbank.
 
Zuletzt bearbeitet:
Also, Server läuft soweit, aber es kommt im Portal Menu unter "3. Select Categories" nichts an.
Muss dazu sagen, dass ich mich mit nginx bisher noch nicht beschäftigt habe. Finde keine nginx.conf auf den Server?
Folgende Ordner durchsucht: /usr/local/nginx/conf, /etc/nginx oder /usr/local/etc/nginx
Muss man die erst selber anlegen?
 
systemctl status nginx

Dann siehste, ob überhaupt installiert und damit Laufen.
 
Zuletzt bearbeitet:
Habe es noch nicht ausprobiert, aber laut script sollte die conf dort sein:
/etc/nginx/sites-available/iptv_proxy
 
@salidos
Ist installiert und läuft.
* nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-04-24 10:35:49 UTC; 1min 34s ago
Docs: man:nginx(8)
Process: 273 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 279 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 287 (nginx)
Tasks: 2 (limit: 18737)
Memory: 3.2M (peak: 3.4M)
CPU: 9ms
CGroup: /system.slice/nginx.service
|-287 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
`-289 "nginx: worker process"

Apr 24 10:35:49 invictus systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
Apr 24 10:35:49 invictus systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.

@seppfx
Nein, die fehlt unter /etc/nginx/sites-available/iptv_proxy und auch sonst auf dem Server nicht zu finden.
 
Komisch, bei mir ist sie da.
Sie müssen registriert sein, um angehängte Bilder zu sehen
 

Anhänge

Sie müssen registriert sein, um die Liste der Anhänge zu sehen
@remz , also "3. Select Categories" hat erstmal noch gar nichts mit nginx zu tun. nginx kommt erst ins spiel, wenn du Kanäle aufrufen willst.
Das Portal funktioniert aber?

Hast du "4. Configure Nginx Proxy" ausgeführt?
 
Habe es noch mal neu in einer VM aufgesetzt.
Wenn du den Stalker Portal Manager von dir meinst, ja.
Bleibe aber bei 3. Select Categories hängen, liest da nichts ein.
Habe da jetzt schon einige Portale getestet, immer die gleichen Fehlermeldungen.
Unter /var/www/stalker/von mir angegebenes Portal sind macs.txt, config, macs_info.txt vorhanden, bekomme aber immer Fehlermeldungen (siehe Spoiler).
An den Portal oder macs die eingetragen habe kann es nicht liegen, da diese in andere Manager wie von salidos oder xtreammulti laufen.

4. Configure Nginx Proxy ja, habe ich.

Sie müssen registriert sein, um angehängte Bilder zu sehen

Sie müssen registriert sein, um angehängte Bilder zu sehen

Sie müssen registriert sein, um angehängte Bilder zu sehen
 

Anhänge

Sie müssen registriert sein, um die Liste der Anhänge zu sehen
Zuletzt bearbeitet:
Also die Software bekommt kein Handshake mit dem Server hin, somit können die Kategorien nicht abgerufen werden.
Wenn du magst, schick mir mal das Portal und ein paar MACs, dann schaue ich mal.

Oder probier mal selber eine andere MAC. Für das abrufen der Kategorien wird immer die eine genommen, die man bei den Portal Daten einträgt.
 
Update auf 1.1
  • kleine Anpassung an den Scripten
  • "7. Check MACs" kann man jetzt auswählen, ob "All MACs" oder "Only new MACs". Bei "Only new MACs", werden nur MACs geprüft, die vorher noch nicht geprüft worden sind. Sprich, wenn man neue MACs hinzufügt müssen nicht alle alten noch mal den Check durchlaufen.
 
UPDATE auf 1.2
  • hatte den check nach Doppelten MACs beim hinzufügen neuer MACs kaputt gemacht in der letzten Version. fixed
  • außerdem hatte ich auch die Anzeige der MAC Adressen im Portal Menu zerstört. fixed

Zum Update könnt ihr einfach die Daten überschreiben. Wichtig nur die Daten aus "/var/www/stalker" nicht löschen und im Script Ordner, "portals.list" und "proxy_server.conf" nicht löschen.
 
Zuletzt bearbeitet:
UPDATE auf 1.3
  • Skripte laufen jetzt größtenteils ohne "sudo" Rechte, was die Sache sicherer macht. Um dies zu erreichen, wird der User zur Gruppe www-data hinzugefügt. Das wird durch das main.sh Script beim Start gecheckt.
 
ich wollte das mal testen auf einem Pi3 mit ubuntu
immer wenn ich ein Portal erstelle kriege ich eine Fehlermeldung "Fehler beim schreiben o.ä."
muss ich das als Root ausführen?
 
Eigentlich fragt das Script, wenn es sudo Rechte braucht. Aber probier doch mal "sudo ./main.sh" und berichte mal bitte.
 
Zurück
Oben
📱
Forum App auf dein Handy
Schneller. Push-Benachrichtigungen. Offline-fähig.
Öffnen