Ваше Node-приложение без возни с сервером
Приложение вы написали; утомительно всё остальное — VPS, который надо патчить, обратный прокси, который надо настроить, сертификаты, которые надо продлевать, менеджер процессов, чтобы всё это жило, и CDN, который прикручивают потом.
cdn.com.tr запускает ваше Node.js-приложение как управляемое контейнерное приложение. Вы подключаете Git-репозиторий, и каждый push собирает новый образ и выкатывает его. Вы получаете домен с автоматическим HTTPS, health-check, который перезапускает упавший контейнер, логи прямо в панели или CLI и возможность менять число реплик.
Поскольку всё работает в контейнере, рантайм — тот, который вы назовёте: ваша версия Node, ваш пакетный менеджер, ваш шаг сборки. Ничего не спрятано за умолчаниями хостинг-панели.
Next.js, NestJS, Express — всё, что контейнеризуется
Никакого особого списка «поддерживаемых фреймворков» нет, потому что нет и навязанного рантайма, с которым надо быть совместимым. Если приложение собирается в контейнер и слушает порт — оно здесь работает.
Это покрывает Next.js и Nuxt на фронте, NestJS, Express или Fastify для API и фоновые воркеры, которые вообще не отдают HTTP. Репозиторий с несколькими сервисами — веб-приложение, воркер, очередь — разворачивается как несколько контейнерных приложений из одного файла Docker Compose.
Вы сохраняете контроль над тем, что обычно ломается на шаред-хостинге: версия Node, нативные модули, лимиты памяти и то, как на самом деле идёт сборка.
Деплой из Git
Подключите репозиторий один раз и выберите ветку. Каждый push в неё собирает образ и разворачивает его. Ничего не надо загружать, никакого SSH, никакого собственного сборочного сервера.
В репозитории нужен Dockerfile — именно он задаёт сборку. Для Node-приложения это короткий файл, и он же делает деплой воспроизводимым: один и тот же коммит всегда даёт один и тот же образ. Примера ниже хватает для большинства проектов.
Dockerfile — a typical Node app
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production PORT=3000
COPY --from=build /app ./
EXPOSE 3000
CMD ["npm", "start"]
База, кэш и хранилище без лишних поставщиков
Большинству Node-приложений нужны база и кэш. Вместо регистрации где-то ещё и ручной вставки строк подключения включите их как управляемые аддоны — параметры подключения будут переданы в приложение за вас.
Доступны Postgres, MySQL, Redis и NATS, плюс S3-совместимое объектное хранилище для загрузок и статики — то же хранилище, из которого раздаёт CDN, так что пользовательские файлы уходят через edge, а не через ваше приложение.
Одна панель и один счёт: приложение, база, кэш, хранилище, DNS, CDN и WAF.
cdnctl — add-ons and deploy
cdnctl container addons enable-postgres --account <account_uuid> --app <app_uuid>
cdnctl container addons enable-redis --account <account_uuid> --app <app_uuid>
# object storage for uploads
cdnctl object-storage buckets create --account <account_uuid> --name uploads
# ship it
cdnctl container apps deploy --account <account_uuid> --app <app_uuid>
cdnctl container apps logs --account <account_uuid> --app <app_uuid> --tail 100
CDN уже впереди
Это та часть, которую иначе пришлось бы собирать отдельно. Приложение стоит за той же edge-сетью, что обслуживает наших CDN-клиентов: статика и кэшируемые ответы отдаются с ближайшего edge, со сжатием Brotli и автоматическими WebP/AVIF — ваш Node-процесс не тратит время на файлы, которые уже однажды отдал.
Благодаря 4 точкам присутствия в Турции турецкие пользователи обслуживаются с edge внутри страны, а сеть в 14 странах держит быстрыми остальных. WAF, защита от DDoS, фильтрация ботов и автоматический SSL — на том же edge, включены, а не в тарифе повыше.
После деплоя очищайте кэш той же CLI: `cdnctl purge --account <uuid> --path /assets/app.js`.
Staging, откат и честные цены
Выкладки в прод должны быть скучными. Можно создать preprod-копию приложения, развернуть туда, проверить и затем повысить до продакшена — и откатить повышение, если что-то не так. Health-check ловит контейнер, который стартовал, но не стал здоровым.
Тарифы начинаются от 9 $/месяц и включают CDN, WAF, защиту от DDoS и автоматический SSL, плюс 15 дней пробного периода. Отмените в любой момент и продолжайте пользоваться пробным периодом или получите возврат в тот же день. Оплата в местной валюте с турецким счётом, поддержка 7/24.
Частые вопросы о хостинге Node.js
Какие версии Node.js поддерживаются?
Та, что использует ваш образ. Рантайм берётся из вашего Dockerfile, поэтому версию Node выбираете вы и обновляете тогда, когда решите — ждать общей платформенной версии не нужно.
Нужно ли писать Dockerfile?
Да, сегодня в репозитории нужен Dockerfile (или Docker Compose с секцией build) — именно он задаёт сборку. Для типового Node-приложения это около десяти строк; пример выше подходит большинству. Заодно это делает деплой воспроизводимым.
Можно ли запустить несколько сервисов из одного репозитория?
Да. Импортируйте файл Docker Compose — каждый сервис станет отдельным контейнерным приложением: веб, воркер, планировщик. Базы и Redis из этого compose превращаются в управляемые аддоны, а не в контейнеры, за которыми надо следить.
Как работают фоновые задачи и cron?
Воркер — это просто ещё одно контейнерное приложение без HTTP-порта. Для задач по расписанию есть jobs: cron-выражение, которое вызывает путь в вашем приложении, так что отдельный процесс-планировщик не нужен.
CDN включён или отдельно?
Включён. Приложение находится за нашей edge-сетью с первого же деплоя — кэш, сжатие, автоматические WebP/AVIF, WAF, защита от DDoS и SSL, всё в одном тарифе от 9 $/месяц.