Руководства
Развёртывание с Docker Compose
Развёртывание в продакшене на одном хосте с помощью прилагаемых docker-compose.prod.yml и install.sh.
Есть один мощный сервер и хотите запустить AskAIs Customer Service за 10 минут? Это ваш путь. Подходит для менее чем ~500 одновременных посетителей; для большего масштаба переходите к руководству по Kubernetes.
Предварительные требования
- Хост Linux с Docker 24+ и `docker compose` v2
- ≥ 2 vCPU, 4 ГБ ОЗУ (рекомендуется 8 ГБ)
- Домен, указывающий на хост (для TLS через Caddy / Cloudflare / nginx)
Установка одной строкой
git clone https://github.com/singlink/singlink
cd singlink
APP_DOMAIN=chat.acme.com bash scripts/install.shСкрипт:
- Проверяет наличие docker + openssl
- Генерирует
.env.prodс надёжными случайными секретами (режим 600) - Собирает три образа (web / ws / worker)
- Поднимает весь стек командой
docker compose -f docker-compose.prod.yml up -d - Выполняет
prisma migrate deployвнутри контейнера web
Что запускается
- postgres — pgvector PG16
- redis — pub/sub + очередь (защищён паролем)
- minio — S3-совместимое хранилище для вложений
- web / ws / worker — три процесса приложения
- nginx — обратный прокси на порту 8080 с апгрейдом WS
Добавление TLS
Входящий в комплект nginx терминирует HTTP/1.1 на порту 8080. Поставьте перед ним прокси, терминирующий TLS:
Caddy (проще всего)
# /etc/caddy/Caddyfile
chat.acme.com {
reverse_proxy localhost:8080
}Cloudflare Tunnel (вообще без входящего порта)
cloudflared tunnel create singlink
cloudflared tunnel route dns singlink chat.acme.com
cloudflared tunnel run --url http://localhost:8080 singlinkЭксплуатация (Day-2)
# Logs
docker compose -f docker-compose.prod.yml logs -f
# Restart everything
docker compose -f docker-compose.prod.yml restart
# Stop (data persists in named volumes)
docker compose -f docker-compose.prod.yml down
# Upgrade
git pull
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --build
docker compose -f docker-compose.prod.yml exec web pnpm db:deploy
# Backups (run from cron daily)
docker compose -f docker-compose.prod.yml exec -T postgres \
pg_dump -U singlink singlink | gzip > /backups/singlink-$(date +%F).sql.gzМасштабирование worker'ов
Запустите больше реплик AI worker (распределением занимается Redis BullMQ):
docker compose -f docker-compose.prod.yml up -d --scale worker=4Когда переходить на Kubernetes
- Вам нужны postgres / redis в режиме высокой доступности (управляемые RDS / ElastiCache)
- Вам нужно автомасштабирование при всплесках трафика
- Вы запускаете его в нескольких регионах
- Простой одного хоста недопустим для вашего SLA
Тогда переходите к Kubernetes / Helm.