Rhasspy на Ubuntu 24.04: пошаговая установка
Если голосовое управление домом упирается в то, что записи с микрофона уходят в чужое облако — Google, Amazon или Яндекс — Rhasspy решает эту проблему: он распознаёт речь и голосовые команды полностью локально, без единого запроса наружу. Ниже — установка Rhasspy на Ubuntu 24.04 через Docker, с честным разбором того, где такой ассистент справляется хорошо, а где придётся добавить спутниковое устройство с микрофоном.
Содержание
- Что такое Rhasspy и почему для него нужен сервер, а не Raspberry Pi
- Подготовка Ubuntu 24.04 и установка Docker
- Установка Rhasspy через Docker Compose
- Настройка профиля: STT, TTS, wake word и распознавание намерений
- Спутник с микрофоном: архитектура master/satellite и доступ к дому
- Интеграция с Home Assistant, HTTPS и защита доступа
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Rhasspy и почему для него нужен сервер, а не Raspberry Pi
Rhasspy — открытый офлайн-ассистент, который берёт на себя весь голосовой конвейер: распознавание речи (STT), определение намерения из фразы (intent recognition) и синтез ответа (TTS). Он не заменяет Home Assistant или Node-RED сам по себе — превращает голосовую команду в структурированное событие и передаёт его дальше по MQTT или HTTP webhook, а обвязку логики вы строите в привычной платформе автоматизации.
Ключевая идея проекта — «privacy by design»: ни звук, ни распознанный текст никуда не отправляются, если вы сами не настроили удалённый STT-движок. Это отличает Rhasspy от голосовых колонок с завода, где запись обычно уходит на сервер производителя даже для банального «включи свет».
Почему для этого стоит сервер, а не одноплатник дома: локальные модели распознавания речи и синтеза голоса — заметная нагрузка на CPU и RAM, особенно если брать точные модели вместо облегчённых. На Raspberry Pi распознавание фразы обычно занимает заметно больше времени, чем на сервере с несколькими ядрами в запасе — точные цифры сильно зависят от выбранных движков, здесь их не называю. Сервер также даёт стабильный IP и возможность держать рядом MQTT-брокер и Home Assistant без конкуренции за ресурсы одной платы.
Важная оговорка сразу: Rhasspy не заменяет физический микрофон в комнате — сервер в дата-центре звук из вашей гостиной не услышит. Рабочая схема — «спутник» (satellite) с микрофоном и колонкой дома, который ловит голос и wake word, а тяжёлую часть — распознавание и синтез — делает сервер. Разберём это в отдельной секции ниже.
Подготовка Ubuntu 24.04 и установка Docker
Если сервер только развёрнут, начните с базовой настройки — отдельный пользователь без root, SSH-ключи, firewall. Это подробно разобрано в статье про первичную настройку Ubuntu 24.04.
Ставим Docker Engine из официального репозитория — пакет из штатных репозиториев Ubuntu обычно старее и без docker compose plugin:
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Проверяем демон и добавляем пользователя в группу docker:
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-world
Если сомневаетесь между Docker и LXC для этой роли — сравнение в статье Docker или LXC: что выбрать для сервера.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Rhasspy через Docker Compose
На сервере без физического микрофона Rhasspy запускается как «мастер» (base station): принимает аудио от спутников по сети, гоняет его через STT/intent/TTS и отдаёт результат. Создаём рабочую директорию и compose-файл:
mkdir -p /opt/rhasspy/profiles
cd /opt/rhasspy
nano docker-compose.yml
Содержимое docker-compose.yml:
services:
rhasspy:
container_name: rhasspy
image: rhasspy/rhasspy
restart: unless-stopped
ports:
- "12101:12101"
- "12183:12183"
volumes:
- ./profiles:/profiles
- /etc/localtime:/etc/localtime:ro
command: >
--user-profiles /profiles
--profile ru
Порт 12101 — веб-интерфейс, 12183 — встроенный MQTT-брокер Rhasspy по протоколу Hermes (тот же формат сообщений, что использовался в проекте Snips), через который спутники и Home Assistant будут обмениваться событиями. --profile ru сразу поднимает русскоязычный профиль — если нужен английский или другой язык, замените код на en и соответствующий.
Флаг --device /dev/snd:/dev/snd в compose-файле намеренно не указан: серверу в дата-центре звуковая карта не нужна, если весь захват звука идёт со спутника по сети. Добавляйте его только если планируете подключить USB-микрофон прямо к самому серверу — редкий случай для арендованной машины.
Запускаем и смотрим логи первого старта — Rhasspy при первом запуске скачивает базовые файлы профиля, это может занять несколько минут в зависимости от канала:
docker compose up -d
docker compose logs -f rhasspy
Как только в логах появится сообщение о запущенном веб-сервере, открывайте http://IP-сервера:12101.
Настройка профиля: STT, TTS, wake word и распознавание намерений
В веб-интерфейсе Rhasspy вкладка Settings — это конструктор из независимых движков под каждый этап конвейера. Для полностью офлайн-режима на сервере разумный практичный набор:
| Этап | Что выбрать | Комментарий |
|---|---|---|
| Wake word | обрабатывается на спутнике, не на сервере | сервер не слышит постоянный поток — только фразу после срабатывания |
| Speech to Text | Kaldi (для профилей с готовой моделью) или Pocketsphinx | Kaldi точнее, но требовательнее к CPU; Pocketsphinx легче и быстрее стартует |
| Intent Recognition | fsticuffs (шаблонный) | детерминированный разбор по грамматике — предсказуемее, чем ML-модели, для домашних команд |
| Text to Speech | eSpeak или Larynx/Piper-совместимые голоса, если добавлены в профиль | eSpeak звучит механически, но ставится сразу и без внешних моделей |
После выбора движков нажмите «Download» рядом с профилем — Rhasspy подтянет недостающие файлы моделей в директорию /opt/rhasspy/profiles/ru. Дальше на вкладке Sentences описываются шаблоны фраз в формате, близком к JSGF-грамматике:
[IncludiSvet]
включи (свет | освещение) [в (кухне | спальне | гостиной)] {room}
[VyklySvet]
выключи (свет | освещение) [в (кухне | спальне | гостиной)] {room}
Каждый такой блок после сохранения и «Train» превращается в intent с именем (IncludiSvet) и слотом (room), который прилетит в Home Assistant или Node-RED как JSON-событие. Это удобнее, чем обучать нейросетевую модель на своих командах — правило работает предсказуемо с первой фразы, без датасета.
Честно: качество офлайн-распознавания на русском у Rhasspy заметно скромнее, чем у облачных решений или локального Whisper — модели русского профиля не так проработаны, как для английского. Для короткого фиксированного набора команд этого достаточно; для свободной речи стоит присмотреться к голосовому боту через Whisper или к голосовому ассистенту на локальной модели как к альтернативному STT-движку внутри того же Rhasspy — он умеет работать и с внешним HTTP STT-эндпоинтом вместо встроенного.
Спутник с микрофоном: архитектура master/satellite и доступ к дому
Здесь та же физика, что и в любой связке «сервер в дата-центре плюс железо дома»: сервер не слышит микрофон, которого физически рядом нет. Rhasspy решает это режимом satellite — отдельный лёгкий инстанс (обычно на Raspberry Pi с USB-микрофоном и колонкой) слушает wake word локально, а после срабатывания стримит аудио на сервер по MQTT.
Схема выглядит так:
- Дома: Raspberry Pi запускает свой Rhasspy в режиме сателлита — тот же Docker-образ, но профиль настроен так, чтобы STT, Intent Recognition и TTS работали «удалённо» через MQTT на внешний брокер.
- Между домом и сервером: сайт-ту-сайт туннель WireGuard, чтобы MQTT-трафик (порт 12183) не торчал в открытый интернет. Настройка туннеля — в статье WireGuard на Ubuntu 24.04.
- На сервере: базовый Rhasspy принимает поток аудио, гонит через STT → intent → (если нужно) TTS и публикует итоговое intent-событие обратно в MQTT — спутник забирает синтезированный ответ и проигрывает его через колонку.
В настройках профиля спутника на вкладках Speech to Text, Intent Recognition и Text to Speech переключаете источник с «Local» на «Hermes MQTT» и указываете адрес сервера и порт 12183. Wake word остаётся локальным на спутнике — гонять по сети непрерывный поток звука ради ожидания одного слова расточительно, а короткую команду после срабатывания — уже нормально.
Если основа умного дома у вас уже держится на MQTT-брокере для Zigbee-устройств, взгляните на статью про Zigbee2MQTT на Ubuntu 24.04 — часто оба сервиса удобно держать на одном сервере, используя общий брокер вместо встроенного в Rhasspy.
Интеграция с Home Assistant, HTTPS и защита доступа
Rhasspy отдаёт intent-события через HTTP webhook или через тот же MQTT — под Home Assistant есть готовая интеграция «Rhasspy», которая подписывается на события и превращает их в срабатывания автоматизаций. Установка самого Home Assistant на сервере разобрана в статье Home Assistant на Ubuntu 24.04 — если он ещё не поднят, начните оттуда.
После добавления интеграции укажите адрес Rhasspy (http://rhasspy:12101 при общей docker-сети или прямой IP) — дальше каждый intent из шаблонов Sentences появится в Home Assistant как событие rhasspy_intent, на которое вешаются обычные автоматизации через Node-RED или встроенный редактор.
Веб-интерфейс на порту 12101 лучше не светить наружу напрямую — это управление вашим домом. Ставим reverse proxy с автоматическим HTTPS, например на Caddy (подробная настройка — в статье Caddy с авто-SSL на Ubuntu 24.04):
rhasspy.example.com {
reverse_proxy 127.0.0.1:12101
}
Firewall ограничиваем так, чтобы наружу торчали только 80/443 для прокси и WireGuard-порт для туннеля к спутнику, а прямой доступ к 12101 и 12183 — только с localhost и из VPN-подсети:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw deny 12101/tcp
sudo ufw deny 12183/tcp
Бэкап у Rhasspy нештатный — важен весь каталог /opt/rhasspy/profiles, там лежат и обученные Sentences, и скачанные модели. Общий подход к автоматическим бэкапам директорий сервера — в статье автоматические бэкапы на Ubuntu 24.04: достаточно добавить этот путь в список того, что копируется по расписанию.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Обязательно ли ставить отдельный спутник, или можно обойтись сервером?
Если микрофон физически не рядом с сервером — да, обязательно. Сервер может использоваться как «мастер», принимающий аудио по сети, но захват голоса всегда происходит на устройстве в комнате. Исключение — тестовый режим через веб-интерфейс, где можно загрузить готовый WAV-файл или наговорить через микрофон браузера для проверки intent-цепочки без реального спутника.
Насколько хорошо Rhasspy распознаёт русскую речь?
Заметно скромнее, чем ведущие облачные STT или локальный Whisper на мощном железе — модели русского профиля не так проработаны, как для английского. Для короткого фиксированного набора команд результат приемлемый; для свободной диктовки лучше подключить внешний STT-движок через HTTP, благо Rhasspy это поддерживает нативно.
Нужен ли GPU для этого сервера?
Нет, для типовых профилей Rhasspy (Pocketsphinx, Kaldi, eSpeak) хватает обычного CPU. GPU становится нужен, только если вы подключаете к Rhasspy внешний тяжёлый STT/TTS-движок вроде Whisper large — тогда это уже отдельная задача под конкретную модель, а не требование самого Rhasspy.
Rhasspy ещё актуален или лучше сразу смотреть в сторону альтернатив?
Часть экосистемы голосовых ассистентов для Home Assistant в последние годы сместилась в сторону протокола Wyoming и связки openWakeWord/Whisper/Piper внутри Assist. Rhasspy при этом остаётся рабочим самостоятельным решением с гибкой master/satellite-архитектурой — если важна именно эта гибкость и вы не привязаны к Home Assistant как единственной платформе, он по-прежнему подходящий выбор. Перед стартом стоит свериться с актуальным состоянием обоих направлений.
Можно ли обойтись без MQTT-брокера и встроенного в Rhasspy?
Для одного сервера и одного спутника встроенного брокера на порту 12183 достаточно. Внешний брокер (например, Mosquitto) имеет смысл, если тот же MQTT уже используется для Zigbee2MQTT или других сервисов дома — тогда удобнее свести весь трафик в одну точку с общей авторизацией, а не держать несколько независимых брокеров.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →