voirs-feedback 0.1.0-alpha.3

Real-time feedback and interactive training system for VoiRS
Documentation
# Multi-stage Dockerfile for VoiRS Feedback System
# This provides containerized deployment with optimized production builds

# Stage 1: Build environment
FROM rust:1.75-alpine AS builder

# Install build dependencies
RUN apk add --no-cache \
    musl-dev \
    pkgconfig \
    openssl-dev \
    sqlite-dev \
    postgresql-dev \
    gcc \
    g++ \
    make \
    libc-dev

WORKDIR /usr/src/app

# Copy Cargo files for dependency caching
COPY Cargo.toml Cargo.lock ./
COPY crates/voirs-feedback/Cargo.toml ./crates/voirs-feedback/

# Create dummy source files to cache dependencies
RUN mkdir -p crates/voirs-feedback/src && \
    echo "fn main() {}" > crates/voirs-feedback/src/main.rs && \
    echo "// dummy" > crates/voirs-feedback/src/lib.rs

# Build dependencies (this will be cached if Cargo files don't change)
RUN cargo build --release --manifest-path crates/voirs-feedback/Cargo.toml

# Remove dummy files and copy real source
RUN rm -rf crates/voirs-feedback/src
COPY crates/voirs-feedback/src ./crates/voirs-feedback/src
COPY crates/voirs-feedback/tests ./crates/voirs-feedback/tests
COPY crates/voirs-feedback/examples ./crates/voirs-feedback/examples

# Copy other required crates (adjust paths as needed)
COPY crates/voirs-sdk ./crates/voirs-sdk
COPY crates/voirs-recognizer ./crates/voirs-recognizer
COPY crates/voirs-evaluation ./crates/voirs-evaluation

# Build the application
RUN cargo build --release --manifest-path crates/voirs-feedback/Cargo.toml

# Stage 2: Runtime environment
FROM alpine:3.18

# Install runtime dependencies
RUN apk add --no-cache \
    ca-certificates \
    libgcc \
    openssl \
    sqlite \
    postgresql-client

# Create app user for security
RUN addgroup -g 1000 voirs && \
    adduser -D -s /bin/sh -u 1000 -G voirs voirs

WORKDIR /app

# Copy the compiled binary
COPY --from=builder /usr/src/app/target/release/voirs-feedback /app/
COPY --from=builder /usr/src/app/crates/voirs-feedback/examples /app/examples

# Create necessary directories
RUN mkdir -p /app/data /app/logs /app/config && \
    chown -R voirs:voirs /app

# Copy configuration files
COPY crates/voirs-feedback/config /app/config

USER voirs

# Expose ports
EXPOSE 8080 8081 8082

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1

# Environment variables
ENV RUST_LOG=info
ENV VOIRS_CONFIG_PATH=/app/config
ENV VOIRS_DATA_PATH=/app/data
ENV VOIRS_LOG_PATH=/app/logs

# Default command
CMD ["./voirs-feedback"]