chore: rebrand Docker infrastructure to Kima

This commit is contained in:
Your Name
2026-02-16 09:41:11 -06:00
parent 0a52d1d9df
commit 569ed5ecbe
9 changed files with 104 additions and 104 deletions
+24 -24
View File
@@ -1,6 +1,6 @@
# Lidify All-in-One Docker Image (Hardened) # Kima All-in-One Docker Image (Hardened)
# Contains: Backend, Frontend, PostgreSQL, Redis, Audio Analyzer (Essentia AI) # Contains: Backend, Frontend, PostgreSQL, Redis, Audio Analyzer (Essentia AI)
# Usage: docker run -d -p 3030:3030 -v /path/to/music:/music lidify/lidify # Usage: docker run -d -p 3030:3030 -v /path/to/music:/music kima/kima
FROM node:20-slim FROM node:20-slim
@@ -129,7 +129,7 @@ if [ -f /data/.schema_ready ]; then
fi fi
while [ $COUNTER -lt $TIMEOUT ]; do while [ $COUNTER -lt $TIMEOUT ]; do
if PGPASSWORD=lidify psql -h localhost -U lidify -d lidify -c "SELECT 1 FROM \"Track\" LIMIT 1" > /dev/null 2>&1; then if PGPASSWORD=kima psql -h localhost -U kima -d kima -c "SELECT 1 FROM \"Track\" LIMIT 1" > /dev/null 2>&1; then
echo "[wait-for-db] ✓ Database is ready and schema exists!" echo "[wait-for-db] ✓ Database is ready and schema exists!"
exit 0 exit 0
fi fi
@@ -144,7 +144,7 @@ done
echo "[wait-for-db] ERROR: Database schema not ready after ${TIMEOUT}s" echo "[wait-for-db] ERROR: Database schema not ready after ${TIMEOUT}s"
echo "[wait-for-db] Listing available tables:" echo "[wait-for-db] Listing available tables:"
PGPASSWORD=lidify psql -h localhost -U lidify -d lidify -c "\dt" 2>&1 || echo "Could not list tables" PGPASSWORD=kima psql -h localhost -U kima -d kima -c "\dt" 2>&1 || echo "Could not list tables"
exit 1 exit 1
EOF EOF
@@ -211,7 +211,7 @@ WORKDIR /app
COPY healthcheck-prod.js /app/healthcheck.js COPY healthcheck-prod.js /app/healthcheck.js
# Create supervisord config - logs to stdout/stderr for Docker visibility # Create supervisord config - logs to stdout/stderr for Docker visibility
RUN cat > /etc/supervisor/conf.d/lidify.conf << 'EOF' RUN cat > /etc/supervisor/conf.d/kima.conf << 'EOF'
[supervisord] [supervisord]
nodaemon=true nodaemon=true
logfile=/dev/null logfile=/dev/null
@@ -275,7 +275,7 @@ stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0 stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
environment=DATABASE_URL="postgresql://lidify:lidify@localhost:5432/lidify",REDIS_URL="redis://localhost:6379",MUSIC_PATH="/music",BATCH_SIZE="10",SLEEP_INTERVAL="5",MAX_ANALYZE_SECONDS="90",BRPOP_TIMEOUT="30",MODEL_IDLE_TIMEOUT="300",NUM_WORKERS="2",THREADS_PER_WORKER="1",LD_LIBRARY_PATH="/opt/cudnn8/nvidia/cudnn/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cublas/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cufft/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cuda_runtime/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cuda_nvrtc/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cusolver/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cusparse/lib:/usr/local/lib/python3.11/dist-packages/nvidia/nccl/lib" environment=DATABASE_URL="postgresql://kima:kima@localhost:5432/kima",REDIS_URL="redis://localhost:6379",MUSIC_PATH="/music",BATCH_SIZE="10",SLEEP_INTERVAL="5",MAX_ANALYZE_SECONDS="90",BRPOP_TIMEOUT="30",MODEL_IDLE_TIMEOUT="300",NUM_WORKERS="2",THREADS_PER_WORKER="1",LD_LIBRARY_PATH="/opt/cudnn8/nvidia/cudnn/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cublas/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cufft/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cuda_runtime/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cuda_nvrtc/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cusolver/lib:/usr/local/lib/python3.11/dist-packages/nvidia/cusparse/lib:/usr/local/lib/python3.11/dist-packages/nvidia/nccl/lib"
priority=50 priority=50
[program:audio-analyzer-clap] [program:audio-analyzer-clap]
@@ -288,12 +288,12 @@ stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0 stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
environment=DATABASE_URL="postgresql://lidify:lidify@localhost:5432/lidify",REDIS_URL="redis://localhost:6379",MUSIC_PATH="/music",BACKEND_URL="http://localhost:3006",SLEEP_INTERVAL="5",NUM_WORKERS="1",MODEL_IDLE_TIMEOUT="300",INTERNAL_API_SECRET="lidify-internal-aio" environment=DATABASE_URL="postgresql://kima:kima@localhost:5432/kima",REDIS_URL="redis://localhost:6379",MUSIC_PATH="/music",BACKEND_URL="http://localhost:3006",SLEEP_INTERVAL="5",NUM_WORKERS="1",MODEL_IDLE_TIMEOUT="300",INTERNAL_API_SECRET="kima-internal-aio"
priority=60 priority=60
EOF EOF
# Fix Windows line endings in supervisor config # Fix Windows line endings in supervisor config
RUN sed -i 's/\r$//' /etc/supervisor/conf.d/lidify.conf RUN sed -i 's/\r$//' /etc/supervisor/conf.d/kima.conf
# Create startup script with root check # Create startup script with root check
RUN cat > /app/start.sh << 'EOF' RUN cat > /app/start.sh << 'EOF'
@@ -306,7 +306,7 @@ set -e
echo "" echo ""
echo "============================================================" echo "============================================================"
echo " Lidify - Premium Self-Hosted Music Server" echo " Kima - Premium Self-Hosted Music Server"
echo "" echo ""
echo " Features:" echo " Features:"
echo " - AI-Powered Vibe Matching (Essentia ML)" echo " - AI-Powered Vibe Matching (Essentia ML)"
@@ -372,32 +372,32 @@ fi
gosu postgres $PG_BIN/pg_ctl -D /data/postgres -w start gosu postgres $PG_BIN/pg_ctl -D /data/postgres -w start
# Create user and database if they don't exist # Create user and database if they don't exist
gosu postgres psql -tc "SELECT 1 FROM pg_roles WHERE rolname = 'lidify'" | grep -q 1 || \ gosu postgres psql -tc "SELECT 1 FROM pg_roles WHERE rolname = 'kima'" | grep -q 1 || \
gosu postgres psql -c "CREATE USER lidify WITH PASSWORD 'lidify';" gosu postgres psql -c "CREATE USER kima WITH PASSWORD 'kima';"
gosu postgres psql -tc "SELECT 1 FROM pg_database WHERE datname = 'lidify'" | grep -q 1 || \ gosu postgres psql -tc "SELECT 1 FROM pg_database WHERE datname = 'kima'" | grep -q 1 || \
gosu postgres psql -c "CREATE DATABASE lidify OWNER lidify;" gosu postgres psql -c "CREATE DATABASE kima OWNER kima;"
# Create pgvector extension as superuser (required before migrations) # Create pgvector extension as superuser (required before migrations)
echo "Creating pgvector extension..." echo "Creating pgvector extension..."
gosu postgres psql -d lidify -c "CREATE EXTENSION IF NOT EXISTS vector;" gosu postgres psql -d kima -c "CREATE EXTENSION IF NOT EXISTS vector;"
# Run Prisma migrations # Run Prisma migrations
cd /app/backend cd /app/backend
export DATABASE_URL="postgresql://lidify:lidify@localhost:5432/lidify" export DATABASE_URL="postgresql://kima:kima@localhost:5432/kima"
echo "Running Prisma migrations..." echo "Running Prisma migrations..."
ls -la prisma/migrations/ || echo "No migrations directory!" ls -la prisma/migrations/ || echo "No migrations directory!"
# Check if _prisma_migrations table exists (indicates previous Prisma setup) # Check if _prisma_migrations table exists (indicates previous Prisma setup)
MIGRATIONS_EXIST=$(gosu postgres psql -d lidify -tAc "SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = '_prisma_migrations')" 2>/dev/null || echo "f") MIGRATIONS_EXIST=$(gosu postgres psql -d kima -tAc "SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = '_prisma_migrations')" 2>/dev/null || echo "f")
# Check if User table exists (indicates existing data) # Check if User table exists (indicates existing data)
USER_TABLE_EXIST=$(gosu postgres psql -d lidify -tAc "SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'User')" 2>/dev/null || echo "f") USER_TABLE_EXIST=$(gosu postgres psql -d kima -tAc "SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'User')" 2>/dev/null || echo "f")
# Handle rename migration for existing databases # Handle rename migration for existing databases
echo "Checking if rename migration needs to be marked as applied..." echo "Checking if rename migration needs to be marked as applied..."
if gosu postgres psql -d lidify -tAc "SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='SystemSettings' AND column_name='soulseekFallback');" 2>/dev/null | grep -q 't'; then if gosu postgres psql -d kima -tAc "SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='SystemSettings' AND column_name='soulseekFallback');" 2>/dev/null | grep -q 't'; then
echo "Old column exists, marking migration as applied..." echo "Old column exists, marking migration as applied..."
gosu postgres psql -d lidify -c "INSERT INTO \"_prisma_migrations\" (id, checksum, finished_at, migration_name, logs, rolled_back_at, started_at, applied_steps_count) VALUES (gen_random_uuid(), '', NOW(), '20250101000000_rename_soulseek_fallback', '', NULL, NOW(), 1) ON CONFLICT DO NOTHING;" 2>/dev/null || true gosu postgres psql -d kima -c "INSERT INTO \"_prisma_migrations\" (id, checksum, finished_at, migration_name, logs, rolled_back_at, started_at, applied_steps_count) VALUES (gen_random_uuid(), '', NOW(), '20250101000000_rename_soulseek_fallback', '', NULL, NOW(), 1) ON CONFLICT DO NOTHING;" 2>/dev/null || true
fi fi
if [ "$MIGRATIONS_EXIST" = "t" ]; then if [ "$MIGRATIONS_EXIST" = "t" ]; then
@@ -430,7 +430,7 @@ echo "✓ Migrations completed successfully"
# Verify schema exists before starting services # Verify schema exists before starting services
echo "Verifying database schema..." echo "Verifying database schema..."
if ! gosu postgres psql -d lidify -c "SELECT 1 FROM \"Track\" LIMIT 1" >/dev/null 2>&1; then if ! gosu postgres psql -d kima -c "SELECT 1 FROM \"Track\" LIMIT 1" >/dev/null 2>&1; then
echo "FATAL: Track table does not exist after migration!" echo "FATAL: Track table does not exist after migration!"
echo "Database schema verification failed. Container will exit." echo "Database schema verification failed. Container will exit."
exit 1 exit 1
@@ -471,20 +471,20 @@ fi
# Write environment file for backend # Write environment file for backend
cat > /app/backend/.env << ENVEOF cat > /app/backend/.env << ENVEOF
NODE_ENV=production NODE_ENV=production
DATABASE_URL=postgresql://lidify:lidify@localhost:5432/lidify DATABASE_URL=postgresql://kima:kima@localhost:5432/kima
REDIS_URL=redis://localhost:6379 REDIS_URL=redis://localhost:6379
PORT=3006 PORT=3006
MUSIC_PATH=/music MUSIC_PATH=/music
TRANSCODE_CACHE_PATH=/data/cache/transcodes TRANSCODE_CACHE_PATH=/data/cache/transcodes
SESSION_SECRET=$SESSION_SECRET SESSION_SECRET=$SESSION_SECRET
SETTINGS_ENCRYPTION_KEY=$SETTINGS_ENCRYPTION_KEY SETTINGS_ENCRYPTION_KEY=$SETTINGS_ENCRYPTION_KEY
INTERNAL_API_SECRET=lidify-internal-aio INTERNAL_API_SECRET=kima-internal-aio
ENVEOF ENVEOF
echo "Starting Lidify..." echo "Starting Kima..."
exec env \ exec env \
NODE_ENV=production \ NODE_ENV=production \
DATABASE_URL="postgresql://lidify:lidify@localhost:5432/lidify" \ DATABASE_URL="postgresql://kima:kima@localhost:5432/kima" \
SESSION_SECRET="$SESSION_SECRET" \ SESSION_SECRET="$SESSION_SECRET" \
SETTINGS_ENCRYPTION_KEY="$SETTINGS_ENCRYPTION_KEY" \ SETTINGS_ENCRYPTION_KEY="$SETTINGS_ENCRYPTION_KEY" \
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
+2 -2
View File
@@ -20,7 +20,7 @@ if [ "$(id -u)" = "0" ]; then
exit 1 exit 1
fi fi
echo "[START] Starting Lidify Backend..." echo "[START] Starting Kima Backend..."
# Docker Compose health checks ensure database and Redis are ready # Docker Compose health checks ensure database and Redis are ready
# Add a small delay to be extra safe # Add a small delay to be extra safe
@@ -62,7 +62,7 @@ if [ -z "$SETTINGS_ENCRYPTION_KEY" ]; then
export SETTINGS_ENCRYPTION_KEY="default-encryption-key-change-me" export SETTINGS_ENCRYPTION_KEY="default-encryption-key-change-me"
fi fi
echo "[START] Lidify Backend starting on port ${PORT:-3006}..." echo "[START] Kima Backend starting on port ${PORT:-3006}..."
echo "[CONFIG] Music path: ${MUSIC_PATH:-/music}" echo "[CONFIG] Music path: ${MUSIC_PATH:-/music}"
echo "[CONFIG] Environment: ${NODE_ENV:-production}" echo "[CONFIG] Environment: ${NODE_ENV:-production}"
+3 -3
View File
@@ -1,11 +1,11 @@
#!/bin/bash #!/bin/bash
# Lidify Deploy Script # Kima Deploy Script
# Builds Docker image and cleans up old images/cache to prevent disk bloat # Builds Docker image and cleans up old images/cache to prevent disk bloat
set -e set -e
# Configuration # Configuration
IMAGE_NAME="${DOCKERHUB_USERNAME:-chevron7locked}/lidify" IMAGE_NAME="${DOCKERHUB_USERNAME:-chevron7locked}/kima"
VERSION="${VERSION:-latest}" VERSION="${VERSION:-latest}"
FULL_IMAGE="${IMAGE_NAME}:${VERSION}" FULL_IMAGE="${IMAGE_NAME}:${VERSION}"
@@ -15,7 +15,7 @@ GREEN='\033[0;32m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
NC='\033[0m' # No Color NC='\033[0m' # No Color
echo -e "${GREEN}=== Lidify Deploy ===${NC}" echo -e "${GREEN}=== Kima Deploy ===${NC}"
echo "Building: ${FULL_IMAGE}" echo "Building: ${FULL_IMAGE}"
echo "" echo ""
+9 -9
View File
@@ -1,4 +1,4 @@
# Lidify Dev Services # Kima Dev Services
# Run alongside npm dev servers for audio analysis # Run alongside npm dev servers for audio analysis
# #
# Usage: # Usage:
@@ -12,25 +12,25 @@
services: services:
postgres: postgres:
image: postgres:16-alpine image: postgres:16-alpine
container_name: lidify_dev_db container_name: kima_dev_db
environment: environment:
POSTGRES_USER: lidify POSTGRES_USER: kima
POSTGRES_PASSWORD: lidify POSTGRES_PASSWORD: kima
POSTGRES_DB: lidify POSTGRES_DB: kima
volumes: volumes:
- postgres_dev_data:/var/lib/postgresql/data - postgres_dev_data:/var/lib/postgresql/data
ports: ports:
- "5433:5432" - "5433:5432"
restart: unless-stopped restart: unless-stopped
healthcheck: healthcheck:
test: ["CMD-SHELL", "pg_isready -U lidify -d lidify"] test: ["CMD-SHELL", "pg_isready -U kima -d kima"]
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
redis: redis:
image: redis:7-alpine image: redis:7-alpine
container_name: lidify_dev_redis container_name: kima_dev_redis
ports: ports:
- "6380:6379" - "6380:6379"
restart: unless-stopped restart: unless-stopped
@@ -44,11 +44,11 @@ services:
audio-analyzer: audio-analyzer:
build: build:
context: ./services/audio-analyzer context: ./services/audio-analyzer
container_name: lidify_audio_analyzer container_name: kima_audio_analyzer
environment: environment:
# Connect to host machine's services (or Docker services) # Connect to host machine's services (or Docker services)
REDIS_URL: redis://redis:6379 REDIS_URL: redis://redis:6379
DATABASE_URL: postgresql://lidify:lidify@postgres:5432/lidify DATABASE_URL: postgresql://kima:kima@postgres:5432/kima
# Music path inside container (mounted from host) # Music path inside container (mounted from host)
MUSIC_PATH: /music MUSIC_PATH: /music
BATCH_SIZE: 10 BATCH_SIZE: 10
+7 -7
View File
@@ -1,4 +1,4 @@
# Lidify - Premium Self-Hosted Music Server # Kima - Premium Self-Hosted Music Server
# All-in-One container with AI-powered vibe matching # All-in-One container with AI-powered vibe matching
# #
# Features included: # Features included:
@@ -12,20 +12,20 @@
# 3. Open http://localhost:3030 # 3. Open http://localhost:3030
services: services:
lidify: kima:
image: ${DOCKERHUB_USERNAME:-chevron7locked}/lidify:${VERSION:-latest} image: ${DOCKERHUB_USERNAME:-chevron7locked}/kima:${VERSION:-latest}
container_name: lidify container_name: kima
ports: ports:
- "${PORT:-3030}:3030" - "${PORT:-3030}:3030"
volumes: volumes:
# REQUIRED: Path to your music library # REQUIRED: Path to your music library
- ${MUSIC_PATH:-/path/to/your/music}:/music - ${MUSIC_PATH:-/path/to/your/music}:/music
# Persistent data (database, cache, etc.) # Persistent data (database, cache, etc.)
- lidify_data:/data - kima_data:/data
environment: environment:
- TZ=${TZ:-UTC} - TZ=${TZ:-UTC}
- SESSION_SECRET=${SESSION_SECRET:-} - SESSION_SECRET=${SESSION_SECRET:-}
# Lidarr webhook callback URL - how Lidarr reaches Lidify when downloads complete # Lidarr webhook callback URL - how Lidarr reaches Kima when downloads complete
# Default uses host.docker.internal which works on most setups with extra_hosts below # Default uses host.docker.internal which works on most setups with extra_hosts below
# Override if using custom Docker networks: e.g., http://192.168.0.20:3030 # Override if using custom Docker networks: e.g., http://192.168.0.20:3030
- LIDIFY_CALLBACK_URL=${LIDIFY_CALLBACK_URL:-http://host.docker.internal:3030} - LIDIFY_CALLBACK_URL=${LIDIFY_CALLBACK_URL:-http://host.docker.internal:3030}
@@ -41,4 +41,4 @@ services:
retries: 3 retries: 3
volumes: volumes:
lidify_data: kima_data:
+15 -15
View File
@@ -1,5 +1,5 @@
# Lidify Full Stack - Production Deployment # Kima Full Stack - Production Deployment
# Uses pre-built Lidify image from DockerHub + all external services # Uses pre-built Kima image from DockerHub + all external services
# #
# Usage: # Usage:
# docker compose -f docker-compose.server.yml up -d # docker compose -f docker-compose.server.yml up -d
@@ -9,21 +9,21 @@ services:
# LIDIFY (All-in-One: Frontend + Backend + PostgreSQL + Redis) # LIDIFY (All-in-One: Frontend + Backend + PostgreSQL + Redis)
# ============================================================================== # ==============================================================================
lidify: kima:
image: chevron7locked/lidify:latest image: chevron7locked/kima:latest
container_name: lidify container_name: kima
ports: ports:
- "${FRONTEND_PORT:-3030}:3030" - "${FRONTEND_PORT:-3030}:3030"
volumes: volumes:
# IMPORTANT: CHANGE THIS to your music library path # IMPORTANT: CHANGE THIS to your music library path
- ${MUSIC_PATH:-/path/to/your/music}:/music - ${MUSIC_PATH:-/path/to/your/music}:/music
# Persistent data (database, cache, covers, etc.) # Persistent data (database, cache, covers, etc.)
- lidify_data:/data - kima_data:/data
environment: environment:
- TZ=${TZ:-America/Chicago} - TZ=${TZ:-America/Chicago}
# Generate with: openssl rand -base64 32 # Generate with: openssl rand -base64 32
- SESSION_SECRET=${SESSION_SECRET:-changeme-generate-secure-key} - SESSION_SECRET=${SESSION_SECRET:-changeme-generate-secure-key}
# Lidarr webhook callback URL - how Lidarr reaches Lidify when downloads complete # Lidarr webhook callback URL - how Lidarr reaches Kima when downloads complete
# Default uses host.docker.internal which works on most setups with extra_hosts below # Default uses host.docker.internal which works on most setups with extra_hosts below
# Override if using custom Docker networks: e.g., http://192.168.0.20:3030 # Override if using custom Docker networks: e.g., http://192.168.0.20:3030
- LIDIFY_CALLBACK_URL=${LIDIFY_CALLBACK_URL:-http://host.docker.internal:3030} - LIDIFY_CALLBACK_URL=${LIDIFY_CALLBACK_URL:-http://host.docker.internal:3030}
@@ -52,7 +52,7 @@ services:
# Lidarr - Music collection manager # Lidarr - Music collection manager
lidarr: lidarr:
image: lscr.io/linuxserver/lidarr:latest image: lscr.io/linuxserver/lidarr:latest
container_name: lidify_lidarr container_name: kima_lidarr
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -68,7 +68,7 @@ services:
# Prowlarr - Indexer manager # Prowlarr - Indexer manager
prowlarr: prowlarr:
image: lscr.io/linuxserver/prowlarr:latest image: lscr.io/linuxserver/prowlarr:latest
container_name: lidify_prowlarr container_name: kima_prowlarr
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -82,7 +82,7 @@ services:
# FlareSolverr - Cloudflare bypass for Prowlarr # FlareSolverr - Cloudflare bypass for Prowlarr
flaresolverr: flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: lidify_flaresolverr container_name: kima_flaresolverr
environment: environment:
- LOG_LEVEL=${LOG_LEVEL:-info} - LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_HTML=${LOG_HTML:-false} - LOG_HTML=${LOG_HTML:-false}
@@ -95,7 +95,7 @@ services:
# qBittorrent - Torrent client # qBittorrent - Torrent client
qbittorrent: qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest image: lscr.io/linuxserver/qbittorrent:latest
container_name: lidify_qbittorrent container_name: kima_qbittorrent
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -114,7 +114,7 @@ services:
# NZBGet - Usenet client # NZBGet - Usenet client
nzbget: nzbget:
image: lscr.io/linuxserver/nzbget:latest image: lscr.io/linuxserver/nzbget:latest
container_name: lidify_nzbget container_name: kima_nzbget
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -128,8 +128,8 @@ services:
restart: unless-stopped restart: unless-stopped
volumes: volumes:
# Lidify # Kima
lidify_data: kima_data:
# External services # External services
lidarr_config: lidarr_config:
prowlarr_config: prowlarr_config:
@@ -138,4 +138,4 @@ volumes:
networks: networks:
default: default:
name: lidify_network name: kima_network
+14 -14
View File
@@ -1,17 +1,17 @@
# Optional External Services for Lidify # Optional External Services for Kima
# #
# These services are OPTIONAL and can be enabled based on your needs. # These services are OPTIONAL and can be enabled based on your needs.
# To use these services alongside the core Lidify stack: # To use these services alongside the core Kima stack:
# #
# docker compose -f docker-compose.yml -f docker-compose.services.yml up -d # docker compose -f docker-compose.yml -f docker-compose.services.yml up -d
# #
# Note: You can configure these services through the Lidify web UI after starting them. # Note: You can configure these services through the Kima web UI after starting them.
services: services:
# Lidarr - Music collection manager # Lidarr - Music collection manager
lidarr: lidarr:
image: lscr.io/linuxserver/lidarr:latest image: lscr.io/linuxserver/lidarr:latest
container_name: lidify_lidarr container_name: kima_lidarr
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -24,12 +24,12 @@ services:
- "8686:8686" - "8686:8686"
restart: unless-stopped restart: unless-stopped
networks: networks:
- lidify_network - kima_network
# Prowlarr - Indexer manager # Prowlarr - Indexer manager
prowlarr: prowlarr:
image: lscr.io/linuxserver/prowlarr:latest image: lscr.io/linuxserver/prowlarr:latest
container_name: lidify_prowlarr container_name: kima_prowlarr
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -40,12 +40,12 @@ services:
- "9696:9696" - "9696:9696"
restart: unless-stopped restart: unless-stopped
networks: networks:
- lidify_network - kima_network
# FlareSolverr - Cloudflare bypass for Prowlarr # FlareSolverr - Cloudflare bypass for Prowlarr
flaresolverr: flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: lidify_flaresolverr container_name: kima_flaresolverr
environment: environment:
- LOG_LEVEL=${LOG_LEVEL:-info} - LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_HTML=${LOG_HTML:-false} - LOG_HTML=${LOG_HTML:-false}
@@ -55,12 +55,12 @@ services:
- "8191:8191" - "8191:8191"
restart: unless-stopped restart: unless-stopped
networks: networks:
- lidify_network - kima_network
# qBittorrent - Torrent client # qBittorrent - Torrent client
qbittorrent: qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest image: lscr.io/linuxserver/qbittorrent:latest
container_name: lidify_qbittorrent container_name: kima_qbittorrent
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -76,12 +76,12 @@ services:
- "6881:6881/udp" - "6881:6881/udp"
restart: unless-stopped restart: unless-stopped
networks: networks:
- lidify_network - kima_network
# NZBGet - Usenet client # NZBGet - Usenet client
nzbget: nzbget:
image: lscr.io/linuxserver/nzbget:latest image: lscr.io/linuxserver/nzbget:latest
container_name: lidify_nzbget container_name: kima_nzbget
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -94,7 +94,7 @@ services:
- "6789:6789" - "6789:6789"
restart: unless-stopped restart: unless-stopped
networks: networks:
- lidify_network - kima_network
volumes: volumes:
lidarr_config: lidarr_config:
@@ -103,5 +103,5 @@ volumes:
nzbget_config: nzbget_config:
networks: networks:
lidify_network: kima_network:
external: true external: true
+29 -29
View File
@@ -3,18 +3,18 @@ services:
# LIDIFY CORE APPLICATION # LIDIFY CORE APPLICATION
# ============================================================================== # ==============================================================================
# Backend API - Your Lidify Express.js server # Backend API - Your Kima Express.js server
backend: backend:
build: build:
context: ./backend context: ./backend
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: lidify_backend container_name: kima_backend
environment: environment:
# Database # Database
DATABASE_URL: postgresql://${POSTGRES_USER:-lidifydb}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-lidify} DATABASE_URL: postgresql://${POSTGRES_USER:-kimadb}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-kima}
POSTGRES_USER: ${POSTGRES_USER:-lidifydb} POSTGRES_USER: ${POSTGRES_USER:-kimadb}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
POSTGRES_DB: ${POSTGRES_DB:-lidify} POSTGRES_DB: ${POSTGRES_DB:-kima}
REDIS_URL: redis://redis:6379 REDIS_URL: redis://redis:6379
# Server config # Server config
@@ -36,9 +36,9 @@ services:
ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:3030} ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:3030}
# Internal API secret for service-to-service auth # Internal API secret for service-to-service auth
INTERNAL_API_SECRET: ${INTERNAL_API_SECRET:-lidify-internal-secret-change-me} INTERNAL_API_SECRET: ${INTERNAL_API_SECRET:-kima-internal-secret-change-me}
# Lidarr webhook callback URL - how Lidarr can reach Lidify # Lidarr webhook callback URL - how Lidarr can reach Kima
# Use backend:3006 for same-network communication, or external IP:3030 for external Lidarr # Use backend:3006 for same-network communication, or external IP:3030 for external Lidarr
LIDIFY_CALLBACK_URL: ${LIDIFY_CALLBACK_URL:-http://backend:3006} LIDIFY_CALLBACK_URL: ${LIDIFY_CALLBACK_URL:-http://backend:3006}
# Debug: enable extra podcast stream/cache logging # Debug: enable extra podcast stream/cache logging
@@ -64,9 +64,9 @@ services:
default: default:
aliases: aliases:
- backend - backend
- lidify_backend - kima_backend
# Frontend Web UI - Your Lidify Next.js app # Frontend Web UI - Your Kima Next.js app
frontend: frontend:
build: build:
context: ./frontend context: ./frontend
@@ -77,7 +77,7 @@ services:
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-} NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-}
# Build type: "nightly" for dev builds, unset/empty for tagged releases # Build type: "nightly" for dev builds, unset/empty for tagged releases
NEXT_PUBLIC_BUILD_TYPE: ${NEXT_PUBLIC_BUILD_TYPE:-nightly} NEXT_PUBLIC_BUILD_TYPE: ${NEXT_PUBLIC_BUILD_TYPE:-nightly}
container_name: lidify_frontend container_name: kima_frontend
environment: environment:
NODE_ENV: ${NODE_ENV:-production} NODE_ENV: ${NODE_ENV:-production}
# Used by next.config.ts rewrites() inside the container. # Used by next.config.ts rewrites() inside the container.
@@ -102,11 +102,11 @@ services:
postgres: postgres:
image: pgvector/pgvector:pg16 image: pgvector/pgvector:pg16
container_name: lidify_db container_name: kima_db
environment: environment:
POSTGRES_USER: ${POSTGRES_USER:-lidifydb} POSTGRES_USER: ${POSTGRES_USER:-kimadb}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
POSTGRES_DB: ${POSTGRES_DB:-lidify} POSTGRES_DB: ${POSTGRES_DB:-kima}
volumes: volumes:
- postgres_data:/var/lib/postgresql/data - postgres_data:/var/lib/postgresql/data
ports: ports:
@@ -115,12 +115,12 @@ services:
healthcheck: healthcheck:
# IMPORTANT: # IMPORTANT:
# pg_isready defaults to connecting to a database with the same name as the user. # pg_isready defaults to connecting to a database with the same name as the user.
# Our default user is "lidifydb" but default database is "lidify", # Our default user is "kimadb" but default database is "kima",
# so without -d this will spam logs with: FATAL: database "lidifydb" does not exist # so without -d this will spam logs with: FATAL: database "kimadb" does not exist
test: test:
[ [
"CMD-SHELL", "CMD-SHELL",
"pg_isready -U ${POSTGRES_USER:-lidifydb} -d ${POSTGRES_DB:-lidify}", "pg_isready -U ${POSTGRES_USER:-kimadb} -d ${POSTGRES_DB:-kima}",
] ]
interval: 10s interval: 10s
timeout: 5s timeout: 5s
@@ -128,7 +128,7 @@ services:
redis: redis:
image: redis:7-alpine image: redis:7-alpine
container_name: lidify_redis container_name: kima_redis
ports: ports:
- "${REDIS_PORT:-6379}:6379" - "${REDIS_PORT:-6379}:6379"
restart: unless-stopped restart: unless-stopped
@@ -145,7 +145,7 @@ services:
# Lidarr - Music collection manager # Lidarr - Music collection manager
lidarr: lidarr:
image: lscr.io/linuxserver/lidarr:latest image: lscr.io/linuxserver/lidarr:latest
container_name: lidify_lidarr container_name: kima_lidarr
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -161,7 +161,7 @@ services:
# Prowlarr - Indexer manager # Prowlarr - Indexer manager
prowlarr: prowlarr:
image: lscr.io/linuxserver/prowlarr:latest image: lscr.io/linuxserver/prowlarr:latest
container_name: lidify_prowlarr container_name: kima_prowlarr
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -175,7 +175,7 @@ services:
# FlareSolverr - Cloudflare bypass for Prowlarr # FlareSolverr - Cloudflare bypass for Prowlarr
flaresolverr: flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: lidify_flaresolverr container_name: kima_flaresolverr
environment: environment:
- LOG_LEVEL=${LOG_LEVEL:-info} - LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_HTML=${LOG_HTML:-false} - LOG_HTML=${LOG_HTML:-false}
@@ -191,7 +191,7 @@ services:
# qBittorrent - Torrent client # qBittorrent - Torrent client
qbittorrent: qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest image: lscr.io/linuxserver/qbittorrent:latest
container_name: lidify_qbittorrent container_name: kima_qbittorrent
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -210,7 +210,7 @@ services:
# SABnzbd - Usenet client # SABnzbd - Usenet client
sabnzbd: sabnzbd:
image: lscr.io/linuxserver/sabnzbd:latest image: lscr.io/linuxserver/sabnzbd:latest
container_name: lidify_sabnzbd container_name: kima_sabnzbd
environment: environment:
- PUID=${PUID:-1000} - PUID=${PUID:-1000}
- PGID=${PGID:-1000} - PGID=${PGID:-1000}
@@ -230,10 +230,10 @@ services:
audio-analyzer: audio-analyzer:
build: build:
context: ./services/audio-analyzer context: ./services/audio-analyzer
container_name: lidify_audio_analyzer container_name: kima_audio_analyzer
environment: environment:
REDIS_URL: redis://redis:6379 REDIS_URL: redis://redis:6379
DATABASE_URL: postgresql://${POSTGRES_USER:-lidifydb}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-lidify} DATABASE_URL: postgresql://${POSTGRES_USER:-kimadb}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-kima}
MUSIC_PATH: /music MUSIC_PATH: /music
BATCH_SIZE: ${AUDIO_ANALYSIS_BATCH_SIZE:-10} BATCH_SIZE: ${AUDIO_ANALYSIS_BATCH_SIZE:-10}
SLEEP_INTERVAL: ${AUDIO_ANALYSIS_INTERVAL:-5} SLEEP_INTERVAL: ${AUDIO_ANALYSIS_INTERVAL:-5}
@@ -285,17 +285,17 @@ services:
audio-analyzer-clap: audio-analyzer-clap:
build: build:
context: ./services/audio-analyzer-clap context: ./services/audio-analyzer-clap
container_name: lidify_audio_analyzer_clap container_name: kima_audio_analyzer_clap
environment: environment:
REDIS_URL: redis://redis:6379 REDIS_URL: redis://redis:6379
DATABASE_URL: postgresql://${POSTGRES_USER:-lidifydb}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-lidify} DATABASE_URL: postgresql://${POSTGRES_USER:-kimadb}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-kima}
BACKEND_URL: http://backend:3006 BACKEND_URL: http://backend:3006
MUSIC_PATH: /music MUSIC_PATH: /music
SLEEP_INTERVAL: ${CLAP_SLEEP_INTERVAL:-5} SLEEP_INTERVAL: ${CLAP_SLEEP_INTERVAL:-5}
NUM_WORKERS: ${CLAP_WORKERS:-2} NUM_WORKERS: ${CLAP_WORKERS:-2}
THREADS_PER_WORKER: ${CLAP_THREADS_PER_WORKER:-1} THREADS_PER_WORKER: ${CLAP_THREADS_PER_WORKER:-1}
MODEL_IDLE_TIMEOUT: ${CLAP_MODEL_IDLE_TIMEOUT:-300} MODEL_IDLE_TIMEOUT: ${CLAP_MODEL_IDLE_TIMEOUT:-300}
INTERNAL_API_SECRET: ${INTERNAL_API_SECRET:-lidify-internal-secret-change-me} INTERNAL_API_SECRET: ${INTERNAL_API_SECRET:-kima-internal-secret-change-me}
volumes: volumes:
- ${MUSIC_PATH:-./music}:/music:ro - ${MUSIC_PATH:-./music}:/music:ro
depends_on: depends_on:
@@ -324,7 +324,7 @@ services:
# capabilities: [gpu] # capabilities: [gpu]
volumes: volumes:
# Lidify core # Kima core
postgres_data: postgres_data:
backend_cache: backend_cache:
backend_logs: backend_logs:
@@ -336,4 +336,4 @@ volumes:
networks: networks:
default: default:
name: lidify_network name: kima_network
+1 -1
View File
@@ -20,7 +20,7 @@ if [ "$(id -u)" = "0" ]; then
exit 1 exit 1
fi fi
echo "[START] Starting Lidify Frontend..." echo "[START] Starting Kima Frontend..."
echo "[CONFIG] Environment: ${NODE_ENV:-production}" echo "[CONFIG] Environment: ${NODE_ENV:-production}"
echo "[CONFIG] API URL: ${NEXT_PUBLIC_API_URL:-not set}" echo "[CONFIG] API URL: ${NEXT_PUBLIC_API_URL:-not set}"