Spaces:
Paused
Paused
Update start.sh
Browse files
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
|
| 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
|
| 58 |
-
echo "Démarrage de Jellyfin
|
| 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 |
-
#
|
| 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
|
| 108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
|
| 110 |
server = http.server.HTTPServer(('0.0.0.0', 7860), Proxy)
|
| 111 |
-
print('Proxy
|
| 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 |
"
|