Империя на одном VPS — технологический отчёт
Технологический отчёт · Сентябрь 2026

Империя на одном VPS

Три работающих ИИ-продукта, голосовой ассистент уровня «Алисы», резервное копирование в две страны — всё на одной виртуальной машине за пару сотен рублей в месяц. Без облаков, без Kubernetes, без команды.

18 385 строк кода 6 539 сообщений в базах 5 ИИ-провайдеров 9 крон-задач бэкапы в 2 странах
3
продукта в бою
1
vCPU · 3.9 ГБ RAM
4
TLS-сертификата
47
пользователей голосового чата
16
живых комнат вебчата
0
внешних облаков
🎙️

Знакомьтесь: Светлана

«Привет! Я — голос этого сервера. Говорю по-русски, 48 килогерц, отвечаю за двенадцать миллисекунд из кэша. Поставили меня вчера вечером, а узнаёшь меня, как будто я тут всегда жила».
ru-RU-SvetlanaNeural · edge-tts · темп +4% · LRU-кэш 40 МБ · авто-фолбэк
✓ подключена к webchat-ai.ru за один вечер — см. раздел «Хроника»
Продукты

Три проекта, один сервер

Каждый живёт в своём systemd-юните, за своим портом на localhost и выходит в мир только через nginx с TLS. Никто не знает о соседях — зато хозяин знает обо всех.

💬

Суперчат

Личный AI-чат со стримингом ответов: мультипровайдерная схема, пять провайдеров в одной кнопке, автоматические фолбэки, если кто-то из них лёг. Бесплатная модель — по умолчанию.

FlaskSSE-стримингSQLite5 провайдеровфолбэк-цепочки
Строк кода3 722
Сообщений в базе5 287
Дефолтная модельбесплатная
🎙️

Голосовая Алиса

webchat-ai.ru/app — говоришь вопрос в микрофон, он сам останавливает запись по тишине, расшифровывает на сервере, а отвечает текстом и голосом Светланы. Аккаунты, балансы, подарочные коды.

VAD-детектор тишиныwhisper-large-v3-turboнейро-TTSffmpegLRU-кэш
Строк кода4 159
Пользователей47
Отклик голоса из кэша12 мс
🏢

Коммерческий чат

webchat-ai.ru/chat — полноценный продукт: регистрация, комнаты с паролями, роли, платежи, транзакции и скрытая админка, вход в которую знает только владелец. Самый большой проект сервера.

Flask · 4 748 строк бэкендаsha256ролиплатежисекретная админка
Строк кода10 504
Комнат16 живых
Сообщений1 040
Архитектура

Как это устроено

Классический стек без модных слов: браузер → nginx с TLS → Flask-приложения → ИИ-провайдеры. Все внутренние порты слушают только localhost — наружу смотрит один nginx.

💻 БраузерыChrome · Firefox · Яндекс
📱 ТелефоныAndroid / iOS
↓ https · Let's Encrypt
🛡 nginxTLS · reverse-proxy · 3 домена
↓ localhost
💬 СуперчатFlask · SSE
🎙 ГолосовойFlask · STT · TTS
🏢 КоммерческийFlask · биллинг
↓
🧠 ИИ-провайдерыPlusVibe · NeuroGate · DeepSeek · BlackRoute · ApiMira
🇩🇪 Codebergоффсайт-бэкапы · Германия
СлойТехнологияЗачем
Вебnginx + Let's Encryptтерминация TLS, проксирование, 4 сертификата, авто-продление
БэкендPython / Flask (threaded)три приложения, стриминг ответов, REST-API с гарантами доступа
ДанныеSQLiteбессерверные БД: чаты, пользователи, транзакции, бэкап одним вызовом .backup
РеалтаймSSE (Server-Sent Events)ответы ИИ печатаются на глазах, без WebSocket-зоопарка
Голос · вводWeb Speech API + MediaRecorderChrome/Yandex — мгновенное распознавание, Firefox — запись на сервер
Голос · тишинаAudioContext · RMS-анализVAD-детектор: запись сама останавливается после паузы 2.5 с
Голос · STTwhisper-large-v3-turboрасшифровка речи на сервере провайдера, ru с фокусом на язык
Голос · конвертацияffmpegwebm от браузера → честный mp3 16 кГц, провайдер не ворчит
Голос · TTSedge-tts (SvetlanaNeural)нейроголос, кэш по sha1 с LRU-чисткой 40 МБ, фолбэк в браузер
Планировщикcron × 9бэкапы, вывоз в Германию, чистки, отчёты — по расписанию
Сервисыsystemd × 3автозапуск и перезапуск приложений после любого сбоя
Резервsqlite .backup + gzip -9 + gitлокально 14 дней и 40 копий, оффсайт — Codeberg, Германия
Сегодняшняя звезда

