9 июля 2022 г.

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"

Полезные команды