madiba-elate commited on
Commit
3709f6a
·
verified ·
1 Parent(s): d3d17c7

Update start.sh

Browse files
Files changed (1) hide show
  1. start.sh +24 -21
start.sh CHANGED
@@ -32,13 +32,11 @@ else
32
  echo "library.json introuvable, aucun média téléchargé automatiquement."
33
  fi
34
 
35
- # Permissions pour l'utilisateur jellyfin (UID 1000)
36
  chown -R 1000:1000 /data
37
 
38
- # Configuration de Jellyfin pour écouter sur le port 8096 en interne
39
  CONFIG_FILE="$CONFIG_DIR/config/system.xml"
40
  if [ ! -f "$CONFIG_FILE" ]; then
41
- echo "Création du fichier de configuration Jellyfin…"
42
  mkdir -p "$(dirname "$CONFIG_FILE")"
43
  cat > "$CONFIG_FILE" <<EOF
44
  <?xml version="1.0" encoding="utf-8"?>
@@ -54,8 +52,8 @@ EOF
54
  chown 1000:1000 "$CONFIG_FILE"
55
  fi
56
 
57
- # Lancement de Jellyfin en arrière‑plan (port 8096)
58
- echo "Démarrage de Jellyfin en arrière‑plan…"
59
  gosu 1000 /jellyfin/jellyfin \
60
  --webdir=/jellyfin/jellyfin-web \
61
  --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg \
@@ -64,21 +62,12 @@ gosu 1000 /jellyfin/jellyfin \
64
  --logdir="$LOG_DIR" \
65
  --service &
66
 
67
- # Attendre que Jellyfin soit prêt (maximum 60 secondes)
68
- echo "Attente de la disponibilité de Jellyfin…"
69
- for i in $(seq 1 30); do
70
- if curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8096/web/ | grep -q 200; then
71
- echo "Jellyfin est prêt."
72
- break
73
- fi
74
- sleep 2
75
- done
76
-
77
- # Proxy Python qui écoute sur le port 7860 et redirige vers localhost:8096
78
  echo "Lancement du proxy sur le port 7860 → 8096…"
79
  exec python3 -c "
80
  import http.server
81
  import urllib.request
 
82
 
83
  class Proxy(http.server.SimpleHTTPRequestHandler):
84
  def do_GET(self):
@@ -93,21 +82,35 @@ class Proxy(http.server.SimpleHTTPRequestHandler):
93
  self.proxy_request()
94
  def do_OPTIONS(self):
95
  self.proxy_request()
 
 
 
96
  def proxy_request(self):
97
  url = 'http://127.0.0.1:8096' + self.path
 
 
98
  try:
99
- data = self.rfile.read(int(self.headers.get('Content-Length', 0))) if self.command in ['POST', 'PUT'] else None
100
- req = urllib.request.Request(url, data=data, headers={k: v for k, v in self.headers.items()}, method=self.command)
101
  resp = urllib.request.urlopen(req)
102
  self.send_response(resp.status)
103
  for k, v in resp.getheaders():
104
  self.send_header(k, v)
105
  self.end_headers()
106
  self.wfile.write(resp.read())
107
- except Exception as e:
108
- self.send_error(502, str(e))
 
 
 
 
 
 
 
 
 
 
 
109
 
110
  server = http.server.HTTPServer(('0.0.0.0', 7860), Proxy)
111
- print('Proxy prêt, en écoute sur le port 7860')
112
  server.serve_forever()
113
  "
 
32
  echo "library.json introuvable, aucun média téléchargé automatiquement."
33
  fi
34
 
 
35
  chown -R 1000:1000 /data
36
 
37
+ # Configuration Jellyfin (port interne 8096)
38
  CONFIG_FILE="$CONFIG_DIR/config/system.xml"
39
  if [ ! -f "$CONFIG_FILE" ]; then
 
40
  mkdir -p "$(dirname "$CONFIG_FILE")"
41
  cat > "$CONFIG_FILE" <<EOF
42
  <?xml version="1.0" encoding="utf-8"?>
 
52
  chown 1000:1000 "$CONFIG_FILE"
53
  fi
54
 
55
+ # Lancement de Jellyfin en arrière‑plan
56
+ echo "Démarrage de Jellyfin…"
57
  gosu 1000 /jellyfin/jellyfin \
58
  --webdir=/jellyfin/jellyfin-web \
59
  --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg \
 
62
  --logdir="$LOG_DIR" \
63
  --service &
64
 
65
+ # Proxy Python : écoute immédiate, redémarre les requêtes vers Jellyfin dès qu’il est prêt
 
 
 
 
 
 
 
 
 
 
66
  echo "Lancement du proxy sur le port 7860 → 8096…"
67
  exec python3 -c "
68
  import http.server
69
  import urllib.request
70
+ import urllib.error
71
 
72
  class Proxy(http.server.SimpleHTTPRequestHandler):
73
  def do_GET(self):
 
82
  self.proxy_request()
83
  def do_OPTIONS(self):
84
  self.proxy_request()
85
+ def do_PATCH(self):
86
+ self.proxy_request()
87
+
88
  def proxy_request(self):
89
  url = 'http://127.0.0.1:8096' + self.path
90
+ data = self.rfile.read(int(self.headers.get('Content-Length', 0))) if self.command in ['POST', 'PUT', 'PATCH'] else None
91
+ req = urllib.request.Request(url, data=data, headers={k: v for k, v in self.headers.items()}, method=self.command)
92
  try:
 
 
93
  resp = urllib.request.urlopen(req)
94
  self.send_response(resp.status)
95
  for k, v in resp.getheaders():
96
  self.send_header(k, v)
97
  self.end_headers()
98
  self.wfile.write(resp.read())
99
+ except urllib.error.HTTPError as e:
100
+ # Transmettre le code d’erreur de Jellyfin tel quel (404, 500, etc.)
101
+ self.send_response(e.code)
102
+ for k, v in e.headers.items():
103
+ self.send_header(k, v)
104
+ self.end_headers()
105
+ self.wfile.write(e.read())
106
+ except Exception:
107
+ # En cas d’indisponibilité de Jellyfin, renvoyer un 503 avec un message temporaire
108
+ self.send_response(503)
109
+ self.send_header('Content-type', 'text/html; charset=utf-8')
110
+ self.end_headers()
111
+ self.wfile.write(b'<html><body><h1>Jellyfin demarre...</h1></body></html>')
112
 
113
  server = http.server.HTTPServer(('0.0.0.0', 7860), Proxy)
114
+ print('Proxy pret, en ecoute sur le port 7860')
115
  server.serve_forever()
116
  "