AudioMuse-AI ist ein Open-Source-Tool zum Selbsthosting, das mithilfe von Klanganalysen vergessene Songs in Ihrer Musikbibliothek wiederentdeckt und Groove-orientierte Wiedergabelisten erstellt, die auch die Bedeutung hinter jedem Titel erfassen, ohne dabei auf Metadaten oder externe APIs zurückzugreifen.
Sie können es lokal mit Docker Compose oder Podman ausführen, es in großem Maßstab in einem Kubernetes-Cluster bereitstellen (AMD64 und ARM64 werden unterstützt) oder native Anwendungen für macOS, Windows und Linux nutzen. Es lässt sich in die wichtigsten selbst gehosteten Musikserver integrieren, darunter Navidrome, Jellyfin, LMS, Lyrion, Emby und Plex, wobei weitere Integrationen geplant sind.
0. Grundvoraussetzungen
- Docker & Docker Compose v2 (Debian / Ubuntu)
- Traefik ab v3.6 mit CrowdSec installieren und konfigurieren
1. Ordner anlegen
Lege zuerst einen Ordner mit einem Unterorder an.
mkdir -p /opt/containers/audiomuse-ai
2. Docker Compose anlegen
Nun legen wir die eigentliche Docker Datei an. Diese dient dazu unseren späteren Container zu erstellen.
services:
# PostgreSQL database service
postgres:
image: postgres:15-alpine
container_name: audiomuse-postgres
environment:
TZ: "${TZ:-UTC}"
POSTGRES_USER: ${POSTGRES_USER:-audiomuse}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-audiomusepassword}
POSTGRES_DB: "audiomusedb"
ports:
- "${POSTGRES_PORT:-5432}:5432" # Expose PostgreSQL port to the host
volumes:
- postgres-data:/var/lib/postgresql/data # Persistent storage for PostgreSQL data
restart: unless-stopped
networks:
- default
# AudioMuse-AI Flask application service
audiomuse-ai-flask:
image: ghcr.io/neptunehub/audiomuse-ai:latest # Reflects deployment.yaml
container_name: audiomuse-ai-flask-app
# ports:
# - "${FRONTEND_PORT:-8000}:8000" # Map host port 8000 to container port 8000
environment:
SERVICE_TYPE: "flask" # Tells the container to run the Flask app
TZ: "${TZ:-UTC}"
# DATABASE_URL is now constructed by config.py from the following:
POSTGRES_USER: ${POSTGRES_USER:-audiomuse}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-audiomusepassword}
POSTGRES_DB: "audiomusedb"
POSTGRES_HOST: "postgres" # Service name of the postgres container
POSTGRES_PORT: "5432" # Internal port - always 5432 inside the Docker network
TEMP_DIR: "/app/temp_audio"
volumes:
- temp-audio-flask:/app/temp_audio # Volume for temporary audio files
- plugins-flask:/app/plugin/installed # This container's own plugins cache (code + pip deps)
depends_on:
- postgres
restart: unless-stopped
networks:
- default
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.audiomuseai.entrypoints=websecure"
- "traefik.http.routers.audiomuseai.rule=Host(`audiomuse-ai.deinedomain.de`)"
- "traefik.http.routers.audiomuseai.tls=true"
- "traefik.http.routers.audiomuseai.tls.certresolver=http_resolver"
- "traefik.http.routers.audiomuseai.service=audiomuseai"
- "traefik.http.services.audiomuseai.loadbalancer.server.port=8000"
- "traefik.docker.network=proxy"
- "traefik.http.routers.audiomuseai.middlewares=default@file"
# AudioMuse-AI Queue Worker service
audiomuse-ai-worker:
image: ghcr.io/neptunehub/audiomuse-ai:latest # Reflects deployment.yaml
container_name: audiomuse-ai-worker-instance
environment:
SERVICE_TYPE: "worker" # Tells the container to run the queue workers
TZ: "${TZ:-UTC}"
# DATABASE_URL is now constructed by config.py from the following:
POSTGRES_USER: ${POSTGRES_USER:-audiomuse}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-audiomusepassword}
POSTGRES_DB: "audiomusedb"
POSTGRES_HOST: "postgres" # Service name of the postgres container
POSTGRES_PORT: "5432" # Internal port - always 5432 inside the Docker network
TEMP_DIR: "/app/temp_audio"
volumes:
- temp-audio-worker:/app/temp_audio # Volume for temporary audio files
- plugins-worker:/app/plugin/installed # This container's own plugins cache (code + pip deps)
depends_on:
- postgres
restart: unless-stopped
networks:
- default
# Define volumes for persistent data and temporary files
volumes:
postgres-data:
temp-audio-flask: # Volume for Flask app's temporary audio
temp-audio-worker: # Volume for Worker's temporary audio
# Installed plugins live here (not in the database). Flask and worker each keep
# their own copy and install into it, so plugins are reused across restarts.
plugins-flask:
plugins-worker:
networks:
proxy:
external: trueCode-Sprache: PHP (php)
Hier musst du deine Domain bei traefik.http.routers.audiomuseai.rule=Host(`audiomuse-ai.deinedomain.de`) richtig anpassen.
3. ENV-Datei erstellen
Dann noch die .env-Datei erstellen.
# Copy this file to `.env` and fill in the values that match your setup.
# Docker Compose files under deployment/ read these variables to keep settings in one place.
#
# IMPORTANT:
# 1. This file must be named exactly ".env" (not .env.txt or .env.example)
# 2. It must be in the SAME directory as your docker-compose-*.yaml file
# 3. Do NOT use spaces around the = sign
# 4. Do NOT use quotes around values (unless required by the value itself)
# 5. After editing, restart containers: docker-compose down && docker-compose up -d
# SET YOUR TIMEZONE
TZ=UTC
# CHANGE DEFAULT USER AND PASSWORD FOR SECURITY REASONS
POSTGRES_USER=audiomuse
POSTGRES_PASSWORD=DeinSicheresPasswort
# CHANGE THESE ONLY IF THE DEFAULT PORTS ARE ALREADY IN USE ON YOUR HOST
POSTGRES_PORT=5432
FRONTEND_PORT=8000Code-Sprache: PHP (php)
Hier noch ein sicheres Passwort bei POSTGRES_PASSWORD=DeinSicheresPasswort einfügen.
4. Audiomuse-AI starten
Den Server startet ihr wie gewohnt mit folgendem Befehl:
docker compose -f /opt/containers/audiomuse-ai/docker-compose.yml up -d
Nach dem Start des Containers öffnen wir unsere Audiomuse-Instanz https://audiomuse-ai.deinedomain.de und führen das Setup durch… (ist selbsterklärend, weshalb ich hier auf Screenshots verzichte).
Viel Spass!
