RE:NODE

Хостинг-бандлы: приложение, база данных и кэш вместе

Автор Команда RE:NODE
16 мин чтения


Бандл на RE:NODE - это два или три обычных тарифа, как правило сервер приложения, его база данных и иногда кэш. Их покупают одним заказом, оплачивают одним счётом, продлевают в одну дату и отменяют вместе. Бандл из двух тарифов стоит на 15% дешевле, чем те же тарифы по отдельности, из трёх - на 20%. Каждый сервер внутри - обычный сервер с той же панелью, консолью, файлами и бэкапами, что и у любого другого тарифа. Скидка достаётся ценой жёсткости: участники продлеваются вместе, их нельзя улучшить по одному, а отмена одного отменяет весь набор. Если ваш стек определён и вы собираетесь держать его какое-то время, бандл - просто более дешёвый способ его купить. Если одна из частей скоро перерастёт остальные, покупайте тарифы отдельно.

Вот и вся идея. Дальше в статье разобран каждый бандл из каталога, что в нём лежит, сколько он экономит в долларах, как соединить части между собой и в каких случаях мы сами посоветуем не связываться.

Что такое бандл и чем он не является#

Бандл - это способ выставления счёта, а не особый вид сервера. Когда вы его покупаете, панель создаёт каждый сервер тем же кодом, что и одиночный тариф, поэтому сервер PostgreSQL из бандла ничем не отличается от купленного отдельно. У него свой адрес и порт, свои сгенерированные учётные данные, свои лимиты ресурсов, свои слоты бэкапов и своя консоль. Общий у участников только счёт.

Меняется то, как набор хранится:

  • Один заказ. Все серверы бандла создаются после одной оплаты. Как и любой другой тариф, они собираются, когда платёж проходит, обычно в течение минуты.
  • Один счёт, одна дата продления. Бандл продлевается целиком. На странице Finances он показан карточкой бандла с одной кнопкой "Renew all", а у каждого участника указано, что он входит в бандл, и есть ссылка на него.
  • Отмена вместе. Если отменить бандл, все его серверы продолжают работать до конца оплаченного срока, а затем останавливаются. Отмена одного участника отменяет весь бандл.
  • Никаких улучшений по одному. Сервер-участник нельзя ни продлить, ни улучшить, ни понизить отдельно. Панель этого не позволяет.

Стоит сразу сказать и о том, чего бандл не даёт. Это не частная сеть между участниками: приложение обращается к базе по хосту и порту тарифа базы данных, точно так же, как если бы вы купили их в разные дни. Это не управляемый сервис, где мы настраиваем базу под ваше приложение. И это не другая панель и не другая очередь поддержки. Если вы умеете запускать приложение и базу рядом на отдельных тарифах, вы уже умеете работать с бандлом.

Все бандлы с расчётами#

Это двенадцать бандлов каталога на момент написания статьи. Цены указаны в долларах США в месяц при сроке в один месяц и могут меняться, поэтому источником истины считайте страницу бандлов на сайте и вкладку Bundles в магазине панели.

БандлЧто внутриБандл и по отдельности
Node.js + PostgreSQLNode.js Standard, PostgreSQL Starter$11.05 vs $13
Go + PostgreSQLGo Standard, PostgreSQL Starter$11.05 vs $13
.NET + SQL ServerC# / .NET Standard, SQL Server Express Starter$11.05 vs $13
Python + PostgreSQL + ValkeyPython Standard, PostgreSQL Starter, Valkey 256 MB$12 vs $15
Node.js + MongoDB + ValkeyNode.js Standard, MongoDB Starter, Valkey 256 MB$12.80 vs $16
Java + PostgreSQL + ValkeyJava Advanced, PostgreSQL Starter, Valkey 512 MB$16.80 vs $21
PHP stack: Web + MySQL + ValkeyHTML CSS JS PHP Standard, MySQL Starter, Valkey 256 MB$8 vs $10
Laravel + MySQL + ValkeyLaravel / PHP Standard, MySQL Starter, Valkey 256 MB$10.40 vs $13
WordPress + Valkey cacheWordPress Standard, Valkey 256 MB$8.50 vs $10
Ghost + Mail ServerGhost Standard, Mail Starter$10.20 vs $12
Headless: Strapi + Node.jsStrapi Standard, Node.js Standard$14.45 vs $17
Bot stack: Python + MongoDBPython Starter, MongoDB Starter$9.35 vs $11

