VPS для разработчика: тестовые стенды
Тестовый стенд нужен, чтобы ошибку нашли вы, а не клиенты. Он должен быть похож на рабочий сервер по программам и настройкам, но может быть вдвое меньше по ресурсам и жить несколько дней. Разберём, как сделать стенд дешёвым, как держать несколько версий на одном сервере и как не допустить, чтобы копия сайта попала в поиск или отправила письма настоящим клиентам.
В разработке обычно три среды. На локальной машине программист пишет код. На тестовом стенде (staging) собранная версия проверяется в условиях, близких к рабочим: заказчик смотрит новую функцию, тестировщик проходит сценарии, проверяются миграции базы данных. Рабочий сервер (production) обслуживает настоящих пользователей. Иногда добавляют временные стенды для каждой ветки: на них показывают одну задачу и удаляют после слияния.
Что на стенде должно совпадать с рабочим сервером
- Версии программ. Та же операционная система, те же версии PHP, Node.js, Python, базы данных и веб-сервера. Ошибки, которые проявляются только на другой версии, — самые частые сюрпризы при выкладке.
- Настройки. Конфигурация веб-сервера, кэширование, лимиты загрузки файлов, часовой пояс, переменные окружения, кроме паролей и ключей.
- Способ выкладки. Стенд обновляется тем же скриптом или конвейером, что и рабочий сервер. Тогда проверяется и сама выкладка, а не только код. Как устроить такой конвейер, описано в статье CI/CD на своём VPS.
Что может отличаться. Ресурсы: стенду с одним-двумя пользователями хватает 1–2 ядер и 2–4 ГБ памяти, даже если рабочему серверу нужно 8 ядер. Объём данных: обезличенная выборка вместо полной базы. Проверять скорость под нагрузкой на уменьшенном стенде бессмысленно: для этого нужен сервер той же конфигурации, что и рабочий. Как проводить такую проверку, рассказано в статье Нагрузочное тестирование сайта перед запуском.
Короткие стенды: почасовая оплата и снимки
Стенд для показа задачи или проверки обновления нужен на несколько дней. Платить за него месяц не обязательно: при почасовой оплате деньги списываются, пока сервер существует, а после удаления списания прекращаются. По каталогу accsly.io на ноябрь 2026 года почасовую оплату предлагают 173 из 2 248 хостеров с тарифами VPS. Тариф с 1 ядром и 2 ГБ памяти у них стоит в середине рынка 904 ₽ в месяц, около 1,2 ₽ в час, и неделя работы стенда стоит примерно 210 ₽. Стенд с 2 ядрами и 4 ГБ — 1 971 ₽ в месяц, около 2,7 ₽ в час, три дня — примерно 190 ₽. Формула окупаемости и подводные камни разобраны в статье Почасовая оплата VPS: когда выгодна, тарифы — в подборке VPS с почасовой оплатой.
Снимок диска (snapshot) ускоряет создание стенда. Один раз настройте сервер, сделайте снимок, а новые стенды создавайте из него за минуты. Перед удалением стенда, который ещё понадобится, сделайте снимок и удалите сервер: хранение снимка обычно дешевле работающего сервера, но тоже стоит денег. Снимок у того же хостера не заменяет резервную копию — разница объяснена в статье Резервные копии VPS.
Если хостер новый, стенд — удобный способ проверить его до переезда рабочего сайта. По каталогу accsly.io на ноябрь 2026 года бесплатный тестовый период дают 247 хостеров; условия и ограничения таких периодов разобраны в статье Тестовый период и возврат денег.
Несколько стендов на одном сервере с Docker Compose
Если стенды нужны постоянно, дешевле держать один сервер побольше и запускать на нём несколько версий в контейнерах. Docker Compose по умолчанию читает compose.yaml и compose.override.yaml, а с ключом -f объединяет несколько файлов по порядку (документация Docker). Общая часть описывается один раз, а в compose.staging.yaml лежат отличия стенда: другие порты, меньшие лимиты памяти, тестовые переменные.
Каждый стенд запускается под своим именем проекта: docker compose -p feature-123 -f compose.yaml -f compose.staging.yaml up -d. У проектов с разными именами свои контейнеры, сети и тома, поэтому стенды не мешают друг другу. Снаружи их разводит один веб-сервер или обратный прокси по поддоменам: feature-123.stage.example.com. Как подготовить сервер к Docker и не забить диск образами, рассказано в статье Docker на VPS: с чего начать.
Сколько ресурсов брать: на каждый стенд с базой данных закладывайте 1–2 ГБ памяти и 5–10 ГБ диска. Сервер с 2 ядрами и 4 ГБ держит два-три небольших стенда. По каталогу accsly.io на ноябрь 2026 года такой тариф в середине рынка стоит 1 710 ₽ в месяц, четверть тарифов дешевле 1 027 ₽. Тариф с 1 ядром и 2 ГБ для одного стенда — 910 ₽, четверть дешевле 575 ₽. Подборки: VPS для тестового стенда и VPS для Docker.
Как закрыть стенд от поисковиков
Копия сайта в поиске — это дубли страниц, которые конкурируют с рабочим сайтом, и утечка того, что ещё не опубликовано. Способы по надёжности:
- robots.txt не защищает. Google прямо пишет, что запрет в robots.txt — не способ убрать страницу из поиска: адрес, на который ссылаются, может попасть в выдачу, даже если робот его не посещал.
- noindex. Метатег
<meta name="robots" content="noindex">или заголовокX-Robots-Tag: noindexзапрещает индексацию; заголовок проще добавить сразу для всего стенда в настройках веб-сервера. Его поддерживают и Google, и Яндекс. Робот должен видеть этот запрет, поэтому одновременно закрывать стенд в robots.txt нельзя (документация Google). - Пароль — самый надёжный вариант. Базовая авторизация в nginx включается двумя директивами,
auth_basicиauth_basic_user_file, а файл паролей создаётся утилитойhtpasswd(документация nginx). Директиваsatisfy anyпускает без пароля с адресов офиса и запрашивает его у остальных. Робот не увидит ни одной страницы.
Имя стенда не секрет. Let's Encrypt публикует каждый выданный сертификат в открытых журналах Certificate Transparency, и по ним видны все поддомены, на которые выпускались сертификаты. Сертификат на *.stage.example.com скрывает имена отдельных стендов, но защиту паролем не заменяет. Как выпускать такие сертификаты и настроить поддомены, рассказано в статьях SSL-сертификаты: бесплатные и платные и Домены и DNS для владельца сервера.
Данные и побочные эффекты
- Не копируйте рабочую базу как есть. В ней персональные данные клиентов, а стенд защищён хуже рабочего сервера. Обезличьте имена, телефоны, адреса почты и платёжные данные или соберите тестовый набор. Требования закона к таким копиям — в статье 152-ФЗ и хостинг.
- Отключите отправку писем и SMS. Стенд с копией базы может отправить уведомления настоящим клиентам. Направьте исходящую почту в тестовый почтовый ящик-ловушку или отключите её.
- Платежи — только в тестовом режиме. У платёжных систем есть тестовые ключи и тестовые карты; рабочие ключи на стенде не нужны.
- Проверьте задачи по расписанию. Выгрузки в маркетплейсы, синхронизация с CRM, обращения к внешним API из cron на стенде должны идти в тестовые среды или быть выключены.
- Отдельные ключи и пароли. Доступ к стенду получают подрядчики и тестировщики; ни один ключ со стенда не должен открывать рабочий сервер.
Забытые стенды
Стенд, о котором забыли, стоит денег каждый месяц и со временем становится самой уязвимой точкой: обновления на него не ставят, пароли на нём старые, а копия базы лежит открытой для подрядчиков, которые давно ушли. Несколько правил помогают этого избежать:
- у каждого стенда есть владелец и дата удаления, записанные в его названии или метке в панели хостера;
- временные стенды для веток удаляются тем же конвейером, который их создал, после слияния ветки;
- постоянный стенд обновляется вместе с рабочим сервером и закрыт так же: вход только по ключу, файрвол, обновления безопасности (Первые 10 шагов после покупки VPS);
- раз в месяц сверяйте список серверов в панели хостера со списком нужных стендов и удаляйте лишние.