Установка у себя
Что нужно, чтобы поднять quiel на своём сервере.
quiel ставится на свой сервер. Ниже — что для этого нужно и обо что спотыкаются.
Что требуется
| Компонент | Требование | Почему именно так |
|---|---|---|
| Веб | Node 22, обычный серверный процесс | Next.js с серверными действиями |
| Realtime | постоянный процесс с WebSocket | здесь живут агенты и диспетчер |
| PostgreSQL | 16 | |
| Redis | 7 | обмен между сервисами и очереди |
| Хранилище | S3-совместимое | файлы спецификаций |
| Почта | SMTP | без неё не войти: вход идёт по ссылке на почту |
Serverless не подойдёт
Realtime держит живые соединения с агентами часами. Вариант «весь проект на облачных функциях» не работает: веб уедет, а протокол агентов останется без дома.
Домены
Нужно два имени, а не одно:
- основное — сама платформа;
- отдельное для хранилища файлов.
Второе не прихоть: браузер кладёт документы прямо в хранилище по подписанной ссылке, а подпись считается от имени хоста и пути. Под общим доменом на префиксе она не сойдётся, и загрузка документов не заработает.
Порядок
- Поднять сервисы через
docker compose. - Выпустить сертификаты до установки конфигурации nginx, отдельным шагом, а не плагином certbot: плагин перепишет конфигурацию сам.
- Поставить конфигурацию nginx, проверить
nginx -t, перезагрузить. - Прогнать миграции базы.
- Проверить снаружи, а не изнутри.
Обо что спотыкаются
Собрано по собственным граблям, а не по общим соображениям.
Сервис, которого нет, не жалуется. Стенд месяц числился рабочим с неподнявшимся realtime: веб без него открывается, просто нет живых обновлений. Проверяйте, что здоровы все контейнеры, а не что «сайт открылся».
Переменная, объявленная в одном месте, нужна в двух. Дважды за день настройка не доезжала до контейнера, и оба раза это выглядело не как поломка, а как странное поведение: то раздел GitHub сообщал, что приложение не настроено, то Telegram отвечал «платформа недоступна». Сверяйте список переменных, которые читает код, со списком в compose.
Приватный ключ не монтируйте файлом. Выкладка идёт с удалением лишнего, и файл исчезнет при первом же деплое — так и произошло. Ключ передаётся значением переменной.
Проксирование через чужой CDN мешает выпуску сертификата. На время выпуска домен должен смотреть на сервер напрямую.
Резервные копии
В составе есть задание, которое снимает дамп базы и кладёт его в хранилище. Проверьте, что оно действительно отрабатывает: непроверенная резервная копия — это не резервная копия.