Compute
Compute — рантайм для серверных приложений. В отличие от статических деплоев (файлы на CDN) и Edge Functions (V8 isolate), Compute запускает полноценный серверный процесс с файловой системой, WebSocket, native modules и доступом к платформенным API.
Когда использовать Compute
Заголовок раздела «Когда использовать Compute»| Задача | Подходит? |
|---|---|
| Next.js SSR / App Router | Да |
| Remix SSR | Да |
| Express / Fastify / Hono API | Да |
| Кастомный Bun HTTP-сервер | Да |
| WebSocket сервер | Да |
| Статический сайт (Vite, CRA) | Нет — используйте STATIC |
| Edge Functions (auth, redirects) | Нет — используйте ISOLATE |
Быстрый старт
Заголовок раздела «Быстрый старт»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-процессы автоматически масштабируются до нуля при отсутствии трафика:
- Активный — обрабатывает запросы
- Заморожен — после 15 секунд без запросов процесс приостанавливается (SIGSTOP). Память выгружается. Возобновление за 1-50ms при следующем запросе.
- Остановлен — после 2 минут в замороженном состоянии процесс полностью завершается. Следующий запрос запустит cold start.
Ресурсы и ограничения
Заголовок раздела «Ресурсы и ограничения»| Параметр | Значение по умолчанию | Настраивается |
|---|---|---|
| Память | 256 MB | Да |
| CPU | Shared | Да |
| PIDs | 512 | — |
| Таймаут запуска | 30 секунд | — |
| Файловая система | Read-only + overlay | — |
| Размер /tmp | 256 MB | — |
| Размер записываемого слоя | 512 MB | — |
| Исходящий трафик | 25 Mbit/s | — |
Настройки памяти и CPU задаются в Settings → Compute или через manifest.
Файловая система
Заголовок раздела «Файловая система»Корневая файловая система (/output) — read-only с overlay. Ваше приложение может записывать файлы, но записи хранятся во временном слое:
- Записи теряются при scale-to-zero (полная остановка процесса)
- Записи сохраняются при заморозке/разморозке (SIGSTOP/SIGCONT)
- Максимальный размер записываемого слоя — 512 MB
Для временных файлов используйте /tmp (256 MB).
Лимит исходящего трафика
Заголовок раздела «Лимит исходящего трафика»Каждый sandbox ограничен скоростью исходящего трафика в 25 Mbit/s. Это защитный механизм — предотвращает злоупотребления и обеспечивает стабильность соседних процессов.
Сетевые ограничения
Заголовок раздела «Сетевые ограничения»Compute-процессы имеют полный доступ к интернету (HTTP, базы данных, внешние API) с ограничениями на отправку email:
| Возможность | Hobby | PRO |
|---|---|---|
| HTTP/HTTPS запросы | Да | Да |
| Подключение к БД (PostgreSQL, MySQL, Redis, MongoDB) | Да | Да |
| WebSocket соединения | Да | Да |
| Отправка email (SMTP, порты 465/587/2525) | Нет | Да (до 100 соединений/мин) |
Environment Variables
Заголовок раздела «Environment Variables»Переменные окружения задаются в Settings → Environment Variables и автоматически передаются в процесс:
// Стандартный доступconst dbUrl = process.env.DATABASE_URL;
// Или через Runtime SDKimport { env } from '@onreza/runtime/env';const dbUrl = env.get("DATABASE_URL");Системные переменные, которые платформа устанавливает автоматически:
| Переменная | Описание |
|---|---|
PORT | Порт, на котором должен слушать сервер |
NODE_ENV | production |
HOSTNAME | 0.0.0.0 |
HOME | /tmp |
TMPDIR | /tmp |
PATH | Стандартные системные пути |
USER | onreza |
LANG | C.UTF-8 |
Платформенные API
Заголовок раздела «Платформенные API»В Compute-приложениях доступны все платформенные API через SDK @onreza/runtime:
- KV Store — key-value хранилище
- D1 Database — SQL база данных
- Image Optimization — оптимизация изображений
- Runtime SDK — полная документация
Перезапуск при сбое
Заголовок раздела «Перезапуск при сбое»Если Compute-процесс падает (crash, OOM, необработанное исключение), ONREZA автоматически перезапускает его:
- До 10 перезапусков в окне 5 минут
- Задержка между попытками увеличивается экспоненциально: 1с, 2с, 4с, 8с, 16с, 30с (максимум)
- После 10 неудачных перезапусков деплой помечается как Failed
Во время перезапуска входящие запросы получают HTTP 503 с заголовком Retry-After, что позволяет клиентам повторить запрос позже.
Автоматическое управление памятью
Заголовок раздела «Автоматическое управление памятью»ONREZA непрерывно мониторит потребление памяти каждого Compute-процесса и автоматически реагирует на проблемы — вплоть до бесшовной перезагрузки при утечках.
Автоматическое масштабирование
Заголовок раздела «Автоматическое масштабирование»Если ваше приложение стабильно использует более 80% выделенной памяти в течение минуты, платформа автоматически увеличивает лимит (×1.5), не прерывая работу процесса. Масштабирование происходит мгновенно и прозрачно.
Масштабирование ограничено hard cap — максимальным лимитом памяти вашего плана. Потребление сверх стартового лимита тарифицируется по метрике Memory GB-сек.
Обнаружение утечек памяти
Заголовок раздела «Обнаружение утечек памяти»Если память продолжает расти линейно более 2.5 минут (pattern: потребление растёт, а не стабилизируется), платформа определяет это как утечку памяти:
- Продолжает увеличивать лимит, давая приложению время работать
- Отправляет уведомление о предполагаемой утечке
- Если утечка достигает hard cap — запускает бесшовную перезагрузку
Бесшовная перезагрузка (blue-green restart)
Заголовок раздела «Бесшовная перезагрузка (blue-green restart)»Когда утечка памяти достигает максимального лимита, ONREZA не убивает процесс, а выполняет zero-downtime замену:
- Запускается свежий экземпляр приложения с начальным лимитом памяти
- Новый экземпляр проходит health check
- Трафик мгновенно переключается на новый экземпляр
- Старый (утекающий) процесс корректно завершается
Стадии реакции
Заголовок раздела «Стадии реакции»| Состояние | Что происходит | Действие платформы |
|---|---|---|
| Норма | Потребление < 80% лимита | Мониторинг |
| Давление | P80 > 80% более 60 секунд | Автоматическое увеличение лимита ×1.5 |
| Утечка | Линейный рост 2.5+ минут | Уведомление + продолжение масштабирования |
| Hard cap | Утечка достигла максимума | Бесшовная перезагрузка (blue-green) |
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 слоёв
- Edge Runtime — V8 runtime для Edge Functions
- Runtime SDK — платформенные API