77 lines
2.2 KiB
Docker
77 lines
2.2 KiB
Docker
# 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: Финальный образ с зависимостями
|
||
FROM alpine:latest
|
||
|
||
# RUN curl -L https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz -o /tmp/piper.tar.gz
|
||
|
||
COPY piper.tar.gz /tmp/piper.tar.gz
|
||
|
||
# Установка необходимых пакетов
|
||
RUN apk add --no-cache \
|
||
ca-certificates \
|
||
ffmpeg \
|
||
curl \
|
||
bash \
|
||
libc6-compat \
|
||
libstdc++
|
||
|
||
# Установка 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 && \
|
||
rm -f /tmp/piper.tar.gz
|
||
|
||
# Создание директорий
|
||
RUN mkdir -p /app/models /app/certs /app/tmp
|
||
|
||
COPY models/ /app/models/
|
||
|
||
# Копирование бинарника из builder
|
||
COPY --from=builder /build/go-speech /app/go-speech
|
||
|
||
# Примечание: Модели должны быть смонтированы через volume при запуске контейнера
|
||
# Пример: -v $(pwd)/models:/app/models:ro
|
||
# Или скопированы в образ на этапе сборки, если они включены в репозиторий
|
||
|
||
# Рабочая директория
|
||
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"]
|
||
|