Add Docker deployment support
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
.Python
|
||||||
|
.pytest_cache/
|
||||||
|
.mypy_cache/
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
logs/
|
||||||
|
history/
|
||||||
|
models/
|
||||||
|
tmp/
|
||||||
|
client.png
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||||
|
PYTHONUNBUFFERED=1 \
|
||||||
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
|
PIP_NO_CACHE_DIR=1
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
ffmpeg \
|
||||||
|
sox \
|
||||||
|
libmagic1 \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY requirements.txt ./
|
||||||
|
RUN pip install --upgrade pip \
|
||||||
|
&& pip install -r requirements.txt
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN mkdir -p /app/logs /app/history
|
||||||
|
|
||||||
|
EXPOSE 5042
|
||||||
|
|
||||||
|
CMD ["python", "server.py", "--config", "config.docker.json"]
|
||||||
@@ -63,6 +63,56 @@ pip install -r requirements.txt
|
|||||||
python server.py
|
python server.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
The repository now includes a container setup for running the API in Docker.
|
||||||
|
|
||||||
|
### What gets mounted
|
||||||
|
|
||||||
|
- `./config.docker.json` -> `/app/config.docker.json`
|
||||||
|
- `./logs` -> `/app/logs`
|
||||||
|
- `./history` -> `/app/history`
|
||||||
|
- `./models` -> `/models`
|
||||||
|
|
||||||
|
Place your Whisper model inside `./models/whisper` or update `model_path` in `config.docker.json`.
|
||||||
|
|
||||||
|
### Build and run with Docker Compose
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up --build
|
||||||
|
```
|
||||||
|
|
||||||
|
The API will be available at:
|
||||||
|
|
||||||
|
```text
|
||||||
|
http://localhost:5042
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build and run with plain Docker
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build -t whisper-api-server .
|
||||||
|
docker run --rm -p 5042:5042 \
|
||||||
|
-v "$(pwd)/config.docker.json:/app/config.docker.json:ro" \
|
||||||
|
-v "$(pwd)/logs:/app/logs" \
|
||||||
|
-v "$(pwd)/history:/app/history" \
|
||||||
|
-v "$(pwd)/models:/models" \
|
||||||
|
whisper-api-server
|
||||||
|
```
|
||||||
|
|
||||||
|
### GPU note
|
||||||
|
|
||||||
|
The container image installs the same Python dependencies as the local setup, including CUDA-oriented PyTorch wheels on Linux x86_64. To actually use NVIDIA GPU acceleration at runtime, start the container with GPU access enabled in your Docker environment, for example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --rm --gpus all -p 5042:5042 \
|
||||||
|
-v "$(pwd)/config.docker.json:/app/config.docker.json:ro" \
|
||||||
|
-v "$(pwd)/logs:/app/logs" \
|
||||||
|
-v "$(pwd)/history:/app/history" \
|
||||||
|
-v "$(pwd)/models:/models" \
|
||||||
|
whisper-api-server
|
||||||
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
The service is configured through the `config.json` file:
|
The service is configured through the `config.json` file:
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"service_port": 5042,
|
||||||
|
"model_path": "/models/whisper",
|
||||||
|
"language": "russian",
|
||||||
|
"enable_history": true,
|
||||||
|
"max_history_days": 30,
|
||||||
|
"chunk_length_s": 28,
|
||||||
|
"batch_size": 6,
|
||||||
|
"max_new_tokens": 384,
|
||||||
|
"temperature": 0.01,
|
||||||
|
"return_timestamps": false,
|
||||||
|
"audio_rate": 16000,
|
||||||
|
"norm_level": "-0.55",
|
||||||
|
"compand_params": "0.3,1 -90,-90,-70,-50,-40,-15,0,0 -7 0 0.15",
|
||||||
|
"device_id": 0,
|
||||||
|
"file_validation": {
|
||||||
|
"max_file_size_mb": 500,
|
||||||
|
"allowed_extensions": [".wav", ".mp3", ".ogg", ".flac", ".m4a", ".oga", ".aac", ".webm"],
|
||||||
|
"allowed_mime_types": ["audio/wav", "audio/mpeg", "audio/ogg", "audio/flac", "audio/mp4", "audio/x-m4a", "audio/aac", "audio/webm"]
|
||||||
|
},
|
||||||
|
"log_level": "INFO",
|
||||||
|
"log_file": "logs/whisper_api.log",
|
||||||
|
"request_logging": {
|
||||||
|
"exclude_endpoints": ["/health", "/static"]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
services:
|
||||||
|
whisper-api:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: whisper-api-server
|
||||||
|
ports:
|
||||||
|
- "5042:5042"
|
||||||
|
volumes:
|
||||||
|
- ./config.docker.json:/app/config.docker.json:ro
|
||||||
|
- ./logs:/app/logs
|
||||||
|
- ./history:/app/history
|
||||||
|
- ./models:/models
|
||||||
|
restart: unless-stopped
|
||||||
Reference in New Issue
Block a user