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