before stt adding

This commit is contained in:
2025-11-28 17:43:00 +06:00
parent fccafad6de
commit f933c315e8
17 changed files with 10002 additions and 672 deletions

248
README.md
View File

@@ -64,37 +64,110 @@ sudo apt-get install ffmpeg
apk add ffmpeg
```
6 Сгенерируйте SSL сертификаты:
6 (Опционально) Сгенерируйте SSL сертификаты вручную:
```bash
./generate-certs.sh
```
**Примечание:** Если вы используете HTTPS (`GO_SPEECH_TLS=true`), сертификаты будут автоматически сгенерированы при первом запуске, если они отсутствуют.
7 Запустите сервис:
**Запуск в режиме HTTP (по умолчанию):**
```bash
# Использует порт 8080 по умолчанию
go run main.go
```
Или с переменными окружения:
**Запуск в режиме HTTP с указанием порта:**
```bash
GO_SPEECH_PORT=3000 go run main.go
```
**Запуск в режиме HTTPS с автогенерацией сертификатов:**
```bash
GO_SPEECH_TLS=true \
GO_SPEECH_PORT=8443 \
GO_SPEECH_VOICE=ruslan \
go run main.go
```
**Запуск в режиме HTTPS с указанием доменов для сертификата:**
```bash
GO_SPEECH_TLS=true \
GO_SPEECH_PORT=8443 \
GO_SPEECH_TLS_DOMAINS="example.com,api.example.com" \
GO_SPEECH_VOICE=ruslan \
go run main.go
```
**Запуск в режиме HTTPS с использованием CA сертификата:**
```bash
GO_SPEECH_TLS=true \
GO_SPEECH_PORT=8443 \
GO_SPEECH_CA_CERT=./ca/ca.crt \
GO_SPEECH_TLS_DOMAINS="example.com" \
GO_SPEECH_VOICE=ruslan \
go run main.go
```
**Запуск с разными голосами:**
```bash
# Голос Irina (женский)
GO_SPEECH_VOICE=irina go run main.go
# Голос Denis (мужской)
GO_SPEECH_VOICE=denis go run main.go
# Голос Dmitri (мужской)
GO_SPEECH_VOICE=dmitri go run main.go
```
**Запуск с указанием конкретной модели через MODEL_PATH:**
```bash
GO_SPEECH_VOICE=ruslan \
MODEL_PATH=/path/to/custom/ru_RU-ruslan-medium.onnx \
go run main.go
```
**Запуск в режиме продакшена (минимальное логирование):**
```bash
GO_SPEECH_MODE=release go run main.go
```
**Запуск с кастомными путями к утилитам:**
```bash
GO_SPEECH_PIPER_PATH=/opt/piper/bin/piper \
GO_SPEECH_FFMPEG_PATH=/opt/ffmpeg/bin/ffmpeg \
GO_SPEECH_MODEL_DIR=/data/models \
go run main.go
```
**Полный пример с переменными окружения:**
```bash
GO_SPEECH_PORT=8443 \
GO_SPEECH_TLS=true \
GO_SPEECH_PIPER_PATH=/usr/local/bin/piper \
GO_SPEECH_MODEL_DIR=./models \
GO_SPEECH_VOICE=ruslan \
GO_SPEECH_FFMPEG_PATH=/usr/bin/ffmpeg \
GO_SPEECH_CERT_FILE=./certs/server.crt \
GO_SPEECH_KEY_FILE=./certs/server.key \
GO_SPEECH_MODE=debug \
go run main.go
```
Для использования другого голоса (например, `denis`, `dmitri`, `irina`):
```bash
GO_SPEECH_VOICE=denis go run main.go
```
### Запуск через Podman/Docker
1 Соберите образ:
@@ -111,31 +184,117 @@ curl -L https://huggingface.co/rhasspy/piper-voices/resolve/main/ru/ru_RU/denis/
curl -L https://huggingface.co/rhasspy/piper-voices/resolve/main/ru/ru_RU/denis/medium/ru_RU-denis-medium.onnx.json -o models/ru_RU-denis-medium.onnx.json
```
3 Сгенерируйте сертификаты:
3 (Опционально) Сгенерируйте сертификаты вручную:
```bash
./generate-certs.sh
```
**Примечание:** При использовании `GO_SPEECH_TLS=true` сертификаты будут автоматически сгенерированы при первом запуске контейнера.
4 Запустите контейнер:
**Запуск в режиме HTTP:**
```bash
podman run -d \
--name go-speech \
-p 8080:8080 \
-e GO_SPEECH_PORT=8080 \
-e GO_SPEECH_VOICE=ruslan \
-v $(pwd)/models:/app/models:ro \
go-speech:latest
```
**Запуск в режиме HTTPS с автогенерацией сертификатов:**
```bash
podman run -d \
--name go-speech \
-p 8443:8443 \
-e GO_SPEECH_TLS=true \
-e GO_SPEECH_PORT=8443 \
-e GO_SPEECH_VOICE=ruslan \
-e GO_SPEECH_TLS_DOMAINS="example.com,api.example.com" \
-v $(pwd)/models:/app/models:ro \
-v $(pwd)/certs:/app/certs \
go-speech:latest
```
**Запуск с предварительно созданными сертификатами:**
```bash
podman run -d \
--name go-speech \
-p 8443:8443 \
-e GO_SPEECH_TLS=true \
-e GO_SPEECH_PORT=8443 \
-e GO_SPEECH_VOICE=ruslan \
-v $(pwd)/models:/app/models:ro \
-v $(pwd)/certs:/app/certs:ro \
go-speech:latest
```
Для использования другого голоса:
**Запуск с разными голосами:**
```bash
# Голос Irina
podman run -d \
--name go-speech-irina \
-p 8443:8443 \
-e GO_SPEECH_TLS=true \
-e GO_SPEECH_VOICE=irina \
-v $(pwd)/models:/app/models:ro \
-v $(pwd)/certs:/app/certs:ro \
go-speech:latest
# Голос Denis
podman run -d \
--name go-speech-denis \
-p 8444:8443 \
-e GO_SPEECH_TLS=true \
-e GO_SPEECH_VOICE=denis \
-v $(pwd)/models:/app/models:ro \
-v $(pwd)/certs:/app/certs:ro \
go-speech:latest
# Голос Dmitri
podman run -d \
--name go-speech-dmitri \
-p 8445:8443 \
-e GO_SPEECH_TLS=true \
-e GO_SPEECH_VOICE=dmitri \
-v $(pwd)/models:/app/models:ro \
-v $(pwd)/certs:/app/certs:ro \
go-speech:latest
```
**Запуск в режиме продакшена:**
```bash
podman run -d \
--name go-speech \
-p 8443:8443 \
-e GO_SPEECH_VOICE=denis \
-e GO_SPEECH_TLS=true \
-e GO_SPEECH_MODE=release \
-e GO_SPEECH_VOICE=ruslan \
-v $(pwd)/models:/app/models:ro \
-v $(pwd)/certs:/app/certs:ro \
go-speech:latest
```
**Запуск с кастомными путями и портом:**
```bash
podman run -d \
--name go-speech \
-p 9000:9000 \
-e GO_SPEECH_PORT=9000 \
-e GO_SPEECH_TLS=true \
-e GO_SPEECH_PIPER_PATH=/usr/local/bin/piper \
-e GO_SPEECH_FFMPEG_PATH=/usr/bin/ffmpeg \
-e GO_SPEECH_MODEL_DIR=/app/models \
-e GO_SPEECH_VOICE=ruslan \
-v $(pwd)/models:/app/models:ro \
-v $(pwd)/certs:/app/certs:ro \
go-speech:latest
@@ -180,20 +339,36 @@ sudo systemctl status go-speech
Откройте в браузере:
**Для HTTPS режима:**
``` text
https://localhost:8443/go-speech/front
```
**Для HTTP режима:**
``` text
http://localhost:8080/go-speech/front
```
### GET /go-speech/help
Отображение документации (README.md) в браузере.
**Доступ:**
**Для HTTPS режима:**
``` text
https://localhost:8443/go-speech/help
```
**Для HTTP режима:**
``` text
http://localhost:8080/go-speech/help
```
**Возможности:**
- Выбор голоса из доступных моделей (Ruslan, Irina, Denis, Dmitri)
@@ -281,20 +456,53 @@ curl https://localhost:8443/go-speech/api/v1/health --insecure
## Переменные окружения
- `PORT` - Порт для HTTPS сервера (по умолчанию: 8443)
- `CERT_FILE` - Путь к SSL сертификату (по умолчанию: certs/server.crt)
- `KEY_FILE` - Путь к SSL приватному ключу (по умолчанию: certs/server.key)
- `PIPER_PATH` - Путь к бинарнику Piper TTS (по умолчанию: /usr/local/bin/piper)
- `MODEL_DIR` - Директория с моделями (по умолчанию: models)
- `GO_SPEECH_VOICE` - Имя голоса для синтеза речи (по умолчанию: ruslan)
### Основные настройки
- `GO_SPEECH_PORT` - Порт для запуска сервера
- По умолчанию: `8443` (если `GO_SPEECH_TLS=true`) или `8080` (если TLS отключен)
- Можно указать любой доступный порт
- `GO_SPEECH_VOICE` - Имя голоса для синтеза речи (по умолчанию: `ruslan`)
- Доступные варианты: `ruslan`, `denis`, `dmitri`, `irina`
- Путь к модели формируется как: `{MODEL_DIR}/ru_RU-{GO_SPEECH_VOICE}-medium.onnx`
- `MODEL_PATH` - Полный путь к модели Piper TTS (опционально, переопределяет автоматический выбор на основе GO_SPEECH_VOICE)
- `FFMPEG_PATH` - Путь к бинарнику ffmpeg (по умолчанию: /usr/bin/ffmpeg)
- `GO_SPEECH_MODE` - Режим работы сервера (по умолчанию: debug)
- `MODEL_PATH` - Полный путь к модели Piper TTS (опционально)
- Переопределяет автоматический выбор на основе `GO_SPEECH_VOICE`
- Используется, если нужно указать конкретную модель напрямую
- `GO_SPEECH_MODE` - Режим работы сервера (по умолчанию: `debug`)
- `release` - Режим продакшена (минимальное логирование)
- Любое другое значение - Режим разработки (подробное логирование всех операций)
### Настройки TLS/HTTPS
- `GO_SPEECH_TLS` - Включение HTTPS режима (по умолчанию: не задано, используется HTTP)
- Если установлено в `true` - сервер запускается по HTTPS
- Если не задано или `false` - сервер запускается по HTTP
- При включенном HTTPS и отсутствии сертификатов - они будут автоматически сгенерированы
- `GO_SPEECH_CERT_FILE` - Путь к файлу TLS сертификата (по умолчанию: `certs/server.crt`)
- Используется только при `GO_SPEECH_TLS=true`
- Если файл отсутствует и TLS включен - будет автоматически сгенерирован
- `GO_SPEECH_KEY_FILE` - Путь к файлу приватного ключа (по умолчанию: `certs/server.key`)
- Используется только при `GO_SPEECH_TLS=true`
- Если файл отсутствует и TLS включен - будет автоматически сгенерирован
- `GO_SPEECH_TLS_DOMAINS` - Список доменов для добавления в сертификат (опционально)
- Формат: домены через запятую, например: `example.com,api.example.com`
- В сертификат всегда автоматически добавляются: `localhost`, `127.0.0.1`
- Используется только при автогенерации сертификатов
- `GO_SPEECH_CA_CERT` - Путь к CA сертификату для подписи сертификата (опционально)
- Если задан и файл существует - сертификат будет подписан этим CA
- CA ключ должен находиться в том же каталоге с расширением `.key`
- Если CA не найден - генерируется самоподписанный сертификат
- Используется только при автогенерации сертификатов
### Пути к утилитам
- `GO_SPEECH_PIPER_PATH` - Путь к исполняемому файлу Piper TTS (по умолчанию: `/usr/local/bin/piper`)
- `GO_SPEECH_FFMPEG_PATH` - Путь к исполняемому файлу ffmpeg (по умолчанию: `/usr/bin/ffmpeg`)
- `GO_SPEECH_MODEL_DIR` - Директория с моделями Piper TTS (по умолчанию: `models`)
## Кэширование
Сервер автоматически кэширует сгенерированные аудио файлы для ускорения обработки повторных запросов.