mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-02-10 07:58:39 -05:00
139 lines
5.5 KiB
YAML
139 lines
5.5 KiB
YAML
services:
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: allstarr-redis
|
|
restart: unless-stopped
|
|
# Redis is only accessible internally - no external port exposure
|
|
expose:
|
|
- "6379"
|
|
command: redis-server --maxmemory 1gb --maxmemory-policy allkeys-lru --save 60 1 --appendonly yes
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 3s
|
|
retries: 3
|
|
volumes:
|
|
- ${REDIS_DATA_PATH:-./redis-data}:/data
|
|
networks:
|
|
- allstarr-network
|
|
|
|
spotify-lyrics:
|
|
image: akashrchandran/spotify-lyrics-api:latest
|
|
container_name: allstarr-spotify-lyrics
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8365:8080"
|
|
environment:
|
|
- SP_DC=${SPOTIFY_API_SESSION_COOKIE:-}
|
|
networks:
|
|
- allstarr-network
|
|
|
|
allstarr:
|
|
# Use pre-built image from GitHub Container Registry
|
|
# For latest stable: ghcr.io/sopat712/allstarr:latest
|
|
# For beta/testing: ghcr.io/sopat712/allstarr:beta
|
|
# To build locally instead, uncomment the build section below
|
|
image: ghcr.io/sopat712/allstarr:latest
|
|
|
|
# Uncomment to build locally instead of using GHCR image:
|
|
# build:
|
|
# context: .
|
|
# dockerfile: Dockerfile
|
|
# image: allstarr:local
|
|
|
|
container_name: allstarr
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5274:8080"
|
|
# Admin UI on port 5275 - for local/Tailscale access only
|
|
# DO NOT expose through reverse proxy - contains sensitive config
|
|
- "5275:5275"
|
|
depends_on:
|
|
redis:
|
|
condition: service_healthy
|
|
spotify-lyrics:
|
|
condition: service_started
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 40s
|
|
networks:
|
|
- allstarr-network
|
|
environment:
|
|
- ASPNETCORE_ENVIRONMENT=Production
|
|
# Backend type: Subsonic or Jellyfin (default: Subsonic)
|
|
- Backend__Type=${BACKEND_TYPE:-Subsonic}
|
|
|
|
# ===== REDIS CACHE =====
|
|
- Redis__ConnectionString=redis:6379
|
|
- Redis__Enabled=${REDIS_ENABLED:-true}
|
|
|
|
# ===== SUBSONIC BACKEND =====
|
|
- Subsonic__Url=${SUBSONIC_URL:-http://localhost:4533}
|
|
- Subsonic__ExplicitFilter=${EXPLICIT_FILTER:-ExplicitOnly}
|
|
- Subsonic__DownloadMode=${DOWNLOAD_MODE:-Track}
|
|
- Subsonic__MusicService=${MUSIC_SERVICE:-SquidWTF}
|
|
- Subsonic__StorageMode=${STORAGE_MODE:-Permanent}
|
|
- Subsonic__CacheDurationHours=${CACHE_DURATION_HOURS:-1}
|
|
- Subsonic__EnableExternalPlaylists=${ENABLE_EXTERNAL_PLAYLISTS:-true}
|
|
|
|
# ===== JELLYFIN BACKEND =====
|
|
- Jellyfin__Url=${JELLYFIN_URL:-http://localhost:8096}
|
|
- Jellyfin__ApiKey=${JELLYFIN_API_KEY:-}
|
|
- Jellyfin__UserId=${JELLYFIN_USER_ID:-}
|
|
- Jellyfin__LibraryId=${JELLYFIN_LIBRARY_ID:-}
|
|
- Jellyfin__ClientUsername=${JELLYFIN_CLIENT_USERNAME:-}
|
|
- Jellyfin__ExplicitFilter=${EXPLICIT_FILTER:-ExplicitOnly}
|
|
- Jellyfin__DownloadMode=${DOWNLOAD_MODE:-Track}
|
|
- Jellyfin__MusicService=${MUSIC_SERVICE:-SquidWTF}
|
|
- Jellyfin__StorageMode=${STORAGE_MODE:-Permanent}
|
|
- Jellyfin__CacheDurationHours=${CACHE_DURATION_HOURS:-1}
|
|
- Jellyfin__EnableExternalPlaylists=${ENABLE_EXTERNAL_PLAYLISTS:-true}
|
|
|
|
# ===== SPOTIFY PLAYLIST INJECTION (JELLYFIN ONLY) =====
|
|
- SpotifyImport__Enabled=${SPOTIFY_IMPORT_ENABLED:-false}
|
|
- SpotifyImport__SyncStartHour=${SPOTIFY_IMPORT_SYNC_START_HOUR:-16}
|
|
- SpotifyImport__SyncStartMinute=${SPOTIFY_IMPORT_SYNC_START_MINUTE:-15}
|
|
- SpotifyImport__SyncWindowHours=${SPOTIFY_IMPORT_SYNC_WINDOW_HOURS:-2}
|
|
- SpotifyImport__Playlists=${SPOTIFY_IMPORT_PLAYLISTS:-}
|
|
- SpotifyImport__PlaylistIds=${SPOTIFY_IMPORT_PLAYLIST_IDS:-}
|
|
- SpotifyImport__PlaylistNames=${SPOTIFY_IMPORT_PLAYLIST_NAMES:-}
|
|
- SpotifyImport__PlaylistLocalTracksPositions=${SPOTIFY_IMPORT_PLAYLIST_LOCAL_TRACKS_POSITIONS:-}
|
|
|
|
# ===== SPOTIFY DIRECT API (for lyrics, ISRC matching, track ordering) =====
|
|
- SpotifyApi__Enabled=${SPOTIFY_API_ENABLED:-false}
|
|
- SpotifyApi__ClientId=${SPOTIFY_API_CLIENT_ID:-}
|
|
- SpotifyApi__ClientSecret=${SPOTIFY_API_CLIENT_SECRET:-}
|
|
- SpotifyApi__SessionCookie=${SPOTIFY_API_SESSION_COOKIE:-}
|
|
- SpotifyApi__SessionCookieSetDate=${SPOTIFY_API_SESSION_COOKIE_SET_DATE:-}
|
|
- SpotifyApi__CacheDurationMinutes=${SPOTIFY_API_CACHE_DURATION_MINUTES:-60}
|
|
- SpotifyApi__RateLimitDelayMs=${SPOTIFY_API_RATE_LIMIT_DELAY_MS:-100}
|
|
- SpotifyApi__PreferIsrcMatching=${SPOTIFY_API_PREFER_ISRC_MATCHING:-true}
|
|
# Spotify Lyrics API sidecar service URL (internal)
|
|
- SpotifyApi__LyricsApiUrl=${SPOTIFY_LYRICS_API_URL:-http://spotify-lyrics:8080}
|
|
|
|
# ===== SHARED =====
|
|
- Library__DownloadPath=/app/downloads
|
|
- SquidWTF__Quality=${SQUIDWTF_QUALITY:-FLAC}
|
|
- Deezer__Arl=${DEEZER_ARL:-}
|
|
- Deezer__ArlFallback=${DEEZER_ARL_FALLBACK:-}
|
|
- Deezer__Quality=${DEEZER_QUALITY:-FLAC}
|
|
- Qobuz__UserAuthToken=${QOBUZ_USER_AUTH_TOKEN:-}
|
|
- Qobuz__UserId=${QOBUZ_USER_ID:-}
|
|
- Qobuz__Quality=${QOBUZ_QUALITY:-FLAC}
|
|
volumes:
|
|
- ${DOWNLOAD_PATH:-./downloads}:/app/downloads
|
|
- ${KEPT_PATH:-./kept}:/app/kept
|
|
- ${CACHE_PATH:-./cache}:/app/cache
|
|
# Mount .env file for runtime configuration updates from admin UI
|
|
- ./.env:/app/.env
|
|
# Docker socket for self-restart capability (admin UI only)
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
|
|
networks:
|
|
allstarr-network:
|
|
name: allstarr-network
|
|
driver: bridge
|