# Multi-stage build для оптимизации размера образа # Этап 1: Сборка Go приложения FROM golang:1.25-alpine AS builder WORKDIR /build # Копирование go mod файлов COPY go.mod ./ RUN go mod download # Копирование исходного кода COPY . . # Сборка приложения RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o go-speech . # Этап 2: Финальный образ с зависимостями ARG BASE_IMAGE FROM ${BASE_IMAGE} COPY piper.tar.gz /tmp/piper.tar.gz # Установка необходимых пакетов RUN apt-get update && \ apt-get install -y \ ca-certificates \ ffmpeg \ curl \ bash \ libstdc++6 \ tar \ gzip && \ rm -rf /var/lib/apt/lists/* # Установка Piper TTS RUN mkdir -p /opt/piper && \ cd /opt/piper && \ tar -xzf /tmp/piper.tar.gz && \ PIPER_BIN=$(find /opt/piper -name "piper" -type f | head -1) && \ chmod +x $PIPER_BIN && \ find /opt/piper -name "*.so*" -type f -exec chmod +x {} \; && \ ln -sf $PIPER_BIN /usr/local/bin/piper # Создание директорий RUN mkdir -p /app/models /app/certs /app/tmp COPY models/ /app/models/ # Копирование бинарника из builder COPY --from=builder /build/go-speech /app/go-speech # Рабочая директория WORKDIR /app # Переменные окружения по умолчанию ENV PORT=8443 ENV PIPER_PATH=/usr/local/bin/piper ENV PIPER_BIN_PATH=/opt/piper ENV MODEL_DIR=/app/models ENV GO_SPEECH_VOICE=ruslan ENV FFMPEG_PATH=/usr/bin/ffmpeg ENV CERT_FILE=/app/certs/server.crt ENV KEY_FILE=/app/certs/server.key ENV LD_LIBRARY_PATH=/opt/piper:/usr/lib:/usr/local/lib:${LD_LIBRARY_PATH} # Экспорт порта EXPOSE 8443 # Запуск приложения CMD ["./go-speech"]