В честь долгожданного Выпуск Друпала 8 сегодня я расскажу вам, как его установить с помощью Докер .
Сначала коротко, зачем это вообще делать, какие преимущества это дает:
- Хостер независимый.
Если вам необходимо перенести сайт на другой хостинг, это будет сделать гораздо проще, ведь по сути весь сайт представляет собой набор контейнеров, которым все равно, где они будут запущены.
- Клонирование.
Если вам необходимо создать новый экземпляр сайта, например для разработки или тестирования, то достаточно будет клонировать контейнеры.
- Совместимость с серверной средой.
Зачастую различия в версиях пакетов или отсутствие какого-либо расширения в разных средах приводят к неочевидным ошибкам.
Использование одних и тех же контейнеров в разных средах помогает избежать этого.
- Изоляция.
Изоляция Docker полезна, когда у вас есть несколько сайтов или экземпляров сайтов на одном сервере (высокая нагрузка на один сайт не повлияет на другие).
Хотя она несколько своеобразная
- Оптимальная серверная среда.
Ни для кого не секрет, что тот же nginx, php и mysql/mariadb нужно уметь оптимально настроить; в случае докера вы можете найти общедоступные контейнеры на докер-хаб , собранные другими людьми специально для вашей версии Drupal
- Масштабирование.
Каждый контейнер можно масштабировать как вертикально (добавлять ресурсы), так и горизонтально (клонировать и распределять нагрузку через балансировщик нагрузки).
Что ж, начнем.
Так как у восьмёрки нет нормальных модулей для интеграции с redis/memcached (для хранения внутреннего кеша) и лака (кэширование обратного прокси), среду будем строить без них, обойдемся всего двумя контейнерами: веб-сервером ( php + apache2) и базу данных (mariadb, она же форк mysql).
Для демонстрации мы запустим самый маленький дроплет (VPS) на DigitalOcean с Ubuntu 14.04 x64. Подключаемся к виртуальной машине по ssh под root; для простоты демонстрации мы отключим брандмауэр ufw по умолчанию, чтобы избежать его настройки:
Установка докера:root@drupal8-docker:~# ufw disable Firewall stopped and disabled on system startup
root@drupal8-docker:~# wget -qO- https://get.docker.com/ | sh
Проверим, что всё в порядке:
root@drupal8-docker:~# docker -D info
Containers: 0
Images: 0
Server Version: 1.9.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-68-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 1
Total Memory: 490 MiB
Name: drupal8-docker
ID: GUMM:PUBZ:VJOF:52B7:ZIEN:UCJC:4QA2:BSP5:UGSW:FGPV:AZY6:ASZD
WARNING: No swap limit support
Здесь мы видим, что мы еще не запустили ни одного контейнера, не скачали ни одного образа, версии докера и т. д. Файловая система по умолчанию — АУФС , что позволяет Docker использовать управление версиями своих изображений в стиле Git. Те.
при обновлении образа вы не будете скачивать все с нуля, а будет скачан только новый слой.
Идем дальше, теперь нам нужно скачать наши изображения.
Если не указать абсолютный путь, то по умолчанию изображение будет искаться по адресу Hub.docker.com , скачать Официальное изображение МариадБ .
Поскольку мы не указываем тег (версию), используется самый последний тег.
root@drupal8-docker:~# docker pull mariadb
В выводе вы увидите, как загружаются все слои (версии) изображения:
Теперь скачайте Официальное изображение Drupala , указывая нужный нам тег.
К Докерфайл , из которого собрано изображение, мы видим, что за основу взято изображение официальный образ PHP 5.6 с Apache , затем устанавливаются дополнительные библиотеки и расширения PHP, такие как gd, pdo и opcache. Затем устанавливаются рекомендуемые настройки opcache и скачивается сам Drupal. root@drupal8-docker:~# docker pull drupal:8.0.0
Давайте посмотрим на список докер-образов: root@drupal8-docker:~# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
drupal 8.0.0 ddddc055c2c2 5 days ago 570.9 MB
mariadb latest b8ba0befc716 6 days ago 302.1 MB
Они весят довольно много, поскольку оба образа созданы под управлением Debian Jessie с их системой пакетов APT, которая содержит множество тяжелых зависимостей.
Теперь запускаем контейнер с mariadb, ключ v(--volume), указываем докеру создать смонтированный раздел с узла хоста, где будут храниться данные базы данных, по умолчанию, если этого не сделать, данные будут храниться внутри контейнера и будет потеряно при пересборке контейнера (это может понадобиться для применения новых обновлений mariadb).
В ответ на выполнение команды отображается хеш (идентификатор) работающего контейнера.
root@drupal8-docker:~# docker run -e MYSQL_ROOT_PASSWORD=admin -e MYSQL_DATABASE=drupal8 -e MYSQL_USER=drupal8 -e MYSQL_PASSWORD=drupal8 -v mariadb:/var/lib/mysql -d --name mariadb mariadb
5a288bef768a000a28c0e482b8424007c606e8d0967703099f967ff6617ceb34
Теперь запускаем Drupal со ссылкой на только что запущенный mariadb и привязкой к порту 80. Ссылка — это по сути запись в /etc/hosts, указывающая на IP контейнера mariadb в виртуальной сети, созданной докером во время установки.
docker run --name drupal8 --link mariadb:mysql -p 80:80 -d drupal:8.0.0
Проверьте docker ps, чтобы убедиться, что оба контейнера работают:
Заходим на свой IP-адрес в браузере и видим установщик Drupal:
Проблем с установкой возникнуть не должно, единственное, на странице настроек базы данных нужно вместо хоста указать mysql вместо localhost; мы создали привязку, используя это имя выше.
Ура! Наслаждаемся только что установленным Drupal.
Теги: #drupal #drupal 8 #docker #веб-разработка #CMS #разработка сайтов #drupal
-
Для Новичков О Windows Phone 7
19 Oct, 24 -
Репортажи С Олимпиады На Youtube
19 Oct, 24 -
Выпуск Ide Qt Creator 3.3
19 Oct, 24 -
Олимпиада Фупм Мфти Для Школьников
19 Oct, 24