ONREZA Compute
ONREZA Compute — среда для полноценных серверных приложений. В отличие от статических деплоев (файлы на CDN) и ONREZA Functions (короткие event-handlers без своего сервера), Compute запускает полноценный серверный процесс с файловой системой, WebSocket, native modules и доступом к платформенным API.
SSR-фреймворки (Next.js, Remix, Astro SSR) — это тоже Compute: серверный рендеринг выполняется в полноценном Bun-процессе.
Когда использовать Compute
Заголовок раздела «Когда использовать Compute»| Задача | Подходит? |
|---|---|
| Next.js SSR / App Router | Да |
| Remix SSR | Да |
| Express / Fastify / Hono API | Да |
| Кастомный Bun HTTP-сервер | Да |
| WebSocket сервер | Да |
| Статический сайт (Vite, CRA) | Нет — используйте STATIC |
| Лёгкие event-handlers (auth, redirects, webhooks) | Нет — используйте ONREZA Functions |
Быстрый старт
Заголовок раздела «Быстрый старт»Next.js (автоматически)
Заголовок раздела «Next.js (автоматически)»Next.js SSR определяется автоматически. Настройка не требуется — standalone output и process.env.PORT обрабатываются платформой.
Кастомный сервер
Заголовок раздела «Кастомный сервер»Минимальный пример для Express / Bun:
import express from "express";
const app = express();const PORT = parseInt(process.env.PORT || "3000");
app.get("/", (req, res) => { res.json({ hello: "world" });});
app.listen(PORT, "0.0.0.0", () => { console.log(`Server running on port ${PORT}`);});Конфигурация порта
Заголовок раздела «Конфигурация порта»// ✅ Правильно — читает порт из окруженияconst PORT = parseInt(process.env.PORT || "3000");app.listen(PORT, "0.0.0.0");
// ❌ Неправильно — захардкоженный портapp.listen(3000);
// ❌ Неправильно — слушает только на localhostapp.listen(PORT, "127.0.0.1");Важно: сервер должен слушать на 0.0.0.0 (все интерфейсы), не на 127.0.0.1. Платформа проверяет доступность извне сетевого пространства процесса.
Фреймворки и PORT
Заголовок раздела «Фреймворки и PORT»| Фреймворк | Поддержка process.env.PORT |
|---|---|
| Next.js standalone | Автоматически |
| Remix | Автоматически |
| Express | Требуется ручная настройка |
| Fastify | Требуется ручная настройка |
| Hono | Требуется ручная настройка |
| Bun.serve | Требуется ручная настройка |
Scale-to-zero
Заголовок раздела «Scale-to-zero»Compute-процессы автоматически масштабируются до нуля при отсутствии трафика:
- Активный — процесс обрабатывает запросы и держит in-process state.
- Остановлен — после idle timeout процесс полностью завершается и освобождает выделенные ему runtime-ресурсы.
- Новый запрос — платформа создаёт новый sandbox, запускает процесс и ждёт, пока приложение начнёт принимать трафик.
Ресурсы и ограничения
Заголовок раздела «Ресурсы и ограничения»| Параметр | Значение по умолчанию | Настраивается |
|---|---|---|
| Оценка памяти для размещения | 256 МБ | Автоматически |
| Максимальная память | Hobby — 1 ГБ, Pro — 4 ГБ, Enterprise — 8 ГБ | По плану |
| CPU | Shared | Да |
| PIDs | 512 | — |
| Таймаут запуска | 30 секунд | — |
| Файловая система | Read-only + overlay | — |
| Размер /tmp | 256 MB | — |
| Размер записываемого слоя | 512 MB | — |
| Исходящий трафик | 25 Mbit/s | — |
Настройки памяти и CPU задаются в Settings → Compute или через manifest.
Приоритет CPU
Заголовок раздела «Приоритет CPU»CPU на сервере — общий ресурс, разделяемый между всеми запущенными приложениями. Каждому процессу назначен лимит CPU (максимум, который он может использовать) и приоритет (доля при конкуренции).
Лимит — жёсткий потолок. Если вы задали лимит CPU в настройках, приложение никогда не превысит его — даже если сервер временно свободен.
Приоритет работает только при нагрузке. Когда несколько процессов одновременно нуждаются в CPU, ONREZA распределяет ресурс пропорционально приоритету. Если конкуренции нет, приоритет не влияет — все получают сколько нужно.
Приоритет зависит от плана и типа деплоя:
| План + тип деплоя | Приоритет |
|---|---|
| Hobby, preview | 1× |
| PRO, preview | 5× |
| Hobby, production | 10× |
| Enterprise, preview | 20× |
| PRO, production | 50× |
| Enterprise, production | 100× |
На практике это означает, что production-деплой на PRO получит в 50 раз больше процессорного времени, чем preview на Hobby, если оба окажутся под нагрузкой одновременно.
Файловая система
Заголовок раздела «Файловая система»Корневая файловая система (/output) использует immutable artifact как нижний
слой и writable ephemeral overlay. Ваше приложение может записывать файлы, но
записи хранятся только во временном слое:
- Записи теряются при stop, redeploy и scale-to-zero
- Максимальный размер записываемого слоя — 512 MB
Для временных файлов используйте /tmp (256 MB).
Лимит исходящего трафика
Заголовок раздела «Лимит исходящего трафика»Каждый sandbox ограничен скоростью исходящего трафика в 25 Mbit/s. Это защитный механизм — предотвращает злоупотребления и обеспечивает стабильность соседних процессов.
Сетевые ограничения
Заголовок раздела «Сетевые ограничения»Compute-процессы имеют полный доступ к интернету (HTTP, базы данных, внешние API) с ограничениями на отправку email:
| Возможность | Hobby | PRO |
|---|---|---|
| HTTP/HTTPS запросы | Да | Да |
| Подключение к БД (PostgreSQL, MySQL, Redis, MongoDB) | Да | Да |
| WebSocket соединения | Да | Да |
| Отправка email по SMTP (порты 25/465/587/2525) | Нет | Нет |
Заблокированные сетевые порты
Заголовок раздела «Заблокированные сетевые порты»Compute работает в инфраструктуре Selectel и дополнительно применяет платформенный denylist для портов, которые Selectel блокирует на границе сети из-за риска abuse, amplification-атак или небезопасных устаревших протоколов.
| Порты | Протокол | Назначение |
|---|---|---|
| 17 | TCP/UDP | QOTD |
| 111 | TCP/UDP | ONC RPC / SunRPC |
| 135 | TCP/UDP | Microsoft EPMAP |
| 137, 138, 139 | TCP/UDP | NetBIOS |
| 389 | TCP/UDP | LDAP |
| 427 | TCP/UDP | SLP |
| 445 | TCP/UDP | SMB |
| 520 | UDP | RIP |
| 1900 | UDP | SSDP |
| 3702 | UDP | WS-Discovery |
| 11211 | TCP/UDP | Memcached |
SMTP-порты 25, 465, 587 и 2525 заблокированы на всех планах. Для отправки писем используйте HTTPS API email-провайдера.
Environment Variables
Заголовок раздела «Environment Variables»Переменные окружения задаются в Settings → Environment Variables и автоматически передаются в процесс:
// Стандартный доступconst dbUrl = process.env.DATABASE_URL;Системные переменные, которые платформа устанавливает автоматически:
| Переменная | Описание |
|---|---|
PORT |
Порт, на котором должен слушать сервер |
NODE_ENV |
production |
HOSTNAME |
0.0.0.0 |
HOME |
/tmp |
TMPDIR |
/tmp |
XDG_CACHE_HOME |
/tmp/.cache |
PATH |
Стандартные системные пути |
USER |
onreza |
LANG |
C.UTF-8 |
Платформенные API
Заголовок раздела «Платформенные API»В Compute-приложениях используйте стандартные runtime API и платформенные переменные окружения. Для edge/auth state используйте ONREZA Functions bindings, а оптимизацию изображений вызывайте через URL endpoint:
- KV-хранилище — key-value хранилище для ONREZA Functions
- Image Optimization — оптимизация изображений
- Runtime API — текущий публичный runtime contract
Перезапуск при сбое
Заголовок раздела «Перезапуск при сбое»Если Compute-процесс завершается из-за ошибки или нехватки памяти (OOM), платформа пробует восстановить его. Задержка между попытками увеличивается. Повторяющиеся сбои ограничены бюджетом перезапусков: после 10 сбоев или 5 OOM за полчаса запуск приостанавливается на 10 минут. Повторное развертывание позволяет восстановить исправленное приложение сразу.
Во время восстановления запросы получают HTTP 503 с заголовком Retry-After. Успешный перезапуск зависит от того, может ли приложение запуститься в доступных ресурсах.
Автоматическое управление памятью
Заголовок раздела «Автоматическое управление памятью»Платформа наблюдает фактическое потребление и регулирует рабочий объём памяти без остановки процесса. При росте нагрузки он расширяется в пределах лимита плана. После устойчивого снижения потребления платформа осторожно уменьшает рабочий объём, чтобы освободить место для других приложений на сервере.
Лимит плана доступен уже при запуске. Приложению не нужно пережить OOM, чтобы платформа разрешила использовать больше памяти. Изменение рабочего объёма само по себе не увеличивает плату: Compute считается по фактическому потреблению CPU и памяти, покрывается usage credit и вашим extra usage budget.
Рост потребления и OOM
Заголовок раздела «Рост потребления и OOM»Устойчивый рост памяти вблизи лимита вызывает уведомление. Он может быть связан с нагрузкой, кэшем или утечкой; проверьте метрики и логи приложения.
Если памяти не хватает, процесс может завершиться с OOM. Уведомление показывает установленный лимит и наблюдаемый пик потребления. Платформа применяет обычный перезапуск при сбое, сохраняя лимит плана. Для устранения причины может потребоваться оптимизация приложения или увеличение доступных ресурсов.
Изменение ресурсов
Заголовок раздела «Изменение ресурсов»Изменения лимита памяти и доли CPU применяются к работающему процессу, когда платформа получает обновлённые настройки. Если новое количество CPU требует другого размещения, платформа готовит новый экземпляр, проверяет его готовность и переключает трафик. Для такой замены нужна свободная ёмкость; при её нехватке используется обычный перезапуск.
Снижение лимита памяти ниже текущего потребления может привести к OOM. Перед уменьшением ресурсов проверьте потребление приложения.
Troubleshooting
Заголовок раздела «Troubleshooting»“Startup timeout”
Заголовок раздела «“Startup timeout”»Приложение не запустилось за 30 секунд.
Частые причины:
- Неправильный порт — используйте
process.env.PORT, не захардкоженное значение - Dev-сервер в production —
vite dev,next dev,webpack-dev-serverне работают в production. Соберите приложение и запустите production-сервер - Слушает на localhost — используйте
0.0.0.0, не127.0.0.1 - Тяжёлая инициализация — если приложению нужно больше 30 секунд на старт, оптимизируйте инициализацию
“Connection refused”
Заголовок раздела «“Connection refused”»Сервер запустился, но не отвечает на запросы.
- Убедитесь что сервер слушает на
0.0.0.0, не на127.0.0.1 - Проверьте что
process.env.PORTиспользуется
“Out of memory”
Заголовок раздела «“Out of memory”»Процесс превысил лимит памяти.
- Увеличьте лимит в Settings → Compute
- Проверьте утечки памяти в приложении
- Для Next.js: standalone build оптимальнее, чем
next start
См. также
Заголовок раздела «См. также»- Фреймворки — настройки для каждого фреймворка
- Build Output Manifest — конфигурация COMPUTE слоёв
- ONREZA Functions — короткие event-handlers без своего сервера
- Runtime API — поддержанные platform bindings