initial commit with docker-compose file and default configs
This commit is contained in:
16
README.md
Normal file
16
README.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# 🎧 Mindboost Media Streaming Server (NGINX + Byte-Range)
|
||||||
|
|
||||||
|
Diese Anleitung beschreibt die Einrichtung eines NGINX-Servers zur effizienten Bereitstellung von Audioinhalten (MP3, OPUS), wie sie von der Mindboost-Plattform verwendet werden.
|
||||||
|
Die Konfiguration unterstützt **HTTP-Streaming über Byte-Range Requests**, was schnelle Ladezeiten und PWA-Kompatibilität sicherstellt.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1 · What you get
|
||||||
|
|
||||||
|
| Feature | Notes |
|
||||||
|
| ------------------------------- | -------------------------------------------------------------------- |
|
||||||
|
| 🔗 **Single-domain routing** | `https://b.mindboost.team/media/**` (no extra sub-domain quota). |
|
||||||
|
| 🚀 **Out-of-the-box streaming** | Correct `Content-Type` for `.opus`, `.ogg`, `.mp3`, `.flac`, `.wav`. |
|
||||||
|
| 🗄️ **Long-term browser cache** | `Cache-Control: public, max-age=2592000` (≈ 30 days) for audio. |
|
||||||
|
| 🔒 **HTTPS via Let’s Encrypt** | Handled by Traefik (`websecure` entrypoint). |
|
||||||
|
| 🐳 **One-command deployment** | `docker compose up -d`—and done. |
|
31
docker-compose.yml
Normal file
31
docker-compose.yml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
services:
|
||||||
|
media:
|
||||||
|
image: nginx:1.27-alpine
|
||||||
|
container_name: mindboost_media_nginx
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- ./nginx/html:/usr/share/nginx/html:ro
|
||||||
|
- ./nginx/conf.d:/etc/nginx/conf.d:ro
|
||||||
|
|
||||||
|
labels:
|
||||||
|
# ——— Traefik v2 path-based routing ———
|
||||||
|
- traefik.enable=true
|
||||||
|
|
||||||
|
# Route: https://b.mindboost.team/media (optionally with /anything/after/that)
|
||||||
|
- traefik.http.routers.media.rule=Host(`b.mindboost.team`) && PathPrefix(`/media`)
|
||||||
|
|
||||||
|
# Strip /media from the request *before* it reaches Nginx,
|
||||||
|
# so Nginx still serves /index.html, /css/site.css, etc.
|
||||||
|
- traefik.http.routers.media.middlewares=media-strip
|
||||||
|
- traefik.http.middlewares.media-strip.stripPrefix.prefixes=/media
|
||||||
|
|
||||||
|
# TLS via the proxy’s “websecure” entrypoint
|
||||||
|
- traefik.http.routers.media.entrypoints=websecure
|
||||||
|
- traefik.http.routers.media.tls.certresolver=letsencrypt
|
||||||
|
|
||||||
|
# Upstream container port
|
||||||
|
- traefik.http.services.media.loadbalancer.server.port=80
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- proxy
|
25
nginx/conf.d/default.conf
Normal file
25
nginx/conf.d/default.conf
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
# --- STATIC WEB UI -------------------------------------------------------
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- MEDIA FILES ---------------------------------------------------------
|
||||||
|
# Anything with audio-ish extension gets correct MIME + long-term caching.
|
||||||
|
location ~ \.(opus|ogg|mp3|flac|wav)$ {
|
||||||
|
# 30-day client cache, tweak at will
|
||||||
|
add_header Cache-Control "public, max-age=2592000" always;
|
||||||
|
|
||||||
|
# nginx:1.27 doesn’t know .opus by default → teach it:
|
||||||
|
types { audio/opus opus; }
|
||||||
|
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
nginx/html/index.html
Normal file
15
nginx/html/index.html
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Hello from b.mindboost.team 🎉</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>🚀 Nginx inside Docker – it works!</h1>
|
||||||
|
<p>
|
||||||
|
Edit
|
||||||
|
<code>nginx/html/index.html</code>
|
||||||
|
and re-deploy to see changes.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
Reference in New Issue
Block a user