Закономерность простая. Каждый бандл из двух тарифов стоит на 15% меньше суммы их прайсовых цен, каждый из трёх - на 20%. Цена "по отдельности" не завышена для красоты: это просто сумма месячных цен самих тарифов. Node.js Standard стоит $7, PostgreSQL Starter - $6, вместе $13, а 15% скидки с этой суммы дают $11.05.

В абсолютных цифрах экономия небольшая - от $1.50 до $4.20 в месяц. За год это от $18 до $50: для личного проекта это настоящие деньги, для бизнеса - погрешность. Мы скажем об этом прямо, не приукрашивая: скидка - повод выбрать бандл, когда он подходит, а не повод покупать серверы, которые вам не нужны.

Что даёт каждый участник

Ресурсы такие же, как у перечисленных выше тарифов. Для самых частых частей:

ТарифRAM / NVMe / vCPUПримечания
Node.js, Python, Go, .NET, Laravel Standard2 GB / 10 GB / 1Сервер приложения со слотом прокси
PostgreSQL Starter1 GB / 20 GB / 0.5Свои учётные данные, хост и порт
MongoDB Starter1 GB / 20 GB / 0.5Свои учётные данные, хост и порт
MySQL Starter1 GB / 10 GB / 1MySQL 8.4 LTS, пароль root генерируется
Valkey 256 MB0.25 GB / 2 GB / 0.5Защищён паролем, сохраняет данные на диск
SQL Server Express Starter2 GB / 10 GB / 1Редакция Express, 10 GB на базу

Бандл Java - исключение, которое намеренно взято с запасом: в нём Java Advanced с 4 GB RAM и 1.5 vCPU, потому что сервис на Spring Boot или Quarkus при 2 GB проводит всю жизнь в сборке мусора. К нему добавлен тариф Valkey на 512 MB. Бот-стек, наоборот, использует тариф Python Starter (1 GB, 0.5 vCPU), которого с запасом хватает для бота, большую часть времени ожидающего websocket.

Как работают скидка и оплата#

Скидка бандла применяется к месячной цене, а обычная скидка за долгий срок действует поверх неё. При покупке бандла на 3, 6 или 12 месяцев вы получаете ту же скидку за срок, что и у одиночного тарифа, и она складывается со скидкой самого бандла в 15% или 20%. Так что самый дешёвый способ держать стек, в котором вы уверены, - бандл на 12 месяцев.

Есть несколько ограничений по оплате, на которых часто спотыкаются:

  • Бонусным балансом бандл оплатить нельзя. Бонусный баланс привязан к отдельным линейкам хостинга, а бандл охватывает несколько, поэтому при оформлении заказа он не списывается. Баланс кошелька и PayPal работают.
  • Оплата криптовалютой пока не принимает бандлы. "Pay with crypto" работает для одиночных тарифов, бандлов и заказов VDS в ней нет.
  • Всплывающее окно заказа на сайте не принимает бандлы. Кнопка на странице бандлов ведёт прямо в магазин панели, где у бандлов своя вкладка.

Если во время сборки что-то пошло не так - например, один участник не создался, а остальные создались, - бандл всё равно записывается как оплаченный, недостающий сервер помечается для нашей команды, а карточка бандла на странице Finances показывает, какой части не хватает, пока её не настроят. Покупать заново не нужно.

Какой бандл подходит какому проекту#

Названия бандлов достаточно буквальны, но подбор стоит проговорить: неподходящий стек не становится правильным оттого, что он дешёвый.

Node.js + PostgreSQL, Go + PostgreSQL

Вариант по умолчанию для типичного веб-API или full-stack приложения с реляционными данными: пользователи, заказы, всё, где есть внешние ключи и транзакции. На стороне Node это Express, Fastify, NestJS и Next.js, на стороне Go - сервис на net/http или Gin. 1 GB у PostgreSQL Starter достаточно для базы в несколько гигабайт с разумным числом соединений. Если вы не уверены, нужен ли вам вообще Postgres, подробнее об этом спорит статья Postgres или MongoDB.

Python + PostgreSQL + Valkey

Django, Flask или FastAPI с реляционной базой и кэшем. Valkey здесь оправдывает своё место как брокер для Celery или RQ, бэкенд кэша и хранилище сессий. Если в вашем приложении нет фоновых задач и дорогих страниц, Valkey может и не понадобиться - тогда прочитайте когда Redis действительно нужен, прежде чем за него платить.

Node.js + MongoDB + Valkey

