Docker File Update
This commit is contained in:
52
Dockerfile
Normal file
52
Dockerfile
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Stage 1: Build Frontend (SvelteKit)
|
||||||
|
FROM node:20-slim AS frontend-builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package.json package-lock.json ./
|
||||||
|
# Install dependencies
|
||||||
|
RUN npm ci
|
||||||
|
# Copy source
|
||||||
|
COPY . .
|
||||||
|
# Build static files (outputs to build/)
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Stage 2: Backend (Python Flask + GPU Support)
|
||||||
|
# Use official PyTorch image with CUDA 12.1 support
|
||||||
|
FROM pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime
|
||||||
|
|
||||||
|
# Install system dependencies for audio (libsndfile) and ffmpeg
|
||||||
|
# reliable ffmpeg install on debian-based images
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libsndfile1 \
|
||||||
|
ffmpeg \
|
||||||
|
git \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy python requirements
|
||||||
|
# We remove torch/torchaudio from requirements briefly during install to avoid re-installing CPU versions
|
||||||
|
# or we trust pip to see the installed version satisfies it.
|
||||||
|
COPY server/requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Copy backend code
|
||||||
|
COPY server/ .
|
||||||
|
|
||||||
|
# Copy built frontend from Stage 1 into the expected relative path
|
||||||
|
# app.py expects '../build', so we copy to /build and structure appropriately
|
||||||
|
# However, simpler is to copy build/ to /app/build and adjust app.py or folder structure.
|
||||||
|
# Let's mirror the structure: /app/server (WORKDIR) and /app/build
|
||||||
|
COPY --from=frontend-builder /app/build /app/build
|
||||||
|
|
||||||
|
# Set working directory to server where app.py resides
|
||||||
|
WORKDIR /app/server
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
ENV PORT=5000
|
||||||
|
|
||||||
|
# Expose port
|
||||||
|
EXPOSE ${PORT}
|
||||||
|
|
||||||
|
# Run the application
|
||||||
|
CMD ["python", "app.py"]
|
||||||
24
README.md
24
README.md
@@ -21,6 +21,18 @@ AudioImage is a powerful web-based tool for Audio Spectrogram Art and Digital St
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
### Method 1: Docker (Recommended for GPU)
|
||||||
|
The easiest way to run AudioImage with full GPU acceleration is using Docker.
|
||||||
|
|
||||||
|
1. **Prerequisites**: Docker Desktop + NVIDIA Container Toolkit (for GPU).
|
||||||
|
2. **Run**:
|
||||||
|
```bash
|
||||||
|
docker compose up --build
|
||||||
|
```
|
||||||
|
3. Open `http://localhost:5000`.
|
||||||
|
|
||||||
|
### Method 2: Manual Setup
|
||||||
|
|
||||||
1. **Backend Setup**:
|
1. **Backend Setup**:
|
||||||
```bash
|
```bash
|
||||||
cd server
|
cd server
|
||||||
@@ -29,12 +41,6 @@ AudioImage is a powerful web-based tool for Audio Spectrogram Art and Digital St
|
|||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
*Optional for GPU support:*
|
|
||||||
```bash
|
|
||||||
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
||||||
```
|
|
||||||
*(Adjust CUDA version as needed)*
|
|
||||||
|
|
||||||
2. **Frontend Setup**:
|
2. **Frontend Setup**:
|
||||||
```bash
|
```bash
|
||||||
# Root directory
|
# Root directory
|
||||||
@@ -42,15 +48,11 @@ AudioImage is a powerful web-based tool for Audio Spectrogram Art and Digital St
|
|||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
## Running the Application
|
3. **Run**:
|
||||||
|
|
||||||
1. Start the Flask server (which serves the frontend):
|
|
||||||
```bash
|
```bash
|
||||||
cd server
|
cd server
|
||||||
source venv/bin/activate
|
|
||||||
python app.py
|
python app.py
|
||||||
```
|
```
|
||||||
2. Open your browser to `http://127.0.0.1:5000`.
|
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
|
|||||||
19
docker-compose.yml
Normal file
19
docker-compose.yml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
services:
|
||||||
|
audio-image:
|
||||||
|
build: .
|
||||||
|
container_name: audio-image
|
||||||
|
ports:
|
||||||
|
- "${PORT:-5000}:5000"
|
||||||
|
volumes:
|
||||||
|
- ./server/uploads:/app/server/uploads
|
||||||
|
environment:
|
||||||
|
- FLASK_APP=app.py
|
||||||
|
- FLASK_DEBUG=${FLASK_DEBUG:-false}
|
||||||
|
restart: unless-stopped
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: 1
|
||||||
|
capabilities: [ gpu ]
|
||||||
12
example.env
Normal file
12
example.env
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Server Configuration
|
||||||
|
PORT=5000
|
||||||
|
FLASK_DEBUG=false
|
||||||
|
FLASK_ENV=production
|
||||||
|
|
||||||
|
# Application Settings
|
||||||
|
# Max upload size in MB (default 40 in code)
|
||||||
|
MAX_UPLOAD_MB=40
|
||||||
|
|
||||||
|
# Optional: UID/GID for permission handling in Docker volume mapping
|
||||||
|
# PUID=1000
|
||||||
|
# PGID=1000
|
||||||
@@ -234,4 +234,4 @@ def get_result(result_id):
|
|||||||
return jsonify({"error": "Result not found"}), 404
|
return jsonify({"error": "Result not found"}), 404
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True, port=5000, threaded=True)
|
app.run(host='0.0.0.0', debug=True, port=5000, threaded=True)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
--extra-index-url https://download.pytorch.org/whl/cu121
|
||||||
Flask
|
Flask
|
||||||
Flask-Cors
|
Flask-Cors
|
||||||
numpy
|
numpy
|
||||||
|
|||||||
Reference in New Issue
Block a user