Голосовой конвейер — от микрофона до Светланы

Девять шагов между «я открыл страницу» и «сервер ответил мне голосом». Каждый шаг придуман, собран и проверен.

1🎤Микрофонразрешение, предогрев доступа
→
2〰️VAD-тишинаRMS-порог 0.028, пауза 2.5 с
→
3🎞️ЗаписьMediaRecorder, webm/opus
→
4🔁Конвертацияffmpeg → mp3 16 кГц моно
→
5👂Whisper STTрасшифровка, язык ru
→
6▶️Отправкатолько по кнопке — решает человек
→
7🧠ИИ-ответстриминг в реальном времени
→
8🗣️Светлананейро-TTS, кэш sha1 · LRU 40 МБ
→
9🔊Звукфолбэк в браузер, если сеть сбоит

Что починили за вечер — по горячим следам

живая эксплуатация: каждая жалоба владельца → диагноз → патч → проверка

Кнопка записи мигает вечноVAD-автостоп + сброс состояния
Хочется голос «как у Алисы»нейро-TTS Светлана + кэш
Отправляло обрывок вопросаотправка только по ▶ (по фидбеку!)
Ошибка 422 «нет длительности»ffmpeg-конвертация webm → mp3
4 патча, 4 проверки, ноль регрессий

Почему Светлана, а не «настоящая Алиса»

голос Яндекса — проприетарный, легально его не получить. Ближайший свободный по тембру и живости — женский нейроголос ru-RU-SvetlanaNeural.

ГолосSvetlanaNeural
Качество48 кГц, нейросеть
Темп+4% — живой разговорный
Повторы фразмгновенно, из кэша (12 мс)
Отказоустойчивостьавто-фолбэк в браузерный синтез
Хроника

Один день из жизни сервера — 25 сентября

Обычный четверг: утро начинается с бэкапов, день — с уборки, вечер превращает чат в голосового ассистента.

Ночной снапшот баз

cron делает .backup всех SQLite и жмёт gzip-ом — к утру всё уже сохранено.

Вывоз копий в Германию

свежие дампы уходят на Codeberg — оффсайт-копия на случай беды с VPS.

Зеркало кода

git-автопуш отправляет актуальные исходники в приватный репозиторий.

Генеральная уборка

~160 артефактов прошлых патчей удалены, 104 МБ освобождено, комнаты вебчата почищены: 41 → 16 живых, базы ужаты VACUUM-ом.

Бесплатная модель — по умолчанию

оба чата переведены на бесплатную DeepSeek-модель с прозрачным фолбэком на платные.

Фикс «вечной записи»

диагностировано мигание кнопки микрофона: добавлен авто-стоп по тишине и сброс зависших состояний.

★ Рождение Светланы

серверный нейро-TTS подключён за один вечер: голос, кэш, фолбэки, гарды доступа — и сквозной тест.

★ Доводка по фидбеку

владелец сказал «отправляет обрывок» — авто-отправка откачена, отправка только по кнопке. Один цикл «жалоба → патч».

★ Голос 422 → текст

ошибка распознавания webm убита ffmpeg-конвертацией; сквозной тест «речь → текст → речь» пройден с совпадением слово в слово.

Надёжность

Бэкапы, которые не подведут

Правило простое: любая база переживает три беды подряд — сбой диска, кривой патч и потерю самого сервера. Локальные копии на 14 и 40 точек плюс вечерний вывоз в Германию.

ЧтоКак частоКудаХранениеОбъём копии
Суперчат · БДежедневно 04:45локально14 дней~10.3 МБ
Голосовой чат · БДежедневно 04:45локально14 дней~296 КБ
Коммерческий чаткаждые 6 часовлокально40 копий~1.6 МБ
Все базыежедневно 05:00🇩🇪 Codebergпоследняя копия≈12 МБ
Весь код и конфигиежедневно 05:30🇩🇪 Codeberggit-зеркало—

Строки кода по проектам

18 385 строк — все написаны и настроены за считанные недели

18.4K строк кода
Коммерческий · 10 504 Голосовой · 4 159 Суперчат · 3 722

Вес суточных копий баз

SQLite + gzip −9: компактно даже на скромном диске