Для API с документной моделью: контент с гибкими полями, журналы событий, всё, где схема меняется каждую неделю. Valkey берёт на себя сессии, ограничения частоты запросов и очереди вроде BullMQ. Именно такую форму обычно принимает API на Express или Nest через несколько месяцев после старта.

Java + PostgreSQL + Valkey и .NET + SQL Server

Бандл с JVM рассчитан на сервисы Spring Boot, Quarkus, Micronaut или Ktor и даёт дополнительную память, которой требует JVM. Бандл .NET объединяет приложение на ASP.NET Core или Blazor с SQL Server Express. Это важно, когда приложение писалось под SQL Server и его T-SQL, а перенос на Postgres превращается в отдельный проект. Express ограничивает каждую базу 10 GB независимо от бандла; если вы где-то рядом с этим пределом, сама редакция Express вам не подходит.

PHP stack и Laravel stack

PHP stack использует обычную линейку веб-хостинга (HTML, CSS, JS и PHP) с MySQL 8.4 и Valkey - подходит для PHP-сайта, написанного вручную, приложения на старом фреймворке или CMS, которую вы ставите сами. Laravel stack запускает Laravel или Symfony на FrankenPHP, с установкой Composer при старте, и подходит современному приложению на Laravel, которому нужен Valkey для кэша, сессий и очередей.

WordPress + Valkey cache

WordPress в один клик, у которого уже есть собственная база MySQL, плюс сервер Valkey как постоянный кэш объектов. Это бандл с самым узким назначением: он помогает сайту с авторизованными пользователями, WooCommerce или тяжёлыми плагинами, где одни и те же запросы к базе выполняются на каждой странице. Сайту-визитке за полностраничным кэшем он даст мало.

Ghost + Mail Server

Публикация на Ghost и собственный почтовый сервер Stalwart, чтобы письма, которые отправляет Ghost, - ссылки для входа участников, письма об учётной записи - уходили с вашего домена. Неприятную часть мы разбираем ниже: массовая рассылка в Ghost построена вокруг Mailgun, поэтому собственный почтовый сервер покрывает транзакционные письма, но не массовые рассылки из коробки.

Strapi + Node.js и бот-стек

Headless-бандл размещает Strapi на одном сервере для контента, а на сервере Node.js - фронтенд на Next.js или Nuxt, который читает API Strapi. Бот-стек - это процесс Python для бота в Discord или Telegram, скрейпера или воркера и MongoDB для хранения того, что он собирает. Для бота, хватит ли Starter, разбирает статья как выбрать тариф для Discord-бота.

Соединяем части вместе#

Когда бандл собран, у вас два или три сервера, у каждого в панели указаны адрес и порт и сгенерированы учётные данные. Приложение не находит свою базу само по себе: вы передаёте ему параметры подключения, обычно через переменные окружения, и не храните их в репозитории. Почему так, объясняет статья переменные окружения и секреты.

ваш доменстрока подключенияпарольПосетителиHTTPS через слот проксиСервер приложенияNode, Python, PHP...Сервер базысвои хост и портСервер Valkeyсвои хост и порт
Один бандл, три сервера, один счёт

Типичному приложению на Node.js или Python с PostgreSQL и Valkey нужно примерно следующее, с настоящими хостами, портами и паролями, скопированными со страницы каждого сервера:

.env
DATABASE_URL=postgres://app_user:GENERATED_PASSWORD@DB_HOST:DB_PORT/app_dbREDIS_URL=redis://:VALKEY_PASSWORD@VALKEY_HOST:VALKEY_PORT/0

Valkey говорит на протоколе Redis, поэтому любая клиентская библиотека Redis - ioredis, redis-py, phpredis, Predis, Lettuce, StackExchange.Redis - подключается к нему по URL redis:// как к Redis. Для Laravel те же значения попадают в собственные ключи фреймворка:

.env
DB_CONNECTION=mysqlDB_HOST=MYSQL_HOSTDB_PORT=MYSQL_PORTDB_DATABASE=appDB_USERNAME=appDB_PASSWORD=GENERATED_PASSWORDREDIS_HOST=VALKEY_HOSTREDIS_PORT=VALKEY_PORTREDIS_PASSWORD=VALKEY_PASSWORDCACHE_STORE=redisSESSION_DRIVER=redisQUEUE_CONNECTION=redis

