MAATRIX / Блог / Как установить и настроить Rhasspy на VPS

Как установить и настроить Rhasspy на VPS

MAATRIX

Каждая фраза, сказанная колонке с Алисой или Google Ассистентом, улетает на сервер компании — вместе с обрывками разговора рядом и с записью того, как вы, ругаясь, ищете вторую тапку. Rhasspy решает эту проблему радикально: это открытый (MIT) голосовой ассистент, который распознаёт речь, разбирает команду и синтезирует ответ полностью на вашей инфраструктуре, без единого запроса к чужому облаку. Ниже — рабочая установка Rhasspy на VPS с честным разбором того, что такое размещение реально даёт голосовому ассистенту, а что требует дополнительного "железа" дома.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Как устроен Rhasspy: база и сателлиты

Rhasspy — не монолитное приложение "поставил на одну машину с микрофоном и говоришь". Он спроектирован как распределённая система: тяжёлая часть (распознавание речи, NLU-разбор намерения, синтез голоса) может жить на одной машине — "базовой станции", а лёгкие "сателлиты" — устройства с микрофоном и динамиком в каждой комнате — только слушают, стримят аудио на базу и проигрывают ответ. Связь между компонентами идёт по протоколу Hermes поверх MQTT — тот же подход, что использовал в своё время закрытый Snips, до того как Rhasspy стал открытой заменой.

Практический смысл: вместо того чтобы гонять полноценный STT-движок на Raspberry Pi Zero в каждой комнате, вы держите один прожорливый по CPU/RAM процесс в одном месте, а по квартире расставляете дешёвые сателлиты, которым нужен только микрофон, динамик и сеть. VPS в этой схеме — естественный кандидат на роль базовой станции: он всегда включён, не зависит от того, перезагружали ли роутер дома, и с одной точки обслуживает сколько угодно комнат.

Что реально даёт VPS для голосового ассистента, а что нет

Прежде чем ставить — важная оговорка, без неё будет разочарование при первом же запуске.

У VPS физически нет звуковой карты, микрофона и динамика — виртуализированный сервер в дата-центре не подключишь к USB-микрофону. Значит, сам Rhasspy на VPS не сможет "слушать" ничего напрямую: команда --device /dev/snd, которую используют при локальной установке на Raspberry Pi, здесь просто не сработает — устройства /dev/snd не существует. VPS отлично годится как база (STT, NLU, TTS, хранение профиля и намерений), но аудиоввод/аудиовывод обязательно нужен на отдельных сателлитах — старом смартфоне, Raspberry Pi Zero 2 W с USB-микрофоном и колонкой, или ESP32-сателлите на прошивке ESPHome.

Второй нюанс — задержка. Распознавание речи по сети до облачного сервера и обратно добавляет к времени отклика round-trip через интернет — обычно это заметно меньше секунды при близко расположенном дата-центре, но это ориентир, а не гарантия: конкретная цифра зависит от вашего провайдера, локации сервера и модели STT. Если планируете сателлиты, выбирайте сервер географически ближе к дому — это единственный рычаг, который реально снижает задержку в такой схеме.

Если у вас всего одна комната и один сателлит, а простота важнее гибкости — держать Rhasspy целиком локально на том же Raspberry Pi, что и микрофон, тоже разумный вариант, без сетевой зависимости вообще. VPS даёт преимущество, когда сателлитов несколько или когда нужна централизованная точка для интеграции с Home Assistant и другими сервисами дома.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Выбор конфигурации сервера и движка распознавания речи

Требования сильно зависят от выбранного STT-движка — Rhasspy поддерживает несколько, с разным балансом точности и ресурсов.

Движок STTОсобенностиРесурсыКомментарий
PocketSphinxСамый лёгкий, CPU-only1 vCPU, 512 МБ-1 ГБ RAMХорош на английском для узкого набора команд, на русском работает заметно слабее
KaldiТочнее, есть готовый русский профиль2 vCPU, 2-4 ГБ RAMОсновной практичный выбор для русского языка, модель весит прилично, первая загрузка дольше
VoskМодели на базе Kaldi, компактнее1-2 vCPU, 1-2 ГБ RAMХорошее соотношение точности и ресурсов, тоже с поддержкой русского
Whisper (через сторонний STT-адаптер)Заметно точнее на сложных фразах и акцентах2-4 vCPU, 4+ ГБ RAM, без GPU на обычном VPSСамый тяжёлый вариант, на чистом CPU распознавание идёт медленнее реального времени — годится, если задержка в пару секунд не критична

Для старта с русским языком и парой сателлитов достаточно 2 vCPU и 4 ГБ RAM (Kaldi или Vosk). Диск — SSD/NVMe от 20-30 ГБ: языковые модели сами по себе занимают немного, но с несколькими профилями и логами лучше не экономить. Если позже добавите Whisper для более точного разбора сложных фраз, закладывайте 8 ГБ RAM и будьте готовы к распознаванию не в реальном времени на CPU.

Установка Docker и Rhasspy на VPS

Если Docker ещё не стоит — сначала базовая установка, например по инструкции для Ubuntu 24.04. Дальше — сам Rhasspy.

Рабочая директория и файл конфигурации:

mkdir -p /opt/rhasspy/profiles
cd /opt/rhasspy

docker-compose.yml — обратите внимание, здесь намеренно нет --device /dev/snd: на VPS звукового устройства нет, вся аудиоработа уйдёт на сателлиты:

services:
  rhasspy:
    image: rhasspy/rhasspy:latest
    container_name: rhasspy
    restart: unless-stopped
    ports:
      - "12101:12101"
    volumes:
      - ./profiles:/profiles
    command: --user-profiles /profiles --profile ru

