mirror of
https://github.com/Chevron7Locked/kima-hub.git
synced 2026-06-19 07:37:17 +00:00
chore: rebrand Docker infrastructure to Kima
This commit is contained in:
+24
-24
@@ -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)
|
||||
# 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
|
||||
|
||||
@@ -129,7 +129,7 @@ if [ -f /data/.schema_ready ]; then
|
||||
fi
|
||||
|
||||
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!"
|
||||
exit 0
|
||||
fi
|
||||
@@ -144,7 +144,7 @@ done
|
||||
|
||||
echo "[wait-for-db] ERROR: Database schema not ready after ${TIMEOUT}s"
|
||||
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
|
||||
EOF
|
||||
|
||||
@@ -211,7 +211,7 @@ WORKDIR /app
|
||||
COPY healthcheck-prod.js /app/healthcheck.js
|
||||
|
||||
# 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]
|
||||
nodaemon=true
|
||||
logfile=/dev/null
|
||||
@@ -275,7 +275,7 @@ stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
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
|
||||
|
||||
[program:audio-analyzer-clap]
|
||||
@@ -288,12 +288,12 @@ stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
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
|
||||
EOF
|
||||
|
||||
# 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
|
||||
RUN cat > /app/start.sh << 'EOF'
|
||||
@@ -306,7 +306,7 @@ set -e
|
||||
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " Lidify - Premium Self-Hosted Music Server"
|
||||
echo " Kima - Premium Self-Hosted Music Server"
|
||||
echo ""
|
||||
echo " Features:"
|
||||
echo " - AI-Powered Vibe Matching (Essentia ML)"
|
||||
@@ -372,32 +372,32 @@ fi
|
||||
gosu postgres $PG_BIN/pg_ctl -D /data/postgres -w start
|
||||
|
||||
# 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 -c "CREATE USER lidify WITH PASSWORD 'lidify';"
|
||||
gosu postgres psql -tc "SELECT 1 FROM pg_database WHERE datname = 'lidify'" | grep -q 1 || \
|
||||
gosu postgres psql -c "CREATE DATABASE lidify OWNER lidify;"
|
||||
gosu postgres psql -tc "SELECT 1 FROM pg_roles WHERE rolname = 'kima'" | grep -q 1 || \
|
||||
gosu postgres psql -c "CREATE USER kima WITH PASSWORD 'kima';"
|
||||
gosu postgres psql -tc "SELECT 1 FROM pg_database WHERE datname = 'kima'" | grep -q 1 || \
|
||||
gosu postgres psql -c "CREATE DATABASE kima OWNER kima;"
|
||||
|
||||
# Create pgvector extension as superuser (required before migrations)
|
||||
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
|
||||
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..."
|
||||
ls -la prisma/migrations/ || echo "No migrations directory!"
|
||||
|
||||
# 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)
|
||||
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
|
||||
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..."
|
||||
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
|
||||
|
||||
if [ "$MIGRATIONS_EXIST" = "t" ]; then
|
||||
@@ -430,7 +430,7 @@ echo "✓ Migrations completed successfully"
|
||||
|
||||
# Verify schema exists before starting services
|
||||
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 "Database schema verification failed. Container will exit."
|
||||
exit 1
|
||||
@@ -471,20 +471,20 @@ fi
|
||||
# Write environment file for backend
|
||||
cat > /app/backend/.env << ENVEOF
|
||||
NODE_ENV=production
|
||||
DATABASE_URL=postgresql://lidify:lidify@localhost:5432/lidify
|
||||
DATABASE_URL=postgresql://kima:kima@localhost:5432/kima
|
||||
REDIS_URL=redis://localhost:6379
|
||||
PORT=3006
|
||||
MUSIC_PATH=/music
|
||||
TRANSCODE_CACHE_PATH=/data/cache/transcodes
|
||||
SESSION_SECRET=$SESSION_SECRET
|
||||
SETTINGS_ENCRYPTION_KEY=$SETTINGS_ENCRYPTION_KEY
|
||||
INTERNAL_API_SECRET=lidify-internal-aio
|
||||
INTERNAL_API_SECRET=kima-internal-aio
|
||||
ENVEOF
|
||||
|
||||
echo "Starting Lidify..."
|
||||
echo "Starting Kima..."
|
||||
exec env \
|
||||
NODE_ENV=production \
|
||||
DATABASE_URL="postgresql://lidify:lidify@localhost:5432/lidify" \
|
||||
DATABASE_URL="postgresql://kima:kima@localhost:5432/kima" \
|
||||
SESSION_SECRET="$SESSION_SECRET" \
|
||||
SETTINGS_ENCRYPTION_KEY="$SETTINGS_ENCRYPTION_KEY" \
|
||||
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
|
||||
|
||||
@@ -20,7 +20,7 @@ if [ "$(id -u)" = "0" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[START] Starting Lidify Backend..."
|
||||
echo "[START] Starting Kima Backend..."
|
||||
|
||||
# Docker Compose health checks ensure database and Redis are ready
|
||||
# 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"
|
||||
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] Environment: ${NODE_ENV:-production}"
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#!/bin/bash
|
||||
# Lidify Deploy Script
|
||||
# Kima Deploy Script
|
||||
# Builds Docker image and cleans up old images/cache to prevent disk bloat
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
IMAGE_NAME="${DOCKERHUB_USERNAME:-chevron7locked}/lidify"
|
||||
IMAGE_NAME="${DOCKERHUB_USERNAME:-chevron7locked}/kima"
|
||||
VERSION="${VERSION:-latest}"
|
||||
FULL_IMAGE="${IMAGE_NAME}:${VERSION}"
|
||||
|
||||
@@ -15,7 +15,7 @@ GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}=== Lidify Deploy ===${NC}"
|
||||
echo -e "${GREEN}=== Kima Deploy ===${NC}"
|
||||
echo "Building: ${FULL_IMAGE}"
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Lidify Dev Services
|
||||
# Kima Dev Services
|
||||
# Run alongside npm dev servers for audio analysis
|
||||
#
|
||||
# Usage:
|
||||
@@ -12,25 +12,25 @@
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
container_name: lidify_dev_db
|
||||
container_name: kima_dev_db
|
||||
environment:
|
||||
POSTGRES_USER: lidify
|
||||
POSTGRES_PASSWORD: lidify
|
||||
POSTGRES_DB: lidify
|
||||
POSTGRES_USER: kima
|
||||
POSTGRES_PASSWORD: kima
|
||||
POSTGRES_DB: kima
|
||||
volumes:
|
||||
- postgres_dev_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "5433:5432"
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U lidify -d lidify"]
|
||||
test: ["CMD-SHELL", "pg_isready -U kima -d kima"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: lidify_dev_redis
|
||||
container_name: kima_dev_redis
|
||||
ports:
|
||||
- "6380:6379"
|
||||
restart: unless-stopped
|
||||
@@ -44,11 +44,11 @@ services:
|
||||
audio-analyzer:
|
||||
build:
|
||||
context: ./services/audio-analyzer
|
||||
container_name: lidify_audio_analyzer
|
||||
container_name: kima_audio_analyzer
|
||||
environment:
|
||||
# Connect to host machine's services (or Docker services)
|
||||
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: /music
|
||||
BATCH_SIZE: 10
|
||||
|
||||
@@ -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
|
||||
#
|
||||
# Features included:
|
||||
@@ -12,20 +12,20 @@
|
||||
# 3. Open http://localhost:3030
|
||||
|
||||
services:
|
||||
lidify:
|
||||
image: ${DOCKERHUB_USERNAME:-chevron7locked}/lidify:${VERSION:-latest}
|
||||
container_name: lidify
|
||||
kima:
|
||||
image: ${DOCKERHUB_USERNAME:-chevron7locked}/kima:${VERSION:-latest}
|
||||
container_name: kima
|
||||
ports:
|
||||
- "${PORT:-3030}:3030"
|
||||
volumes:
|
||||
# REQUIRED: Path to your music library
|
||||
- ${MUSIC_PATH:-/path/to/your/music}:/music
|
||||
# Persistent data (database, cache, etc.)
|
||||
- lidify_data:/data
|
||||
- kima_data:/data
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
- 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
|
||||
# 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}
|
||||
@@ -41,4 +41,4 @@ services:
|
||||
retries: 3
|
||||
|
||||
volumes:
|
||||
lidify_data:
|
||||
kima_data:
|
||||
|
||||
+15
-15
@@ -1,5 +1,5 @@
|
||||
# Lidify Full Stack - Production Deployment
|
||||
# Uses pre-built Lidify image from DockerHub + all external services
|
||||
# Kima Full Stack - Production Deployment
|
||||
# Uses pre-built Kima image from DockerHub + all external services
|
||||
#
|
||||
# Usage:
|
||||
# docker compose -f docker-compose.server.yml up -d
|
||||
@@ -9,21 +9,21 @@ services:
|
||||
# LIDIFY (All-in-One: Frontend + Backend + PostgreSQL + Redis)
|
||||
# ==============================================================================
|
||||
|
||||
lidify:
|
||||
image: chevron7locked/lidify:latest
|
||||
container_name: lidify
|
||||
kima:
|
||||
image: chevron7locked/kima:latest
|
||||
container_name: kima
|
||||
ports:
|
||||
- "${FRONTEND_PORT:-3030}:3030"
|
||||
volumes:
|
||||
# IMPORTANT: CHANGE THIS to your music library path
|
||||
- ${MUSIC_PATH:-/path/to/your/music}:/music
|
||||
# Persistent data (database, cache, covers, etc.)
|
||||
- lidify_data:/data
|
||||
- kima_data:/data
|
||||
environment:
|
||||
- TZ=${TZ:-America/Chicago}
|
||||
# Generate with: openssl rand -base64 32
|
||||
- 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
|
||||
# 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}
|
||||
@@ -52,7 +52,7 @@ services:
|
||||
# Lidarr - Music collection manager
|
||||
lidarr:
|
||||
image: lscr.io/linuxserver/lidarr:latest
|
||||
container_name: lidify_lidarr
|
||||
container_name: kima_lidarr
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -68,7 +68,7 @@ services:
|
||||
# Prowlarr - Indexer manager
|
||||
prowlarr:
|
||||
image: lscr.io/linuxserver/prowlarr:latest
|
||||
container_name: lidify_prowlarr
|
||||
container_name: kima_prowlarr
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -82,7 +82,7 @@ services:
|
||||
# FlareSolverr - Cloudflare bypass for Prowlarr
|
||||
flaresolverr:
|
||||
image: ghcr.io/flaresolverr/flaresolverr:latest
|
||||
container_name: lidify_flaresolverr
|
||||
container_name: kima_flaresolverr
|
||||
environment:
|
||||
- LOG_LEVEL=${LOG_LEVEL:-info}
|
||||
- LOG_HTML=${LOG_HTML:-false}
|
||||
@@ -95,7 +95,7 @@ services:
|
||||
# qBittorrent - Torrent client
|
||||
qbittorrent:
|
||||
image: lscr.io/linuxserver/qbittorrent:latest
|
||||
container_name: lidify_qbittorrent
|
||||
container_name: kima_qbittorrent
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -114,7 +114,7 @@ services:
|
||||
# NZBGet - Usenet client
|
||||
nzbget:
|
||||
image: lscr.io/linuxserver/nzbget:latest
|
||||
container_name: lidify_nzbget
|
||||
container_name: kima_nzbget
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -128,8 +128,8 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
# Lidify
|
||||
lidify_data:
|
||||
# Kima
|
||||
kima_data:
|
||||
# External services
|
||||
lidarr_config:
|
||||
prowlarr_config:
|
||||
@@ -138,4 +138,4 @@ volumes:
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: lidify_network
|
||||
name: kima_network
|
||||
|
||||
+14
-14
@@ -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.
|
||||
# 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
|
||||
#
|
||||
# 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:
|
||||
# Lidarr - Music collection manager
|
||||
lidarr:
|
||||
image: lscr.io/linuxserver/lidarr:latest
|
||||
container_name: lidify_lidarr
|
||||
container_name: kima_lidarr
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -24,12 +24,12 @@ services:
|
||||
- "8686:8686"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- lidify_network
|
||||
- kima_network
|
||||
|
||||
# Prowlarr - Indexer manager
|
||||
prowlarr:
|
||||
image: lscr.io/linuxserver/prowlarr:latest
|
||||
container_name: lidify_prowlarr
|
||||
container_name: kima_prowlarr
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -40,12 +40,12 @@ services:
|
||||
- "9696:9696"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- lidify_network
|
||||
- kima_network
|
||||
|
||||
# FlareSolverr - Cloudflare bypass for Prowlarr
|
||||
flaresolverr:
|
||||
image: ghcr.io/flaresolverr/flaresolverr:latest
|
||||
container_name: lidify_flaresolverr
|
||||
container_name: kima_flaresolverr
|
||||
environment:
|
||||
- LOG_LEVEL=${LOG_LEVEL:-info}
|
||||
- LOG_HTML=${LOG_HTML:-false}
|
||||
@@ -55,12 +55,12 @@ services:
|
||||
- "8191:8191"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- lidify_network
|
||||
- kima_network
|
||||
|
||||
# qBittorrent - Torrent client
|
||||
qbittorrent:
|
||||
image: lscr.io/linuxserver/qbittorrent:latest
|
||||
container_name: lidify_qbittorrent
|
||||
container_name: kima_qbittorrent
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -76,12 +76,12 @@ services:
|
||||
- "6881:6881/udp"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- lidify_network
|
||||
- kima_network
|
||||
|
||||
# NZBGet - Usenet client
|
||||
nzbget:
|
||||
image: lscr.io/linuxserver/nzbget:latest
|
||||
container_name: lidify_nzbget
|
||||
container_name: kima_nzbget
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -94,7 +94,7 @@ services:
|
||||
- "6789:6789"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- lidify_network
|
||||
- kima_network
|
||||
|
||||
volumes:
|
||||
lidarr_config:
|
||||
@@ -103,5 +103,5 @@ volumes:
|
||||
nzbget_config:
|
||||
|
||||
networks:
|
||||
lidify_network:
|
||||
kima_network:
|
||||
external: true
|
||||
|
||||
+29
-29
@@ -3,18 +3,18 @@ services:
|
||||
# LIDIFY CORE APPLICATION
|
||||
# ==============================================================================
|
||||
|
||||
# Backend API - Your Lidify Express.js server
|
||||
# Backend API - Your Kima Express.js server
|
||||
backend:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
container_name: lidify_backend
|
||||
container_name: kima_backend
|
||||
environment:
|
||||
# Database
|
||||
DATABASE_URL: postgresql://${POSTGRES_USER:-lidifydb}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-lidify}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-lidifydb}
|
||||
DATABASE_URL: postgresql://${POSTGRES_USER:-kimadb}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-kima}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-kimadb}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-lidify}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-kima}
|
||||
REDIS_URL: redis://redis:6379
|
||||
|
||||
# Server config
|
||||
@@ -36,9 +36,9 @@ services:
|
||||
ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:3030}
|
||||
|
||||
# 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
|
||||
LIDIFY_CALLBACK_URL: ${LIDIFY_CALLBACK_URL:-http://backend:3006}
|
||||
# Debug: enable extra podcast stream/cache logging
|
||||
@@ -64,9 +64,9 @@ services:
|
||||
default:
|
||||
aliases:
|
||||
- backend
|
||||
- lidify_backend
|
||||
- kima_backend
|
||||
|
||||
# Frontend Web UI - Your Lidify Next.js app
|
||||
# Frontend Web UI - Your Kima Next.js app
|
||||
frontend:
|
||||
build:
|
||||
context: ./frontend
|
||||
@@ -77,7 +77,7 @@ services:
|
||||
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-}
|
||||
# Build type: "nightly" for dev builds, unset/empty for tagged releases
|
||||
NEXT_PUBLIC_BUILD_TYPE: ${NEXT_PUBLIC_BUILD_TYPE:-nightly}
|
||||
container_name: lidify_frontend
|
||||
container_name: kima_frontend
|
||||
environment:
|
||||
NODE_ENV: ${NODE_ENV:-production}
|
||||
# Used by next.config.ts rewrites() inside the container.
|
||||
@@ -102,11 +102,11 @@ services:
|
||||
|
||||
postgres:
|
||||
image: pgvector/pgvector:pg16
|
||||
container_name: lidify_db
|
||||
container_name: kima_db
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-lidifydb}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-kimadb}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-lidify}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-kima}
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
@@ -115,12 +115,12 @@ services:
|
||||
healthcheck:
|
||||
# IMPORTANT:
|
||||
# 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",
|
||||
# so without -d this will spam logs with: FATAL: database "lidifydb" does not exist
|
||||
# Our default user is "kimadb" but default database is "kima",
|
||||
# so without -d this will spam logs with: FATAL: database "kimadb" does not exist
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"pg_isready -U ${POSTGRES_USER:-lidifydb} -d ${POSTGRES_DB:-lidify}",
|
||||
"pg_isready -U ${POSTGRES_USER:-kimadb} -d ${POSTGRES_DB:-kima}",
|
||||
]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
@@ -128,7 +128,7 @@ services:
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: lidify_redis
|
||||
container_name: kima_redis
|
||||
ports:
|
||||
- "${REDIS_PORT:-6379}:6379"
|
||||
restart: unless-stopped
|
||||
@@ -145,7 +145,7 @@ services:
|
||||
# Lidarr - Music collection manager
|
||||
lidarr:
|
||||
image: lscr.io/linuxserver/lidarr:latest
|
||||
container_name: lidify_lidarr
|
||||
container_name: kima_lidarr
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -161,7 +161,7 @@ services:
|
||||
# Prowlarr - Indexer manager
|
||||
prowlarr:
|
||||
image: lscr.io/linuxserver/prowlarr:latest
|
||||
container_name: lidify_prowlarr
|
||||
container_name: kima_prowlarr
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -175,7 +175,7 @@ services:
|
||||
# FlareSolverr - Cloudflare bypass for Prowlarr
|
||||
flaresolverr:
|
||||
image: ghcr.io/flaresolverr/flaresolverr:latest
|
||||
container_name: lidify_flaresolverr
|
||||
container_name: kima_flaresolverr
|
||||
environment:
|
||||
- LOG_LEVEL=${LOG_LEVEL:-info}
|
||||
- LOG_HTML=${LOG_HTML:-false}
|
||||
@@ -191,7 +191,7 @@ services:
|
||||
# qBittorrent - Torrent client
|
||||
qbittorrent:
|
||||
image: lscr.io/linuxserver/qbittorrent:latest
|
||||
container_name: lidify_qbittorrent
|
||||
container_name: kima_qbittorrent
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -210,7 +210,7 @@ services:
|
||||
# SABnzbd - Usenet client
|
||||
sabnzbd:
|
||||
image: lscr.io/linuxserver/sabnzbd:latest
|
||||
container_name: lidify_sabnzbd
|
||||
container_name: kima_sabnzbd
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
@@ -230,10 +230,10 @@ services:
|
||||
audio-analyzer:
|
||||
build:
|
||||
context: ./services/audio-analyzer
|
||||
container_name: lidify_audio_analyzer
|
||||
container_name: kima_audio_analyzer
|
||||
environment:
|
||||
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
|
||||
BATCH_SIZE: ${AUDIO_ANALYSIS_BATCH_SIZE:-10}
|
||||
SLEEP_INTERVAL: ${AUDIO_ANALYSIS_INTERVAL:-5}
|
||||
@@ -285,17 +285,17 @@ services:
|
||||
audio-analyzer-clap:
|
||||
build:
|
||||
context: ./services/audio-analyzer-clap
|
||||
container_name: lidify_audio_analyzer_clap
|
||||
container_name: kima_audio_analyzer_clap
|
||||
environment:
|
||||
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
|
||||
MUSIC_PATH: /music
|
||||
SLEEP_INTERVAL: ${CLAP_SLEEP_INTERVAL:-5}
|
||||
NUM_WORKERS: ${CLAP_WORKERS:-2}
|
||||
THREADS_PER_WORKER: ${CLAP_THREADS_PER_WORKER:-1}
|
||||
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:
|
||||
- ${MUSIC_PATH:-./music}:/music:ro
|
||||
depends_on:
|
||||
@@ -324,7 +324,7 @@ services:
|
||||
# capabilities: [gpu]
|
||||
|
||||
volumes:
|
||||
# Lidify core
|
||||
# Kima core
|
||||
postgres_data:
|
||||
backend_cache:
|
||||
backend_logs:
|
||||
@@ -336,4 +336,4 @@ volumes:
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: lidify_network
|
||||
name: kima_network
|
||||
|
||||
@@ -20,7 +20,7 @@ if [ "$(id -u)" = "0" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[START] Starting Lidify Frontend..."
|
||||
echo "[START] Starting Kima Frontend..."
|
||||
echo "[CONFIG] Environment: ${NODE_ENV:-production}"
|
||||
echo "[CONFIG] API URL: ${NEXT_PUBLIC_API_URL:-not set}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user