CACHE_STORE - название из Laravel 11, в старых версиях оно называется CACHE_DRIVER. Очередям на Valkey нужен ещё и воркер, запускающий php artisan queue:work или Horizon, а это отдельный долгоживущий процесс: продумайте, где он будет работать, прежде чем переключать QUEUE_CONNECTION. Об этом подробно рассказывает статья деплой Laravel в production.

Для бандла с WordPress обычный путь - плагин Redis Object Cache с константами в wp-config.php, добавленными выше строки, которая велит прекратить редактирование:

wp-config.php
define( 'WP_REDIS_HOST', 'VALKEY_HOST' );define( 'WP_REDIS_PORT', VALKEY_PORT );define( 'WP_REDIS_PASSWORD', 'VALKEY_PASSWORD' );

Затем включите кэш объектов на странице настроек плагина и убедитесь, что он показывает состояние "подключён". Подробности и настройки вытеснения, которые не дают заполненному кэшу превратиться в ошибки, есть в статье Valkey как кэш объектов для WordPress.

На обычной линейке PHP-хостинга перед тем, как писать код, проверьте через phpinfo(), есть ли расширение redis. Если его нет, Predis - это клиент на чистом PHP, он ставится через Composer и расширения не требует.

Ghost и его почтовый сервер

Ghost читает настройки почты из блока mail своей конфигурации (config.production.json в стандартной установке или аналогичные переменные окружения вида mail__options__host):

config.production.json
{  "mail": {    "from": "'Your Site' <noreply@example.com>",    "transport": "SMTP",    "options": {      "host": "mail.example.com",      "port": 465,      "secure": true,      "auth": { "user": "noreply@example.com", "pass": "MAILBOX_PASSWORD" }    }  }}

Чтобы хоть одно письмо попало во входящие, на почтовом сервере нужно правильно настроить DNS: записи MX, SPF, DKIM и DMARC, которые вы добавляете у своего DNS-провайдера. Как это сделать, показывает статья SPF, DKIM и DMARC простыми словами. Отправка работает с самого начала; для приёма почты из интернета нужно пробросить порт 25, это делает поддержка по запросу, один почтовый сервер на адрес. И, как сказано выше: Ghost отправляет массовые рассылки через Mailgun, так что эта схема подходит для ссылок для входа и писем об учётной записи, пока вы не измените способ отправки рассылок в Ghost.

Продление, отмена и смена решения#

Эту часть стоит прочитать до покупки, потому что именно здесь бандл ведёт себя иначе, чем отдельные тарифы.

Счёт на продление бандла выставляется один раз на весь набор, и действуют обычные напоминания: счёт приходит на почту за 7 дней до окончания и ещё раз в день окончания. "Renew all" продлевает всех участников до одной даты. Нельзя продлить базу на год, а приложение на месяц: срок - это срок бандла.

Отмена - всё или ничего. Отмените бандл или любого его участника, и каждый сервер в нём продолжит работать до конца оплаченного срока, а затем остановится. Если вы хотите оставить базу и отказаться от кэша, в бандле для этого нет переключателя. Сделайте бэкап всего, что хотите сохранить, до окончания срока и скачайте его, потому что удаление сервера удаляет и его бэкапы, в том числе заблокированные.

Улучшение одного участника не разрешено. Если PostgreSQL Starter заполнился, а приложению всё хватает, кнопки, чтобы перевести на следующий уровень только базу, нет. Это самое большое практическое отличие от отдельных тарифов, где улучшение тарифа - это смена лимитов без пересборки сервера. Если вы с этим столкнулись, откройте тикет и спросите, что можно сделать, а не отменяйте всё в спешке.

Когда лучше купить тарифы по отдельности#

Бандл - правильный выбор, когда стек определён, а размеры подходят. Он неверен в нескольких частых случаях:

  • Одна часть будет расти быстрее остальных. База, которая за несколько месяцев перевалит за 20 GB, или приложение, которому с приходом трафика понадобится 4 GB. Отдельные тарифы можно улучшать по одному.
  • Вам нужен другой размер, чем в бандле. В бандлах используются фиксированные уровни. Если вам нужен PostgreSQL Standard с Node.js Starter, такого бандла нет, и два отдельных тарифа нужного размера лучше бандла неподходящего.
  • Третья часть вам не нужна. Бандл из трёх тарифов со скидкой 20% не дешевле покупки двух тарифов по прайсу, если Valkey вы так и не используете. PHP stack за $8 всё равно стоит больше, чем один веб-тариф за $4.
  • Хватает слотов базы данных в самом тарифе приложения. В каждый тариф приложения и веба входят два слота базы данных, они создаются в панели со сгенерированными хостом, пользователем и паролем. Небольшому сайту или боту с скромной таблицей может хватить этого, и отдельный сервер базы данных не нужен вообще. Собственный сервер базы даёт свои RAM, CPU, диск, root-доступ и слоты бэкапов - он окупается, когда база становится важной, а не раньше.
  • Части относятся к разным проектам или людям. Если приложение ваше, а база общая с другим проектом, связывание их продления создаёт зависимость, которой вы не хотели.
  • Вы хотите платить бонусным балансом или криптовалютой. Ни то ни другое для бандлов не работает.
  • Вы ещё выбираете стек. Запустить тестовую копию на месяц до покупки дешевле, чем отменять неудачный бандл. Подробнее о том, как держать две копии рядом, в статье staging и production на одном аккаунте.

