initial commit with docker-compose file and default configs

This commit is contained in:
2025-07-16 18:01:56 +02:00
commit 1a53037968
4 changed files with 87 additions and 0 deletions

16
README.md Normal file
View 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 Lets Encrypt** | Handled by Traefik (`websecure` entrypoint). |
| 🐳 **One-command deployment** | `docker compose up -d`—and done. |

31
docker-compose.yml Normal file
View 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 proxys “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
View 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 doesnt know .opus by default → teach it:
types { audio/opus opus; }
try_files $uri =404;
}
}
}

15
nginx/html/index.html Normal file
View 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>