Три работающих ИИ-продукта, голосовой ассистент уровня «Алисы», резервное копирование в две страны — всё на одной виртуальной машине за пару сотен рублей в месяц. Без облаков, без Kubernetes, без команды.
«Привет! Я — голос этого сервера. Говорю по-русски, 48 килогерц, отвечаю за двенадцать миллисекунд из кэша. Поставили меня вчера вечером, а узнаёшь меня, как будто я тут всегда жила».
Каждый живёт в своём systemd-юните, за своим портом на localhost и выходит в мир только через nginx с TLS. Никто не знает о соседях — зато хозяин знает обо всех.
Личный AI-чат со стримингом ответов: мультипровайдерная схема, пять провайдеров в одной кнопке, автоматические фолбэки, если кто-то из них лёг. Бесплатная модель — по умолчанию.
| Строк кода | 3 722 |
| Сообщений в базе | 5 287 |
| Дефолтная модель | бесплатная |
webchat-ai.ru/app — говоришь вопрос в микрофон, он сам останавливает запись по тишине, расшифровывает на сервере, а отвечает текстом и голосом Светланы. Аккаунты, балансы, подарочные коды.
| Строк кода | 4 159 |
| Пользователей | 47 |
| Отклик голоса из кэша | 12 мс |
webchat-ai.ru/chat — полноценный продукт: регистрация, комнаты с паролями, роли, платежи, транзакции и скрытая админка, вход в которую знает только владелец. Самый большой проект сервера.
| Строк кода | 10 504 |
| Комнат | 16 живых |
| Сообщений | 1 040 |
Классический стек без модных слов: браузер → nginx с TLS → Flask-приложения → ИИ-провайдеры. Все внутренние порты слушают только localhost — наружу смотрит один nginx.
| Слой | Технология | Зачем |
|---|---|---|
| Веб | nginx + Let's Encrypt | терминация TLS, проксирование, 4 сертификата, авто-продление |
| Бэкенд | Python / Flask (threaded) | три приложения, стриминг ответов, REST-API с гарантами доступа |
| Данные | SQLite | бессерверные БД: чаты, пользователи, транзакции, бэкап одним вызовом .backup |
| Реалтайм | SSE (Server-Sent Events) | ответы ИИ печатаются на глазах, без WebSocket-зоопарка |
| Голос · ввод | Web Speech API + MediaRecorder | Chrome/Yandex — мгновенное распознавание, Firefox — запись на сервер |
| Голос · тишина | AudioContext · RMS-анализ | VAD-детектор: запись сама останавливается после паузы 2.5 с |
| Голос · STT | whisper-large-v3-turbo | расшифровка речи на сервере провайдера, ru с фокусом на язык |
| Голос · конвертация | ffmpeg | webm от браузера → честный mp3 16 кГц, провайдер не ворчит |
| Голос · TTS | edge-tts (SvetlanaNeural) | нейроголос, кэш по sha1 с LRU-чисткой 40 МБ, фолбэк в браузер |
| Планировщик | cron × 9 | бэкапы, вывоз в Германию, чистки, отчёты — по расписанию |
| Сервисы | systemd × 3 | автозапуск и перезапуск приложений после любого сбоя |
| Резерв | sqlite .backup + gzip -9 + git | локально 14 дней и 40 копий, оффсайт — Codeberg, Германия |
Девять шагов между «я открыл страницу» и «сервер ответил мне голосом». Каждый шаг придуман, собран и проверен.
живая эксплуатация: каждая жалоба владельца → диагноз → патч → проверка
| Кнопка записи мигает вечно | VAD-автостоп + сброс состояния |
| Хочется голос «как у Алисы» | нейро-TTS Светлана + кэш |
| Отправляло обрывок вопроса | отправка только по ▶ (по фидбеку!) |
| Ошибка 422 «нет длительности» | ffmpeg-конвертация webm → mp3 |
голос Яндекса — проприетарный, легально его не получить. Ближайший свободный по тембру и живости — женский нейроголос ru-RU-SvetlanaNeural.
| Голос | SvetlanaNeural |
| Качество | 48 кГц, нейросеть |
| Темп | +4% — живой разговорный |
| Повторы фраз | мгновенно, из кэша (12 мс) |
| Отказоустойчивость | авто-фолбэк в браузерный синтез |
Обычный четверг: утро начинается с бэкапов, день — с уборки, вечер превращает чат в голосового ассистента.
cron делает .backup всех SQLite и жмёт gzip-ом — к утру всё уже сохранено.
свежие дампы уходят на Codeberg — оффсайт-копия на случай беды с VPS.
git-автопуш отправляет актуальные исходники в приватный репозиторий.
~160 артефактов прошлых патчей удалены, 104 МБ освобождено, комнаты вебчата почищены: 41 → 16 живых, базы ужаты VACUUM-ом.
оба чата переведены на бесплатную DeepSeek-модель с прозрачным фолбэком на платные.
диагностировано мигание кнопки микрофона: добавлен авто-стоп по тишине и сброс зависших состояний.
серверный нейро-TTS подключён за один вечер: голос, кэш, фолбэки, гарды доступа — и сквозной тест.
владелец сказал «отправляет обрывок» — авто-отправка откачена, отправка только по кнопке. Один цикл «жалоба → патч».
ошибка распознавания webm убита ffmpeg-конвертацией; сквозной тест «речь → текст → речь» пройден с совпадением слово в слово.
Правило простое: любая база переживает три беды подряд — сбой диска, кривой патч и потерю самого сервера. Локальные копии на 14 и 40 точек плюс вечерний вывоз в Германию.
| Что | Как часто | Куда | Хранение | Объём копии |
|---|---|---|---|---|
| Суперчат · БД | ежедневно 04:45 | локально | 14 дней | ~10.3 МБ |
| Голосовой чат · БД | ежедневно 04:45 | локально | 14 дней | ~296 КБ |
| Коммерческий чат | каждые 6 часов | локально | 40 копий | ~1.6 МБ |
| Все базы | ежедневно 05:00 | 🇩🇪 Codeberg | последняя копия | ≈12 МБ |
| Весь код и конфиги | ежедневно 05:30 | 🇩🇪 Codeberg | git-зеркало | — |
18 385 строк — все написаны и настроены за считанные недели
SQLite + gzip −9: компактно даже на скромном диске
Целостность каждой копии проверяется SQLite INTEGRITY CHECK. Место на диске под гарантами: если свободного меньше порога — бэкап не начнётся, а не уронит сервер.
приложения отвечают только на неугадываемых адресах; очевидные входы закрыты и возвращают 404.
sha256 в базе, нигде в открытом виде; а старые слабые пароли давно отозваны и не работают.
каждый служебный эндпоинт требует токен или секрет владельца — curl без пропуска получает 403.
Let's Encrypt на всех доменах, авто-продление, HTTPS-only редиректы.
41 тестовая комната → 16 живых; 160 артефактов старых патчей стёрты; мусор не копится.
HTML не кэшируется — после каждого патча браузеры получают свежий код, а не призраков.
«Я год наверное бы всё это делал сам — и думаю, что и не сделал бы. Там хоть и физ-мат, я и программёр всё-таки».
| Блок работ | В одиночку, реально | С ИИ-со-пилотом |
|---|---|---|
| Коммерческий чат — аккаунты, комнаты, роли, платежи, админка | 6–10 месяцев | живой продукт |
| Два ИИ-чата — мультипровайдеры, стриминг, фолбэки, балансы | 3–4 месяца | недели |
| Голосовой конвейер — VAD, STT, нейро-TTS, кэши, фолбэки | 2–3 месяца | один вечер |
| Резервная система — локальные копии + вывоз в Германию | 2–3 недели | одна ночь |
| Итого | ~12 месяцев (и то не факт) | ~3 недели |
Формула не «ИИ вместо человека», а «ИИ рядом»: владелец ставит задачи, ловит живые баги своим ухом, решает, как должен вести себя продукт — со-пилот пишет, чинит и не спит ночами. Каждый патч сопровождается бэкапом, проверкой синтаксиса и сквозным тестом.
Платформа не стоит на месте: два чата слились в одну учётку, сервер научился писать в Telegram, диалоги — уходить по ссылке и md-файлом, а оплата — работать без карты. Всё уже в бою.
«Второй чат» (/chat/) и голосовой Говорун (/app/) живут на одном логине и одном балансе: зарегистрировался в одном — работай в обоих. 55 пользователей мигрированы без паролей и потерь, каждая копейка пишется в обе базы сразу.
Один секретный URL вместо двух админок: пользователи и балансы, тарифы Говорилки, журналы кодов и платежей Точки, SMS-шлюз, фильтры, диск и здоровье сервисов. Начисление и списание — с аудитом в обеих базах.
tg_notify.sh — события сервера сами приходят владельцу в ТГ: бэкапы Codeberg, платежи, здоровье. Та же механика работает и для пользователей Говоруна: специальная инструкция — и агент отправит уведомление в Telegram или MAX.
Любой диалог в обоих чатах превращается в красивую страницу вопрос—ответ по ссылке — или выгружается в Markdown одним файлом, чтобы продолжить работу в другом чате, у другого агента или LLM.
Оплата без карты вообще: код на 100 или 300 ₽ вводится в чате — баланс на счету. Готовый подарочный сертификат и способ принять платёж там, где карты нет или не нужна. Журнал кодов — в единой админке.
Зеркало переведено на умную политику: 4 ветки — конфиги, чат-БД ежедневно, /etc, медиа. Мусорные бинарники — мимо, живые sqlite не в git. Аккаунт разгружен с 924 до ~440 МБ при лимите ~0.9 ГБ — запас больше двойной.
Продукты платформы: промо Говоруна · страница для преподавателей и бизнеса · наш аналог dots и Muse