Сравнивать просто: оцените отдельные тарифы тех размеров, что вам действительно нужны, и посмотрите, совпадает ли с ними какой-нибудь бандл. Если да - берите бандл. Если он близок, но не совсем, выигрывают отдельные тарифы, потому что цену неверного размера вы платите каждый день, а скидка - это несколько долларов в месяц.

Бэкапы и повседневная работа#

У каждого сервера-участника свои слоты бэкапов, их число задаёт тариф. У линеек приложений, PostgreSQL и MongoDB их от 2 до 6 в зависимости от уровня, у MySQL, SQL Server и Mail - от 1 до 4, а у небольших тарифов Valkey - 0 или 1. Последнее важно меньше, чем кажется: Valkey в бандле - это кэш, хранилище сессий или очередь, и если вы используете его как основную базу данных, вы держите его не тем концом. Он сохраняет данные на диск через AOF и снимки, так что перезапуск его не опустошает, но данные, которые нельзя воссоздать, должны лежать в PostgreSQL, MySQL или MongoDB.

Настройте бэкапы сервера базы данных на его собственной вкладке Schedules и проверьте восстановление до того, как оно понадобится. Для базы данных дамп обычно полезнее, чем файловый архив каталога данных; оба способа и то, когда каждый безопасен, разбирает статья бэкапы и восстановление баз данных. Помимо видимых вам бэкапов, каждый сервер ночью копируется системным бэкапом вне слотов вашего тарифа; их нет на вкладке Backups, и восстановление из такого бэкапа идёт через поддержку.

Мониторинг устроен по каждому серверу отдельно. У каждого участника своя консоль и свои графики памяти, CPU и диска относительно лимитов, поэтому, когда приложение тормозит, смотрите и на график базы. PostgreSQL Starter, упёршийся в свои 0.5 vCPU, со стороны приложения выглядит точно так же, как медленное приложение.

FAQ#

Слабее ли сервер из бандла, чем тот же тариф, купленный отдельно?

Нет. Панель собирает участников бандла тем же кодом, что и одиночные покупки, поэтому PostgreSQL Starter в бандле имеет те же 1 GB RAM, 20 GB NVMe и 0.5 vCPU и те же возможности панели, что и купленный отдельно. Различия только в оплате: общая дата продления, общая отмена, нет улучшения по одному.

Можно ли добавить скидку бандла к уже имеющимся серверам?

Нет. Магазин продаёт бандл как новый набор серверов, собранный одним заказом. Если у вас уже работает приложение и вам нужен кэш, прямой путь - купить один тариф Valkey, а перенести данные на серверы бандла можно позже, если экономия стоит миграции.

Общаются ли серверы бандла друг с другом по частной сети?

Нет. Приложение подключается к своей базе и кэшу по адресу и порту, указанным для каждого сервера, с сгенерированными учётными данными, точно так же, как к отдельным тарифам. Не храните пароли в репозитории и используйте пароль, сгенерированный панелью, а не отключайте аутентификацию.

Что будет с моими данными, если я отменю бандл?

Серверы продолжат работать до конца оплаченного срока, а затем остановятся. Скачайте бэкап или дамп базы со всем, что вам нужно, до этого момента. После удаления сервера его бэкапы удаляются вместе с ним, включая те, что вы заблокировали от ротации.

Можно ли оплатить бандл сразу на год?

Да. Для бандлов действуют те же сроки в 3, 6 и 12 месяцев, что и для одиночных тарифов, а скидка за срок применяется поверх собственных 15% или 20% бандла. Поэтому годовой бандл даёт самую низкую месячную цену для стека, в котором вы уверены.

Это было полезно?