Числа ниже: действующие пределы площадки. Если площадка их поменяет, об этом скажут
looma validate и сборка.
| Что |
Как получить |
| Сборка Python и Node.js |
runtime: { kind: python } или { kind: node }, Dockerfile пишет площадка |
| Любой другой стек |
свой Dockerfile: runtime: { kind: docker, dockerfile: Dockerfile } |
| Веб, фоновые процессы, задачи по расписанию |
раздел processes манифеста |
| Postgres |
data.postgres, строка подключения в DATABASE_URL |
| S3-бакет |
data.bucket, доступы в AWS_*, имя в LOOMA_BUCKET |
| Адрес и TLS |
https://имя.apps.loomafloat.ru, staging: https://имя-staging.apps.loomafloat.ru |
| Модели сети Looma Float |
раздел gpu, вызовы токеном LOOMA_APP_TOKEN на LOOMA_API_URL |
| Секреты |
looma secrets set ИМЯ=значение, в процессе это переменная окружения |
| Выход в интернет |
HTTP и HTTPS через прокси (HTTP_PROXY, HTTPS_PROXY) |
Что процесс получает в окружении и какие имена заняты:
Переменные окружения.
| Что |
Предел |
| Архив исходников |
до 100 МБ сжатым, до 1 ГБ распакованным, до 20 000 файлов |
| Сборка |
1 ядро, 1 ГБ памяти, до 30 минут; образ под amd64 |
| Процесс |
0,1–8 ядер (по умолчанию 0,5), 64Mi–32Gi памяти (по умолчанию 512Mi), до 10 экземпляров |
| Веб-процесс |
один на сервис, порт 1024–65535 |
| Запрос к сервису |
только HTTP, тело до 32 МБ; потоковые ответы (SSE, chunked) работают |
| Выход наружу |
только порты 80 и 443, только публичные адреса |
/dev/shm |
64 МБ |
| Нет |
Что делать |
| Видеокарты в процессе |
модели сети по API: Модели; обучать модели на площадке нельзя |
WebSocket (шлюз отвечает 501) |
поток ответа через SSE, уведомления через SSE или опрос; Streamlit и Jupyter придётся переписать на обычный веб |
| Протоколов кроме HTTP (gRPC, свой TCP или UDP) |
только HTTP API |
| Постоянного диска |
диск процесса стирается при перезапуске, сне и новом релизе; данные храните в Postgres и бакете: Данные |
| Redis, MongoDB, MySQL, брокеров, поисковых движков |
только Postgres и S3, замены: Данные |
| Внешних баз и сервисов на портах кроме 80 и 443 (Atlas 27017, Redis 6379, SMTP 587) |
HTTPS-вариант сервиса или замена |
Привилегий (Docker внутри, монтирование, privileged) |
не обойти |
| Chromium без окна (headless) |
скорее всего не запустится (песочница gVisor, /dev/shm 64 МБ): проверьте на staging или используйте внешний сервис рендеринга |
- Песочница gVisor. Файловая система процесса создаётся из образа: писать в неё
можно, но всё записанное пропадёт при перезапуске. Временные файлы в
/tmp
допустимы.
- Сон. Веб с
min: 0 засыпает после idle_stop без запросов (по умолчанию
5 минут) и просыпается первым запросом, который ждёт до двух минут. Чтобы отвечать
без задержки, поставьте min: 1.
- Staging запускает только веб, и этот веб засыпает без запросов при любом
min.
Процессы worker и задачи по расписанию работают только на prod: данные, токен и
секреты у staging общие с prod, и фоновые процессы сделали бы ту же работу второй
раз.
- Сеть. Наружу процесс выходит только через прокси из
HTTP_PROXY и
HTTPS_PROXY, других достижимых адресов нет. Python (requests, httpx,
urllib, boto3) берёт прокси сам. Node.js: Перенос: Node.js.
- Модели. Сервис вызывает только модели из раздела
gpu, остальные отвечают
403. Спящая модель поднимается первым вызовом: запрос ждёт до 4 минут, затем
приходит 503 с Retry-After: 30. Если имени нет в каталоге моделей, ответ 404.
access: clients пускает к сервису только клиентов, вошедших на витрине, и
программы с ключом клиента. Гость видит страницу входа, программа получает 401.
- Каждый запрос клиента приходит с заголовком
X-Looma-Client: это псевдоним
клиента, свой у каждого сервиса. Почты и имени сервис не получает. Свои учётные
записи проекта можно оставить или привязать к этому псевдониму.
- Вызов модели за клиента идёт с тем же заголовком
X-Looma-Client.
- Событие учёта:
POST $LOOMA_API_URL/charge с {"client", "event"}, имя события
из раздела events; событие, которого нет в events релиза, получает 400.
По желанию добавьте quantity (цена умножается на него) и id (повтор с тем же
id не запишется дважды). Цена события (price в events) записывает клиенту
расход, автору доход.