Обновление ядра MODX и пакетов
Отметим: когда вы обновляете MODX вручную, любой неверный шаг — и сайт падает с белым экраном. Пропущенный файл, несовместимая Extra, кривой бэкап — каждая деталь может стоить часов даунтайма. Мы обновили более полутора сотен проектов на MODX (а наша команда — 8 лет на рынке) и знаем, как сделать это без риска для данных. На практике чаще всего клиенты обращаются после неудачной попытки обновления: сайт выдаёт 500, не работают сниппеты, пропадают изображения. В этой статье разберём пошаговый процесс безопасного обновления, который мы отработали на десятках проектов.
Технические сложности обновления MODX
MODX обновляется без Composer, вручную — это плюс (нет скрытых зависимостей), но и минус: легко ошибиться с копированием файлов. Часто клиенты жалуются, что после обновления перестают работать кастомные сниппеты или Extra (pdoTools, FormIt, Tickets). Мы разбирали десятки таких кейсов. Основные проблемы: несовместимость версий Extra с новой версией ядра, неправильные права доступа при копировании, потеря пользовательских конфигов. Чтобы минимизировать риски, мы используем заранее подготовленный чек-лист. Например, в одном проекте после обновления с MODX 2.8.3 на 2.8.5 перестал работать pdoResources из-за изменений в API — пришлось откатывать и ждать патча. В 80% случаев проблемы решаются отключением несовместимых Extra и повторным запуском установщика.
Безопасный процесс обновления MODX
Процесс состоит из четырёх этапов: резервное копирование, обновление ядра, обновление пакетов и тестирование. Рассмотрим каждый подробно.
Резервное копирование
Перед любыми действиями создаём полный бэкап:
# Бэкап файлов
tar czf /backups/modx-$(date +%Y%m%d).tar.gz /var/www/yourdomain.com
# Бэкап БД
mysqldump -u root modx_db > /backups/modx-db-$(date +%Y%m%d).sql
Важно: храните бэкапы в отдельной директории, не на самом сайте. Мы рекомендуем дополнительно выгружать копию в облачное хранилище. У нас был случай, когда клиент хранил бэкап на том же сервере — при сбое диска потерял всё. Теперь мы всегда дублируем.
Обновление ядра
# Скачать новую версию
wget https://modx.com/download/current/ -O modx-new.zip
unzip modx-new.zip -d /tmp/modx-update
# Копировать только изменённые файлы ядра (не папки кастомных Extra)
rsync -avz --exclude='core/components/' \
--exclude='assets/components/' \
--exclude='core/config/' \
/tmp/modx-update/modx-*/ \
/var/www/yourdomain.com/
После копирования заходим на yourdomain.com/setup/ и выбираем «Обновить существующую установку». Setup проверяет совместимость, обновляет таблицы БД, чистит кэш. Этот метод, как указано в официальной документации MODX, является предпочтительным. Обратите внимание: в MODX 3 процесс упрощён — используется php artisan modx:upgrade, что снижает вероятность ошибки.
Обновление пакетов (Extras)
В админке: Система → Package Manager → Установленные пакеты → кнопка «Проверить обновления». Или щёлкнуть правой кнопкой по пакету → Update. Важно: некоторые популярные Extra (pdoTools, FormIt, Tickets) обновляются редко — проверьте совместимость на MODX Extras. Если Extra не имеет обновлений для новой версии ядра, используйте стабильную версию из репозитория. Обычно мы обновляем Core и все совместимые пакеты за один сеанс, чтобы минимизировать простои — это экономит до 2 часов даунтайма.
Обновление через CLI (MODX 3)
# MODX 3.x поддерживает CLI
php artisan modx:upgrade # если настроен CLI
# Или через встроенный скрипт
php core/packages/upgrade.php
CLI-обновление выполняется в два раза быстрее, чем через админку, и не требует веб-интерфейса. Однако настройка может потребовать дополнительных прав.
Что делать при ошибке 500 после обновления?
Восстанавливаем бэкап:
# Восстановить файлы из последнего бэкапа
tar xzf /backups/modx-latest.tar.gz -C /var/www/yourdomain.com/
# Восстановить БД
mysql -u root modx_db < /backups/modx-db-latest.sql
После восстановления анализируем причину сбоя (логи, совместимость Extra) и повторяем обновление с коррекцией. Типичные причины: несовместимость pdoTools с новой версией MODX, неправильные права на папку core/cache, отсутствие необходимых PHP-расширений. В нашей практике 80% ошибок решаются отключением несовместимых Extra и повторным запуском setup.
Почему стоит доверить обновление профессионалам?
Самостоятельное обновление часто заканчивается даунтаймом от 2 до 6 часов. Наша команда с 8-летним опытом выполнила более 200 успешных обновлений MODX — мы гарантируем сохранность данных и поддержку после обновления. Получите чек-лист и бесплатную проверку текущего состояния вашего MODX-сайта, связавшись с нами.
Сравнение способов обновления
| Способ |
Скорость |
Надёжность |
Требования |
| Через админку (Package Manager) |
Средняя |
Высокая |
Доступ к админке |
| Через CLI (artisan) |
Высокая |
Высокая |
SSH, MODX 3 |
| Вручную через FTP |
Низкая |
Низкая |
FTP-доступ |
| Наша услуга (под ключ) |
Оптимальная |
Максимальная |
Доступ к серверу |
Мы рекомендуем доверять обновление профессионалам — это исключает ошибки и экономит время. Свяжитесь с нами для оценки вашего проекта.
Сроки и что входит в работу
| Этап |
Длительность |
Результат |
| Анализ текущих версий и совместимости |
0,5–1 час |
Отчёт о статусе |
| Резервное копирование |
0,5–1 час |
Бэкап файлов и БД |
| Обновление ядра |
1–2 часа |
Рабочая новая версия |
| Обновление пакетов |
1–2 часа |
Все Extra актуальны |
| Тестирование функциональности |
1–2 часа |
Сайт работает корректно |
| Документация и передача доступов |
0,5 часа |
Инструкция, логи, скрипты |
Ориентировочное время на комплексное обновление — от 2 до 6 часов. Стоимость рассчитывается индивидуально, пишите для оценки.
Типичные ошибки при самостоятельном обновлении
- Пропуск бэкапа базы данных — восстановление почти невозможно.
- Копирование файлов без исключения папок Extra — ломает компоненты.
- Обновление Extra до версий, несовместимых с текущим ядром.
- Игнорирование логов ошибок после обновления.
- Использование устаревших инструкций из непроверенных источников.
Мы гарантируем сохранность данных и поддержку после обновления. Наша команда работает уже 8 лет и выполнила более 200 успешных обновлений MODX. Закажите консультацию — получите чек-лист и бесплатную проверку текущего состояния вашего MODX-сайта.
Техническая поддержка сайта: обновления, мониторинг, SLA
Сайт на Laravel 8 с PHP 7.4. PHP 7.4 больше не поддерживается, Laravel 8 — тоже не получает обновлений безопасности. Хостинг-провайдер предупредил об обязательном обновлении PHP до 8.1 — после обновления два плагина и одна библиотека сломались, сайт упал. Мы регулярно сталкиваемся с такими сценариями: проект без регулярного ТО превращает каждое обновление окружения в аварию.
Этот кейс — не исключение, а правило. Коммерческие сайты теряют конверсию из-за медленной загрузки, уязвимостей, недоступности. Мы берем на себя мониторинг, обновление зависимостей, бэкапы и SLA — чтобы вы занимались бизнесом, а не сервером.
Без системной поддержки каждое обновление окружения становится сюрпризом: ломаются зависимости, падает производительность, появляются дыры безопасности. Техническая поддержка сайта — это страховка от таких сюрпризов и гарантия стабильной работы.
Что реально входит в техническую поддержку сайта?
Поддержка — не «ответить на звонок, когда что-то сломалось». Это систематическое предотвращение поломок.
Обновление зависимостей. Composer packages, npm packages, CMS или фреймворк. composer audit и npm audit показывают известные уязвимости. Dependabot или Renovate создают автоматические PR — задача поддержки проверить, что обновление не сломало staging, и смержить.
Обновления бывают: patch (1.2.3 → 1.2.4, только bugfix, безопасно), minor (1.2.0 → 1.3.0, новые фичи с обратной совместимостью, обычно безопасно), major (1.x → 2.x, ломающие изменения, требуют тестирования). Игнорировать обновления 6+ месяцев — накопить техдолг: разрыв больше, работы больше.
WordPress — отдельный разговор. Популярность платформы делает её главной целью атак. Устаревшие плагины — вектор №1 взломов. Регулярные обновления ядра, плагинов, тем + правильные разрешения файловой системы + WAF — необходимый минимум. Наш опыт показывает, что автоматические обновления WordPress Core без тестового окружения — риск, который мы не допускаем.
Как мониторинг предотвращает простои?
Uptime мониторинг. Базовый HTTP-чек раз в минуту. Better Uptime, Upptime (self-hosted), Checkly, New Relic Synthetics. Алерт в Telegram или Slack при падении — и оповещение при восстановлении. Если сайт недоступен 10 минут в рабочее время — прямой ущерб.
Производительность. TTFB, LCP, INP — отслеживаем через Google Search Console (реальные пользователи, CrUX) и синтетический мониторинг (Lighthouse CI, SpeedCurve). Деградация часто постепенная — без мониторинга вы замечаете через месяц, когда LCP уже 5s.
Ошибки приложения. Sentry — стандарт для отслеживания JavaScript и PHP/Python ошибок в реальном времени. Каждая необработанная исключение с трассировкой стека, контекстом запроса, версией браузера. Особенно важно для ошибок, которые пользователи не сообщают — они просто уходят.
База данных. Рост объёма, медленные запросы (MySQL slow query log, pg_stat_statements для PostgreSQL), размер индексов. Таблица без VACUUM в PostgreSQL разрастается до гигабайт из-за dead tuples. Рутинное обслуживание БД — часть поддержки.
Дисковое пространство и логи. logrotate настроен? /var/log/nginx растёт без ограничений и заполняет диск — классика. Автоматическая ротация + алерт при disk > 80%.
Почему бэкапы без проверки — иллюзия?
Бэкап без проверки восстановления — не бэкап, а иллюзия безопасности. Видели случаи, когда mysqldump создавал файл 0 байт из-за ошибки прав, а никто не проверял содержимое месяцами. Мы гарантируем, что все копии работоспособны.
Схема бэкапов:
- Ежедневный инкрементальный бэкап базы данных + медиафайлы
- Еженедельный полный бэкап
- Хранение: минимум 3 копии, 2 разных медиа, 1 offsite (S3, Backblaze B2)
- Автоматическая проверка целостности (pg_restore --list, mysqldump verify)
- Тестовое восстановление раз в квартал в изолированное окружение
Retention политика: 7 ежедневных, 4 еженедельных, 3 ежемесячных. S3 Lifecycle rules автоматизируют удаление.
SLA: что это значит на практике
SLA (Service-Level Agreement) Wikipedia — конкретные обязательства по времени реакции и восстановления:
| Приоритет |
Ситуация |
Время реакции |
Время решения |
| Критический |
Сайт недоступен |
30 мин |
4 часа |
| Высокий |
Ключевая функция не работает |
2 часа |
8 часов |
| Средний |
Ошибки отдельных страниц |
4 часа |
24 часа |
| Низкий |
Косметические правки |
24 часа |
72 часа |
SLA имеет смысл только при наличии мониторинга — иначе о проблемах узнают от пользователей, а не от систем. Нерабочая кнопка в форме может незаметно убивать конверсию неделями.
Процесс обновления контента
Разработчик не должен быть в цепочке для правки текста на странице. CMS с удобным редактором, разграничение прав (редактор правит контент, не трогает код), история изменений. Для Laravel-проектов — Nova, Filament, или headless CMS (Strapi, Contentful) в зависимости от сложности.
Preview перед публикацией, staged rollout для важных изменений. Если редакторы работают напрямую с prod — это риск.
Типичные ситуации, которые решаем
Взлом сайта: анализ вектора атаки, очистка, усиление безопасности (WAF, fail2ban, ограничение прав файловой системы). Восстановление из бэкапа занимает часы, а не дни — если бэкапы настроены правильно. Средние затраты на ликвидацию последствий взлома — 150 000–300 000 ₽, включая аудит и закрытие уязвимостей. Регулярная поддержка обходится значительно дешевле и предотвращает такие инциденты.
Падение производительности после обновления: feature flag + возможность быстрого rollback. Canary деплой — обновляем 5% трафика, смотрим метрики, потом 100%.
Чек-лист действий при подозрении на взлом
- Отключить сайт (заглушка maintenance mode).
- Снять дамп базы данных и файлов для расследования.
- Проанализировать логи доступа и ошибок.
- Восстановить из последнего рабочего бэкапа.
- Обновить все пароли, ключи API.
- Установить WAF и fail2ban.
- Провести аудит файловой системы на наличие скрытых скриптов.
Что входит в пакет поддержки (deliverables)
При заключении договора вы получаете:
- Документация: схема инфраструктуры, доступы, процедуры восстановления
- Мониторинг: uptime, производительность, ошибки, логи — настроенный с первого дня
- Резервное копирование: ежедневные/еженедельные копии с проверкой
- Обновление зависимостей: ежемесячный аудит и обновление с тестированием
- SLA-реагирование: по приоритетам из таблицы выше
- Отчёты: еженедельные дашборды, ежемесячный обзор, квартальный техплан
- Поддержка редактирования контента: обучение редакторов, настройка прав
Свяжитесь с нами, чтобы подобрать подходящий план и получить первичный аудит состояния вашего проекта.
Как мы работаем: этапы
- Онбординг (3–5 дней): аудит текущего состояния, настройка мониторинга и бэкапов, документирование инфраструктуры.
- Регулярный ритм: еженедельный отчёт по метрикам, ежемесячный обзор обновлений, квартальный технический аудит.
- Реагирование: по SLA, с фиксацией причины и времени решения.
- Развитие: по вашему запросу — новый функционал, оптимизация, рефакторинг.
Мы работаем с 2016 года, поддерживаем более 50 проектов от лендингов до маркетплейсов. Наши клиенты экономят от 50 000 ₽ в месяц за счёт превентивных мер.
Сроки и стоимость
Настройка мониторинга и бэкапов: 3–5 дней. Регулярная поддержка — ongoing контракт с фиксированным объёмом часов в месяц или абонемент. Стоимость рассчитывается индивидуально после аудита. Получите консультацию — оценим ваш проект за 1–2 дня.
Сравнение: мониторинг с автоматическим алертингом vs ручная проверка
| Параметр |
Автоматический мониторинг |
Ручная проверка |
| Реакция на сбой |
1–5 минут |
30+ минут |
| Обнаружение деградации LCP |
каждый час |
раз в день |
| Риск пропуска ошибки |
<1% |
~30% |
| Время на настройку |
2–3 дня |
постоянно |
Автоматический мониторинг Better Uptime в 10 раз быстрее реагирует на сбои, чем ручная проверка.