Документ описывает установку серверной части программного обеспечения «Транскриптик» на отдельный сервер, первый запуск, проверку работоспособности, обновление и удаление.
Программа состоит из серверной части и веб-интерфейса. Серверная часть устанавливается на сервер по этой инструкции. Графический процессор не нужен: все вычисления, включая распознавание речи, выполняются на центральном процессоре, драйверы NVIDIA, CUDA Toolkit и графический процессор для работы не нужны. Устанавливать программы на устройство пользователя не нужно: пользователь работает с программой через веб-браузер по адресу сервера.
По этой инструкции развёрнут экземпляр, который предоставлен для экспертной проверки. Сведения о доступе к нему приведены в документе «Сведения об экземпляре программного обеспечения и доступе к нему».
Комплект поставки — архив исходных текстов и файлов развёртывания transcriptic-<версия>.tar.gz. Его предоставляет правообладатель. Основные каталоги архива:
| Каталог | Содержимое |
|---|---|
EavesdropAI/ | Веб-приложение (C#, .NET 8) |
Services/ | Серверные сервисы (Python, Node.js): распознавание, файловые сервисы, API, платежи, почта, плановые задачи |
db/schema/ | Схема базы данных и справочные данные |
deploy/single-node/ | Файлы развёртывания: docker-compose.yml, шаблон настроек .env.example, конфигурация HTTPS-шлюза, служебные скрипты |
docs/ | Документация |
Все компоненты собираются в образы Docker при установке. Нейросетевые модели (около 1,2 ГБ) скачиваются автоматически при первом запуске.
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| Процессор | x86-64, 8 vCPU | 16 vCPU с поддержкой AVX-512 VNNI (Intel Xeon Ice Lake и новее, AMD EPYC Milan/Genoa), 100% доля ядра |
| Оперативная память | 16 ГБ | 32 ГБ |
| Диск | SSD 100 ГБ | NVMe 150 ГБ и более (под файлы пользователей) |
| Графический процессор | Не требуется | Не требуется |
| Сеть | Публичный IPv4-адрес, входящие порты 22, 80, 443, 8096 | — |
| Компонент | Требование |
|---|---|
| Операционная система | Ubuntu Server 22.04 LTS или 24.04 LTS, 64 бит |
| Права | Учётная запись с правами root (sudo) |
| Доменное имя | Имя (например, demo.transcriptic.ru), A-запись которого указывает на IP-адрес сервера. Без имени можно работать с самоподписанным сертификатом |
| Почтовый ящик | Отдельный ящик с доступом по SMTP для отправки кодов подтверждения. Вместо ящика можно включить встроенный перехватчик писем Mailpit |
| Доступ в Интернет с сервера | К репозиториям Ubuntu, Docker Hub, PyPI, PyTorch, Hugging Face (или их зеркалам) на время установки |
Docker ставится скриптом установки (раздел 4.2).
Все команды выполняются в терминале сервера.
sudo mkdir -p /opt/transcriptic sudo tar -xzf transcriptic-<версия>.tar.gz -C /opt/transcriptic cd /opt/transcriptic
sudo bash deploy/single-node/scripts/setup-host.sh
Скрипт:
Если Docker Hub с сервера недоступен или работает медленно, укажите зеркало:
sudo DOCKER_REGISTRY_MIRROR=https://mirror.gcr.io bash deploy/single-node/scripts/setup-host.sh
cd deploy/single-node bash scripts/init-env.sh
Скрипт создаёт файл настроек .env (доступ только владельцу) и генерирует пароли базы данных, внутренний ключ сервисов, ключ API и пароль администратора. Пароль администратора выводится на экран. Число потоков распознавания (ASR_CPU_THREADS, WHISPER_LIVE_THREADS, WHISPER_LIVE_MAX_CLIENTS) скрипт подбирает по числу ядер и объёму памяти сервера.
Затем откройте .env в текстовом редакторе (например, nano .env) и задайте параметры:
| Параметр | Обязательный | Значение |
|---|---|---|
DOMAIN | Да | Доменное имя сервера |
TLS_MODE | Нет | letsencrypt — сертификат Let's Encrypt (по умолчанию); selfsigned — самоподписанный сертификат, если доменного имени нет |
ACME_EMAIL | Да | Адрес для уведомлений Let's Encrypt |
ADMIN_EMAIL | Да | Адрес электронной почты администратора программы |
ADMIN_MINUTES | Нет | Минуты на балансе администратора (по умолчанию 6000) |
SMTP_HOST, SMTP_PORT, SMTP_SECURE | Да | Почтовый сервер (для Яндекс Почты: smtp.yandex.ru, 465, true) |
SMTP_USER, SMTP_PASS | Да | Логин и пароль приложения почтового ящика |
ASR_MODEL, ASR_COMPUTE_TYPE | Нет | Модель распознавания и формат вычислений: small и int8 (по умолчанию) |
ASR_CPU_THREADS | Нет | Потоков на распознавание одного файла (по умолчанию 8): около половины vCPU, но не больше числа физических ядер |
WHISPER_LIVE_MAX_CLIENTS, WHISPER_LIVE_THREADS | Нет | Число одновременных сеансов распознавания в реальном времени (по умолчанию 2) и потоков на сеанс (по умолчанию 4) |
HF_ENDPOINT | Нет | Зеркало хранилища моделей, если huggingface.co недоступен |
DEEPL_AUTH_KEY, OPENAI_API_KEY, TRANSLATE_PROXY_URL | Нет | Подключение сервиса машинного перевода. Без них функция перевода выключена, остальные функции работают |
TBANK_TERMINAL_KEY, TBANK_PASSWORD | Нет | Терминал интернет-эквайринга АО «ТБанк» для приёма оплаты |
TELEGRAM_BOT_TOKEN | Нет | Токен Telegram-бота (дополнительный компонент) |
Пароли и ключи, сгенерированные скриптом, менять не требуется.
docker compose up -d --build
Первая сборка образов занимает 20–40 минут, все образы вместе занимают около 16 ГБ. При первом запуске:
.env;Если перехватчик писем Mailpit нужен вместо почтового ящика, задайте в .env SMTP_HOST=mailpit, SMTP_PORT=1025, SMTP_SECURE=false, SMTP_USER=any, SMTP_PASS=any, MAILPIT_UI_AUTH=<логин>:<пароль> и запустите:
docker compose --profile mailpit up -d
Письма будут видны по адресу https://<DOMAIN>/mailpit/.
docker compose ps
Все сервисы должны быть в состоянии running (у postgres — healthy). Сервисы files-init и models-init завершаются после первого запуска, это нормально.
Готовность сервиса распознавания:
docker compose logs transcribe | grep -m1 "Running on"
| № | Действие | Ожидаемый результат |
|---|---|---|
| 1 | Открыть в браузере https://<DOMAIN> | Открывается страница сервиса, соединение защищено |
| 2 | Войти с адресом ADMIN_EMAIL и паролем администратора | Открывается главная страница с балансом минут |
| 3 | Загрузить короткий аудиофайл с речью, выбрать формат DOCX, нажать «Обработать» | Отображаются ход загрузки и распознавания |
| 4 | Дождаться завершения и скачать результат | Скачивается документ с распознанным текстом и временными метками; минуты списаны один раз |
| 5 | Открыть страницу «История» | Запрос отображается в списке |
| 6 | Открыть https://<DOMAIN>/munsic и загрузить музыкальный файл | Формируются четыре дорожки |
| 7 | Зарегистрировать новую учётную запись | Приходит письмо с кодом, регистрация завершается |
Создание учётной записи с заданным балансом (пароль генерируется и выводится на экран):
bash scripts/db.sh add-user user@example.ru --minutes 600
Учётная запись администратора:
bash scripts/db.sh add-user admin2@example.ru --admin
docker compose logs -f <сервис>
Журналы каждого контейнера хранятся средствами Docker (до 5 файлов по 50 МБ).
bash scripts/db.sh backup bash scripts/db.sh restore backups/transcriptic-<время>.sql.gz
Распакуйте новый комплект поставки поверх каталога /opt/transcriptic и выполните:
cd /opt/transcriptic/deploy/single-node docker compose up -d --build
Пересобираются только изменившиеся компоненты. База данных и файлы пользователей сохраняются.
docker compose stop docker compose start
Остановка и удаление контейнеров с сохранением данных:
docker compose down
Полное удаление вместе с базой данных, файлами пользователей и моделями:
docker compose down --volumes --rmi all sudo rm -rf /opt/transcriptic
| Проблема | Решение |
|---|---|
| Распознавание идёт медленно | Проверить загрузку процессора (docker stats). При числе vCPU больше 16 увеличить ASR_CPU_THREADS до числа физических ядер, при перегрузке — уменьшить; затем docker compose up -d |
| Нет сертификата HTTPS | Проверить A-запись домена и доступность портов 80/443; журнал: docker compose logs certbot. Повторная попытка выполняется каждые 10 минут |
| Не скачиваются модели | Задать HF_ENDPOINT с адресом зеркала |
| Не приходят письма | Журнал: docker compose logs smtp-relay; адрес отправителя должен совпадать с ящиком |
| Не работает перевод | Подключить сервис машинного перевода (раздел 4.3) |
Электронная почта: transcriptic@yandex.ru. Телефон: +7 (928) 980-00-89.