Суперчат10.3 МБ
Коммерческий1.6 МБ
Голосовой0.3 МБ
Вывоз в Германию≈12 МБ/день

Целостность каждой копии проверяется SQLite INTEGRITY CHECK. Место на диске под гарантами: если свободного меньше порога — бэкап не начнётся, а не уронит сервер.

Безопасность

Шесть замков на одной двери

🕵️

Секретные пути

приложения отвечают только на неугадываемых адресах; очевидные входы закрыты и возвращают 404.

🔐

Пароли — только хэши

sha256 в базе, нигде в открытом виде; а старые слабые пароли давно отозваны и не работают.

🚧

Гарды API

каждый служебный эндпоинт требует токен или секрет владельца — curl без пропуска получает 403.

🛡️

TLS везде

Let's Encrypt на всех доменах, авто-продление, HTTPS-only редиректы.

🧹

Гигиена

41 тестовая комната → 16 живых; 160 артефактов старых патчей стёрты; мусор не копится.

📦

Кэш-контроль

HTML не кэшируется — после каждого патча браузеры получают свежий код, а не призраков.

Эффект со-пилота

Год работы — за один сезон

🧑‍💻
«Я год наверное бы всё это делал сам — и думаю, что и не сделал бы. Там хоть и физ-мат, я и программёр всё-таки».
— владелец сервера, физмат и программёр, сентябрь 2026
Блок работВ одиночку, реальноС ИИ-со-пилотом
Коммерческий чат — аккаунты, комнаты, роли, платежи, админка6–10 месяцевживой продукт
Два ИИ-чата — мультипровайдеры, стриминг, фолбэки, балансы3–4 месяцанедели
Голосовой конвейер — VAD, STT, нейро-TTS, кэши, фолбэки2–3 месяцаодин вечер
Резервная система — локальные копии + вывоз в Германию2–3 неделиодна ночь
Итого~12 месяцев (и то не факт)~3 недели

Формула не «ИИ вместо человека», а «ИИ рядом»: владелец ставит задачи, ловит живые баги своим ухом, решает, как должен вести себя продукт — со-пилот пишет, чинит и не спит ночами. Каждый патч сопровождается бэкапом, проверкой синтаксиса и сквозным тестом.

Октябрь 2026

Что добавилось за месяц

Платформа не стоит на месте: два чата слились в одну учётку, сервер научился писать в Telegram, диалоги — уходить по ссылке и md-файлом, а оплата — работать без карты. Всё уже в бою.

🔑

Единая учётка на два чата

«Второй чат» (/chat/) и голосовой Говорун (/app/) живут на одном логине и одном балансе: зарегистрировался в одном — работай в обоих. 55 пользователей мигрированы без паролей и потерь, каждая копейка пишется в обе базы сразу.

один балансдвойная записьобратная совместимость
🛠️

Единая админка

Один секретный URL вместо двух админок: пользователи и балансы, тарифы Говорилки, журналы кодов и платежей Точки, SMS-шлюз, фильтры, диск и здоровье сервисов. Начисление и списание — с аудитом в обеих базах.

8 вкладокаудит операцийnoindex
✈️

Сервер пишет в Telegram

tg_notify.sh — события сервера сами приходят владельцу в ТГ: бэкапы Codeberg, платежи, здоровье. Та же механика работает и для пользователей Говоруна: специальная инструкция — и агент отправит уведомление в Telegram или MAX.

tg_notify.shинструкция агентуТГ / MAX
⤴️

«Поделиться» и md-файл

Любой диалог в обоих чатах превращается в красивую страницу вопрос—ответ по ссылке — или выгружается в Markdown одним файлом, чтобы продолжить работу в другом чате, у другого агента или LLM.

ссылка-страницаMarkdownэкспорт
🎟️

Коды пополнения

Оплата без карты вообще: код на 100 или 300 ₽ вводится в чате — баланс на счету. Готовый подарочный сертификат и способ принять платёж там, где карты нет или не нужна. Журнал кодов — в единой админке.

без картыподарок100 / 300 ₽
📦

Slim-бэкапы Codeberg

Зеркало переведено на умную политику: 4 ветки — конфиги, чат-БД ежедневно, /etc, медиа. Мусорные бинарники — мимо, живые sqlite не в git. Аккаунт разгружен с 924 до ~440 МБ при лимите ~0.9 ГБ — запас больше двойной.

4 веткиgc 484→55 МБежедневно

Продукты платформы: промо Говоруна · страница для преподавателей и бизнеса · наш аналог dots и Muse