Top

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 up —build.

На страничке по адресу 0.0.0.0:8081 из базы данных myDb должны вывестить записи

Но для 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

Post a Comment