Docker + MODx
Зачем?
У OSX El Capitan встроенный php версии 5.5, что никуда не годится. А MAMP безбожно глючит
Docker на 10.11 тоже встанет не самый новый, но хорошо, что он идет с docker-compose в комплекте.
В этой заметке не рассматривается деплой и прод. Просто подготовка локальной среды для разработки.
Предполагается, что потом modx будет выпущен на какой-нибудь сервер и там будет крутиться.
Хотя, возможно, было бы проще выпустить его на тестовый домен на виртуальном сервере и не тратить массу времени на настройку окружения.
Скелет приложения
Можно найти по ссылке
Он имеет следующую структуру:
. ├── docker-compose.yml ├── Dockerfile ├── dump │ └── myDb.sql └── www └── index.php
В docker-compose.yml в секции db уточнить версию образа image: mysql:5.7
отключить проверку движка
command: --disable-partition-engine-check
в подсекции ENVIROMENT добавить хост по умолчанию MYSQL_ROOT_HOST: localhost
в секции phpmyadmin увеличиваем максимальный лимит загрузки файла дампа бд
UPLOAD_LIMIT: 300M
В принципе можно все копировать себе и запустить для проверки docker-compose up --build.
На страничке по адресу 0.0.0.0:8081 из базы данных myDb должны вывестиcь записи
Но для modx нужен драйвер PDO, поэтому Dockerfile дополняем и он становится:
FROM php:7.1.2-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql
У меня версия модкс 2.8, желающие могут поставить себе php версией постарше, у меня и с 7.1 ошибок нигде не было
Потом запускаем docker-compose up --build, пересобираем окружение, устанавливая необходимые дрова для бд
По адресу 0.0.0.0:8080 авторизовываемся в phpmyadmin, создаем или импортируем базу данных (если сайт в разработке)
Обычно я создаю файл path.php в корне, где объявляю константу PATH для локальной разработки и комментирую ее дубль для сервера,чтобы при переезде раскомментировать нужную и в /core/config/config.inc.php обновить инфу о базе данных.
То есть переезд становится менее болезненным и более быстрым. Особенно, если приходится таскать бэкап сайта туда-сюда.
Так вот в этом файле я присваиваю константе PATH значение /var/www/html/ . Оно берется из файла docker-compose.yml
из сервиса www. В путях ./cofong.core.php, /manager/config... я эту константу просто импортирую.
В файле /core/config/config.inc.php пишем инфу о базе (логин, пароль) и ip вместо локалхоста
IP добывается командой docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
Чистим кэш и по идее у нас все должно завестись
Если нужно использовать доменное имя типа site.local, то sudo nano /etc/hosts в маковском терминале
пишем типа 127.0.0.1 site.local
А в docker-compose.yml меняем ports: - "8001:80" на ports: - "80:80"
Полезные команды
- docker ps -a посмотреть запущенные контейнеры
- docker container prune удалить остановленные контейнеры
- docker exec -it 'modx_db_1' bash зайти в запущенный контейнергде 'modx_db_1' название вашего mysql контейнера
- mysql -uroot -ptest вход в консоль mysql. пароль root лежит в docker-compose в директиве MYSQL_ROOT_PASSWORD
- docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) узнать по какому адресу обращаться в открытый mysql контейнер. его надо прописать в /core/config/config.inc.php