modx-docker — воспроизводимое окружение для MODX-проектов
modx-docker
modx-docker на GitHub — это не MODX Extra и не очередной transport package. Это отдельное инфраструктурное решение для воспроизводимого запуска MODX-проектов в Docker.
Главная задача проекта — дать разработчику возможность поднять конкретное состояние MODX и его runtime, не перестраивая под него всю локальную машину.
Это особенно важно для MODX Revolution, где реальная совместимость проекта часто определяется не одной версией CMS, а целой комбинацией:
MODX
+ PHP
+ MySQL / MariaDB
+ Composer
+ конкретные Extras
+ кастомный код проекта
+ состояние базы данных
+ состояние файловой системы
Старый рабочий проект может зависеть от весьма конкретного сочетания этих частей. Попытка просто перенести его на современный PHP или новую версию базы нередко приводит к цепочке несовместимостей. modx-docker создаётся как инструмент, который позволяет сначала воспроизвести исходное рабочее окружение, а уже затем безопасно исследовать, обновлять или мигрировать проект.
Что делает текущая версия
На данный момент репозиторий поднимает минимальный стек:
nginx
↓
PHP-FPM
↓
MySQL
+ phpMyAdmin
Исходники MODX не зашиваются в готовый image. Вместо этого окружение получает нужную версию Revolution непосредственно из Git и выполняет автоматическую установку.
Это принципиальный выбор: можно запускать не только опубликованный релиз, но и нужную ветку, tag или в перспективе конкретный commit ядра.
Установка выполняется без браузерного setup wizard и разбита на отдельные стадии: подготовка директории, получение исходников, создание базы, Composer, сборка core transport, CLI setup и адаптация конфигурации к Docker-окружению.
После запуска исходники остаются доступны на файловой системе разработчика, поэтому с ними можно работать обычными Git-инструментами и редактором, а приложение продолжает выполняться внутри изолированного runtime.
Исследовательская версия с MiniShop3
Отдельно развивается research-ветка, которая проверяет следующий уровень идеи: не только автоматически устанавливать MODX из Git, но и собирать из исходников и нативно устанавливать связанный стек pdoTools 3 + VueTools + MiniShop3.
Эта версия пока не считается готовым стабильным workflow — направление только исследуется. Основная гипотеза состоит в том, что MODX и Extras можно воспроизводимо собирать из конкретных Git refs, используя штатные build scripts компонентов и MODX Transport API, без ручной установки через Manager.
Подробности, текущий pipeline и ограничения описаны отдельно: modx-docker-minishop.
Зачем это нужно
Разработка под конкретную версию MODX
Один проект может требовать MODX 2.x и старый PHP, другой — MODX 3.x и современный runtime. Вместо глобального переключения PHP, MySQL и системных библиотек каждый проект получает собственную среду.
Локально это позволяет одновременно держать несколько сайтов с несовместимыми требованиями:
Project A
└── MODX 2.x / PHP 7.4 / MySQL 5.7
Project B
└── MODX 3.x / PHP 8.2 / MySQL 8
Project C
└── другая историческая конфигурация
Окружения не должны мешать друг другу и не требуют превращать рабочую систему разработчика в набор старых глобально установленных runtime.
Исследование legacy-проектов
Для MODX это один из основных сценариев.
Большое количество работающих сайтов создавалось много лет назад и зависит от конкретных версий ядра и Extras. Когда такой проект нужно починить или модернизировать, первым шагом должна быть не попытка сразу обновить всё до последних версий, а получение воспроизводимого рабочего состояния.
modx-docker должен позволить сказать примерно следующее:
поднять нужный MODX
→ подобрать нужный PHP и DB runtime
→ воспроизвести проект
→ найти несовместимости
→ постепенно обновлять окружение
Это превращает Docker не просто в удобство разработки, а в лабораторию для сопровождения и миграции legacy-систем.
Разработка и тестирование самого MODX
Так как Revolution берётся непосредственно из Git, окружение подходит и для работы с ядром MODX.
Можно checkout'ить нужную ветку или изменение, воспроизводить issue, менять код ядра и проверять результат в реальном приложении без подготовки отдельного Docker image для каждой итерации.
В дальнейшем тот же подход может использоваться для проверки изменений MODX на нескольких комбинациях PHP и базы данных.
Почему важна воспроизводимость
Ценность такого окружения не в том, что сайт удалось один раз запустить на компьютере конкретного разработчика.
Важно иметь возможность через месяц или год снова получить то же состояние из декларативной конфигурации и исходных данных.
Поэтому архитектурное направление проекта — постепенно выносить характеристики runtime в параметры:
MODX_REF
PHP_VERSION
DB_ENGINE
DB_VERSION
COMPOSER_VERSION
Конкретный набор ещё развивается, но общий принцип состоит в том, что версия среды должна быть частью описания проекта, а не скрытым свойством компьютера разработчика.
Реальный MODX-проект — это не только Git
У MODX есть важная особенность: существенная часть проектного состояния традиционно хранится в базе данных.
Там могут находиться:
- Resources;
- Templates;
- Chunks;
- Snippets;
- TVs;
- System Settings;
- состояние установленных пакетов;
- другие конфигурационные сущности.
Одновременно в файловой системе находятся assets, компоненты, кастомный PHP-код, файлы Extras и иногда изменения самого ядра.
Поэтому чистой установки MODX недостаточно для воспроизведения произвольного реального сайта.
Следующее важное направление modx-docker — поддержка восстановления проекта из исходных данных:
- только дамп базы;
- только файлы;
- база и файлы вместе;
- либо чистая установка без snapshot.
После такого восстановления окружение должно уметь адаптировать настройки проекта к локальному Docker runtime: параметры подключения к базе, домен, пути, cache и другие environment-specific значения.
Docker-in-Docker и изоляция проектов
В репозитории предусмотрен внешний Docker-контейнер, внутри которого может работать собственный Docker daemon и запускаться внутренний Compose-стек проекта.
Это решение нужно не для простого ручного запуска одного сайта, а для более общего сценария управления изолированными проектными средами.
Вместо предоставления управляющему процессу доступа к Docker daemon всей машины можно создать отдельную границу проекта:
Project environment
└── own Docker daemon
├── nginx
├── php-fpm
├── database
└── additional services
Такой подход позволяет локально управлять несколькими независимыми сайтами, у каждого из которых собственный набор сервисов и версий, не смешивая их внутреннее состояние.
Связь с AI-разработкой
modx-docker также используется как практический runtime для более общего направления: разработки и сопровождения веб-проектов с помощью AI-агентов.
Для агента недостаточно видеть только файлы Git-репозитория. Чтобы реально диагностировать и менять старый проект, ему нужно иметь возможность поднять приложение, выполнить код в корректном окружении, увидеть ошибки, проверить изменения и повторить эксперимент.
В этом контексте modx-docker выполняет роль воспроизводимого runtime-адаптера для MODX:
AI / developer
↓
project state
↓
modx-docker
↓
real MODX runtime
MODX является особенно хорошим полигоном для такого подхода из-за большого количества исторических проектов и сильной зависимости от конкретных комбинаций версий.
Текущее состояние проекта
Проект находится в активной разработке. Текущая версия уже демонстрирует базовый сценарий: получить заданную версию MODX из Git, собрать необходимое окружение и автоматически установить её в Docker.
Дальнейшее развитие сосредоточено вокруг параметризации runtime, работы с реальными snapshot проектов и более удобного программного управления окружениями.
Актуальный код и изменения доступны в открытом репозитории: github.com/MODX-Club/modx-docker.