MAATRIX / Блог / Настройка staging-копии сайта

Настройка staging-копии сайта

Настройка staging-копии сайта

MAATRIX

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

Обсудить статью, задать вопрос или начать новую тему

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

Перейти в сообщество →

Зачем нужен staging

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

Разница между «проверил на staging» и «выкатил сразу в продакшен» — это разница между спокойным контролируемым обновлением и авралом, когда сайт упал, клиенты пишут гневные сообщения, а вы лихорадочно откатываете изменения. Особенно важен staging для интернет-магазинов и любых проектов, где простой напрямую стоит денег. Даже для небольшого сайта тестовая копия экономит нервы: вы видите результат изменений заранее и выкатываете уверенно.

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

Где разместить staging

Есть два подхода. Первый — держать staging на том же сервере, что и продакшен, в отдельной папке и на отдельном поддомене вроде staging.site.ru. Это просто и дёшево, синхронизация с боевым сайтом происходит локально и быстро. Минус — тестовая копия делит ресурсы с боевым сайтом, и тяжёлый тест теоретически может задеть продакшен.

Второй подход — отдельный сервер под staging. Это чище с точки зрения изоляции: тесты никак не влияют на боевой сайт, а окружение можно сделать точной копией продакшена. Для серьёзных проектов это правильнее. На практике для большинства сайтов достаточно первого варианта — staging в отдельной папке на том же VPS, если ресурсов сервера хватает с запасом. Разберём именно его как самый доступный.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Создаём копию сайта

Разместите staging в отдельном каталоге и на отдельном поддомене. Скопируйте файлы боевого сайта в новую папку:

mkdir -p /var/www/staging
rsync -a /var/www/production/ /var/www/staging/

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

mysqldump production_db > /tmp/prod.sql
mysql -e "CREATE DATABASE staging_db;"
mysql staging_db < /tmp/prod.sql

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

Закрываем staging от посторонних

Критически важный шаг, который часто забывают: staging нельзя оставлять открытым всему интернету. Если тестовая копия доступна публично, её может проиндексировать поисковик — и вы получите дубль сайта в выдаче, что вредит SEO. Хуже того, staging часто содержит свежий непроверенный код с потенциальными дырами. Закройте доступ паролем на уровне веб-сервера через базовую HTTP-аутентификацию:

htpasswd -c /etc/nginx/.htpasswd stageuser

Затем в конфиге виртуального хоста staging включите проверку пароля директивами auth_basic и auth_basic_user_file. Дополнительно закройте staging от индексации через robots.txt и заголовок noindex. Теперь тестовая копия доступна только вам и команде, а поисковики и посторонние её не видят. Это обязательная часть правильной настройки staging.

Синхронизация и выкат изменений

Staging полезен, пока он актуален. Со временем боевой сайт уходит вперёд — появляются новые заказы, посты, данные, — и staging устаревает. Заведите привычку периодически обновлять тестовую копию из продакшена, повторяя синхронизацию файлов и базы, чтобы тестировать на свежих данных. Автоматизируйте это скриптом, чтобы обновление staging было одной командой, а не ручной возней.

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

Staging как часть рабочего процесса

Максимум пользы staging приносит, когда становится обязательным этапом, а не разовой затеей. Возьмите за правило: ничего важного не выкатывается на продакшен, минуя проверку на копии. Обновили плагин — сначала на staging, посмотрели, что ничего не сломалось, потом на боевой. Меняете код — то же самое. Со временем это входит в привычку и экономит массу нервов, потому что все неприятные сюрпризы случаются на копии, где их никто не видит. Если проект вырос и staging на общем сервере начинает мешать продакшену, разумно вынести его на отдельный VPS — у MAATRIX второй сервер под тестовое окружение легко взять в той же локации, с оплатой из России картой или криптой.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Обсудить статью, задать вопрос или начать новую тему

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

Перейти в сообщество →

Частые вопросы

Можно ли держать staging на том же сервере?

Да, в отдельной папке и на поддомене — это самый доступный вариант. Но если ресурсов в обрез или нужна полная изоляция, staging выносят на отдельный сервер.

Почему staging надо закрывать паролем?

Открытую копию проиндексирует поиск, создав вредный для SEO дубль, а свежий непроверенный код может содержать дыры. Закройте её HTTP-аутентификацией и noindex.

Как выкатывать изменения из staging?

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

Как часто обновлять staging?

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

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.