{"owner":"Zackriya-Solutions","repo":"meetily","hasDocker":true,"hasCompose":true,"hasDockerfile":false,"composePath":"backend/docker-compose.yml","servicesCount":6,"services":[{"name":"whisper-server","image":"whisper-server:${TAG:-cpu}","build":{"context":".","dockerfile":"${DOCKERFILE:-Dockerfile.server-cpu}"},"restart":"unless-stopped","ports":["${WHISPER_PORT:-8178}:8178"],"environment":["WHISPER_HOST=0.0.0.0","WHISPER_PORT=8178","WHISPER_MODEL=${WHISPER_MODEL:-models/ggml-base.en.bin}","WHISPER_THREADS=${WHISPER_THREADS:-0}","WHISPER_USE_GPU=${WHISPER_USE_GPU:-true}","WHISPER_LANGUAGE=${WHISPER_LANGUAGE:-en}","WHISPER_TRANSLATE=${WHISPER_TRANSLATE:-false}","WHISPER_DIARIZE=${WHISPER_DIARIZE:-false}","WHISPER_PRINT_PROGRESS=${WHISPER_PRINT_PROGRESS:-true}"],"volumes":["whisper_models:/app/models","whisper_uploads:/app/uploads","${LOCAL_MODELS_DIR:-./models}:/app/local_models:ro","${CONFIG_DIR:-./config}:/app/config:ro"]},{"name":"whisper-server-macos","image":"whisper-server:macos","build":{"context":".","dockerfile":"Dockerfile.server-macos"},"restart":"unless-stopped","ports":["${WHISPER_PORT:-8178}:8178"],"environment":["WHISPER_HOST=0.0.0.0","WHISPER_PORT=8178","WHISPER_MODEL=${WHISPER_MODEL:-models/ggml-large-v3.bin}","WHISPER_THREADS=${WHISPER_THREADS:-0}","WHISPER_USE_GPU=false","WHISPER_LANGUAGE=${WHISPER_LANGUAGE:-en}","WHISPER_TRANSLATE=${WHISPER_TRANSLATE:-false}","WHISPER_DIARIZE=${WHISPER_DIARIZE:-false}","WHISPER_PRINT_PROGRESS=${WHISPER_PRINT_PROGRESS:-true}","WHISPER_PLATFORM=macos"],"volumes":["./models:/app/models","whisper_uploads:/app/uploads","${CONFIG_DIR:-./config}:/app/config:ro"]},{"name":"model-downloader","image":"alpine/curl:latest","command":"sh -c \"\n  echo '🔍 Checking for model: ggml-\\${MODEL_NAME}.bin'\n  if [ ! -f /models/ggml-\\${MODEL_NAME}.bin ] || [ ! -s /models/ggml-\\${MODEL_NAME}.bin ]; then\n    echo '📦 Downloading model: \\${MODEL_NAME}...'\n    echo '📋 This may take a few minutes depending on model size and connection speed'\n    # Create temp file to avoid partial downloads\n    curl -L -f --progress-bar \\\n      --connect-timeout 30 \\\n      --max-time 3600 \\\n      --retry 3 \\\n      --retry-delay 5 \\\n      --retry-connrefused \\\n      -o /models/ggml-\\${MODEL_NAME}.bin.tmp \\\n      https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-\\${MODEL_NAME}.bin\n    \n    # Verify download completed successfully  \n    if [ -s /models/ggml-\\${MODEL_NAME}.bin.tmp ]; then\n      mv /models/ggml-\\${MODEL_NAME}.bin.tmp /models/ggml-\\${MODEL_NAME}.bin\n      echo '✅ Model downloaded successfully: \\${MODEL_NAME}'\n      ls -lh /models/ggml-\\${MODEL_NAME}.bin\n    else\n      echo '❌ Download failed or file is empty'\n      rm -f /models/ggml-\\${MODEL_NAME}.bin.tmp\n      exit 1\n    fi\n  else\n    echo '✅ Model already exists: \\${MODEL_NAME}'\n    ls -lh /models/ggml-\\${MODEL_NAME}.bin\n  fi\n  echo '🎉 Model preparation complete'\n\"\n","environment":["MODEL_NAME=${MODEL_NAME:-base.en}"],"volumes":["whisper_models:/models"]},{"name":"meetily-backend","image":"meetily-backend:latest","build":{"context":".","dockerfile":"Dockerfile.app"},"restart":"unless-stopped","ports":["${APP_PORT:-5167}:5167"],"environment":["PYTHONUNBUFFERED=1","PYTHONPATH=/app","DATABASE_PATH=/app/data/meeting_minutes.db","OLLAMA_HOST=${OLLAMA_HOST:-http://host.docker.internal:11434}"],"volumes":["./data:/app/data","meeting_app_logs:/app/logs","${LOCAL_ENV_FILE:-./app/.env}:/app/.env:ro"],"depends_on":["whisper-server"]},{"name":"meetily-backend-macos","image":"meetily-backend:latest","build":{"context":".","dockerfile":"Dockerfile.app"},"restart":"unless-stopped","ports":["${APP_PORT:-5167}:5167"],"environment":["PYTHONUNBUFFERED=1","PYTHONPATH=/app","DATABASE_PATH=/app/data/meeting_minutes.db","OLLAMA_HOST=${OLLAMA_HOST:-http://host.docker.internal:11434}"],"volumes":["./data:/app/data","meeting_app_logs:/app/logs","${LOCAL_ENV_FILE:-./app/.env}:/app/.env:ro"],"depends_on":["whisper-server-macos"]},{"name":"web-ui","image":"nginx:alpine","ports":["${WEB_PORT:-80}:80"],"volumes":["./web:/usr/share/nginx/html:ro","./nginx.conf:/etc/nginx/nginx.conf:ro"],"depends_on":["whisper-server","meetily-backend"]}],"exposedPorts":["8178","5167","80"],"dockerRunCommand":"docker run -d --name meetily -p 8178:8178 --restart always meetily-backend:latest","podmanRunCommand":"podman run -d --name meetily -p 8178:8178 --restart always meetily-backend:latest","skopeoInspectCommand":"skopeo inspect docker://docker.io/library/meetily-backend:latest","orasPullCommand":"oras pull meetily-backend:latest","registryMeta":{"provider":"dockerhub","image":"library/meetily-backend","canonicalImage":"docker.io/library/meetily-backend:latest","latestTag":"latest","cliCommands":{"dockerRun":"docker run -d --name meetily -p 8178:8178 --restart always meetily-backend:latest","dockerPull":"docker pull meetily-backend:latest","podmanRun":"podman run -d --name meetily -p 8178:8178 --restart always meetily-backend:latest","skopeoInspect":"skopeo inspect docker://docker.io/library/meetily-backend:latest","orasPull":"oras pull meetily-backend:latest","composeYaml":"services:\n  meetily:\n    image: meetily-backend:latest\n    restart: unless-stopped\n    ports:\n      - \"8178:8178\""}}}