Запуск:

docker compose up -d
docker compose logs -f rhasspy

Первый старт может занять несколько минут — Rhasspy разворачивает структуру профиля и, если модель STT ещё не выбиралась, ждёт настройки через веб-интерфейс. После старта откройте http://IP-сервера:12101 — это административная панель, где выбираются движки STT/NLU/TTS, обучается модель намерений и настраивается MQTT.

Настройка профиля: язык, STT, NLU и синтез речи

В веб-интерфейсе (Settings) для каждого компонента можно выбрать конкретный движок — распознавание речи, разбор намерения (NLU), синтез голоса (TTS) и, при необходимости, wake word (слово-активатор). Для профиля ru разумная отправная точка — Kaldi или Vosk на распознавание, встроенный NLU-движок Rhasspy (он работает на шаблонах фраз, которые вы описываете сами) и eSpeak на синтез: eSpeak звучит механически, зато работает полностью офлайн и есть для русского языка "из коробки" — если важнее естественность голоса, часть облачных TTS (Google WaveNet, Amazon Polly) тоже поддерживается, но тогда фраза-ответ уйдёт наружу, что противоречит смыслу локальной установки.

Намерения (intents) описываются в разделе Sentences шаблонами в формате, похожим на JSGF:

[ЗажигаемСвет]
(включи | зажги) свет [в (кухне | спальне | зале)]

[ВыключаемСвет]
(выключи | погаси) свет [в (кухне | спальне | зале)]

После правки шаблонов нажмите Train — Rhasspy пересоберёт языковую модель под ваш набор фраз. Это ключевое отличие от Алисы или Google: вы явно описываете, что должен понимать ассистент, вместо того чтобы полагаться на облачный универсальный движок с непрозрачной логикой.

Сателлиты, VPN и интеграция с Home Assistant

Сателлит — это отдельный процесс Rhasspy (или лёгкий Hermes-клиент), который слушает микрофон, отправляет аудио на базовую станцию по MQTT и проигрывает ответ через динамик. На Raspberry Pi Zero 2 W с USB-микрофоном сателлит настраивается тем же образом Rhasspy, но в режиме "только аудио" — тяжёлые STT/NLU-компоненты в его профиле отключаются, и он указывает адрес брокера MQTT базовой станции (порт брокера смотрите и настраивайте в разделе Settings → MQTT веб-интерфейса — там же можно поднять внутренний Mosquitto или подключить внешний).

Гонять аудиопоток и MQTT-команды голым текстом через открытый интернет — плохая идея вдвойне: это и вопрос приватности (весь смысл локального ассистента теряется, если голос всё равно идёт по сети в открытом виде), и вопрос безопасности (открытый MQTT-порт наружу — понятная цель для сканеров). Решение — поднять WireGuard на VPS и подключать сателлиты к базовой станции по её адресу внутри VPN-туннеля (например, 10.13.13.1), а порт MQTT/Rhasspy держать закрытым для всего, кроме VPN-подсети:

ufw allow 22/tcp
ufw allow 51820/udp
ufw deny 12101/tcp
ufw enable

Веб-интерфейс администрирования (порт 12101) при таком подходе тоже доступен только через VPN — открывать его напрямую в интернет незачем, если вы не настраиваете систему удалённо через публичный домен с HTTPS и авторизацией. Базовые правила firewall разобраны подробнее в статье про UFW на VPS.

Для управления реальными устройствами (розетки, лампы, климат) Rhasspy сам по себе ничего не включает — он передаёт распознанное намерение дальше, обычно в Home Assistant через MQTT: настроенное намерение ЗажигаемСвет публикуется в MQTT-топик, а автоматизация в Home Assistant подписывается на этот топик и дёргает нужную интеграцию (Zigbee2MQTT, Tasmota, облачный API устройства). Если Home Assistant ещё не развёрнут — с установки на VPS проще всего начать по этой инструкции, а дальше Rhasspy становится голосовым фронтендом поверх уже работающей автоматизации.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Правда ли Rhasspy сейчас не развивается?

Основной автор проекта переключился на голосовой стек Home Assistant (Wyoming-протокол, Piper, openWakeWord), и это более активно развиваемое направление. Rhasspy 2.5 при этом остаётся стабильным, полнофункциональным и доступным как Docker-образ — для тех, кому нужна именно связка база+сателлиты на Hermes/MQTT, эта установка по-прежнему рабочая. Если вы начинаете с нуля и держите Home Assistant, стоит присмотреться и к его встроенному голосовому пайплайну как к альтернативе.

Можно ли вообще обойтись без VPS и держать всё дома?

Да, если сателлит один и он же — единственное устройство. VPS даёт смысл, когда сателлитов несколько (разные комнаты) или когда важно, чтобы "мозг" ассистента не зависел от домашнего роутера и электричества в квартире.

Насколько хорошо Rhasspy понимает русскую речь по сравнению с Алисой?

Хуже, и это стоит сказать прямо: коммерческие ассистенты обучены на огромных массивах живой речи и постоянно дообучаются, а Rhasspy с Kaldi/Vosk работает по заранее заданным вами шаблонам фраз. За это вы получаете предсказуемость (система не "додумывает" команду) и полный контроль над данными — но распознавание свободной речи вне заданных шаблонов будет заметно хуже.

Нужен ли статический IP или домен для сателлитов?

Домен не обязателен, если сателлиты и база связаны через WireGuard — там используются внутренние VPN-адреса, которые не меняются независимо от того, как выдан внешний IP сервера.

Как оплатить VPS из России, если карта не проходит?

У провайдеров, работающих с российскими клиентами, обычно есть оплата картой российского банка и криптовалютой напрямую, без посредников.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →