diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile new file mode 100644 index 0000000..ad4bfd4 --- /dev/null +++ b/docker/dev/Dockerfile @@ -0,0 +1,26 @@ +# syntax=docker/dockerfile:1 +FROM python:3.11-slim + +WORKDIR /app + +# Use apt cache mount to speed up system package installation across builds +RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt \ + apt-get update && apt-get install -y \ + curl \ + libgl1 \ + libglib2.0-0 \ + libxcb1 + +COPY requirements.txt . + +# Use pip cache mount so it remembers downloaded wheels +RUN --mount=type=cache,target=/root/.cache/pip \ + pip install -r requirements.txt + +ENV PYTHONPATH=/app + +EXPOSE 8000 + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] diff --git a/docker/dev/compose.yml b/docker/dev/compose.yml new file mode 100644 index 0000000..5b7c2f0 --- /dev/null +++ b/docker/dev/compose.yml @@ -0,0 +1,83 @@ +services: + ollama: + image: ollama/ollama:latest + container_name: fireform-ollama + ports: + - "127.0.0.1:11434:11434" + volumes: + - ollama_data:/root/.ollama + networks: + - fireform-network + healthcheck: + test: ["CMD-SHELL", "ollama list || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + + whisper: + image: onerahmet/openai-whisper-asr-webservice:latest + container_name: fireform-whisper + environment: + - ASR_ENGINE=faster_whisper + - ASR_MODEL=${WHISPER_MODEL:-small.en} + - ASR_MODEL_PATH=/data/whisper + volumes: + - whisper_models:/data/whisper + ports: + - "127.0.0.1:9000:9000" + networks: + - fireform-network + healthcheck: + test: ["CMD-SHELL", "python3 -c \"import urllib.request; urllib.request.urlopen('http://localhost:9000/docs')\" || exit 1"] + interval: 15s + timeout: 5s + retries: 5 + start_period: 60s + + app: + build: + context: ../.. + dockerfile: docker/dev/Dockerfile + container_name: fireform-app + depends_on: + ollama: + condition: service_healthy + whisper: + condition: service_started + command: ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] + volumes: + - ../..:/app + - fireform_db:/data/db + - fireform_uploads:/data/uploads + ports: + - "${APP_PORT:-8000}:8000" + environment: + - PYTHONUNBUFFERED=1 + - CUDA_VISIBLE_DEVICES= + - PYTHONPATH=/app + - OLLAMA_HOST=${OLLAMA_HOST:-http://ollama:11434} + - OLLAMA_TIMEOUT=${OLLAMA_TIMEOUT:-300} + - OLLAMA_MODEL=${OLLAMA_MODEL:-qwen2.5:1.5b} + - WHISPER_HOST=${WHISPER_HOST:-http://whisper:9000} + - FIREFORM_DB_PATH=/data/db/fireform.db + - FIREFORM_DATA_DIR=/data/uploads + - FIREFORM_TEMPLATE_DIR=/data/uploads + - FIREFORM_DB_ECHO=${FIREFORM_DB_ECHO:-true} + - FRONTEND_ORIGINS=${FRONTEND_ORIGINS:-http://localhost:5173,http://127.0.0.1:5173} + networks: + - fireform-network + +volumes: + ollama_data: + driver: local + whisper_models: + driver: local + fireform_db: + driver: local + fireform_uploads: + driver: local + +networks: + fireform-network: + driver: bridge