Недавно вышла статья Iron_Butterfly, где в числе прочего, рассказывается, каким образом можно запустить мощнейший поисковый движок ElasticSearch внутри Docker-контейнера. Я хочу продолжить этот вектор и рассказать, какие еще задачи можно решить с помощью Docker-контейнеров, используя для этого Plesk и расширение Docker.
Краткий план
В статье мы рассмотрим, как с помощью помощью Docker extension можно решить задачи, которые тяжело или даже невозможно решить с Plesk без Docker-контейнеров. Данный список задач сформирован на основе популярных вопросов наших пользователей; в качестве пользователей мы рассмотрим владельцев хостинга, разработчиков web-приложений, администраторов WordPress.
Задачи:
— Одновременное использование различных версий баз данных;
— Разворачивание Memcached для WordPress;
— Использование собственного облачного Nextcloud хранилища;
— Запуск собственного приложения на Go. Запуск собственного git-репозитория;
— Тестирование новых версий Plesk не мешая работать боевому серверу.
Хочу уточнить, что все примеры в статье выполнены с использованием бесплатной версии расширения Docker; платная версия позволяет управлять сервисом Docker на удаленных серверах.
Вместо введения
- Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы.
- Docker extension (расширение Docker) — расширение, которое устанавливается внутри панели управления Plesk для расширения функционала самой панели.
Прежде, чем мы перейдем к конкретным примерам, давайте кратко посмотрим на существующие в текущей версии ограничения и подготовим Plesk для работы с контейнерами.
Известные проблемы и ограничения
- Указанные в Dockerfile порты по-умолчанию выставляются наружу. Для некоторых контейнеров такое поведение нежелательно. Всегда проверяйте и закрывайте доступ к контейнерам снаружи, если доступ не требуется;
- Закрыть доступ к контейнеру снаружи возможно средствами системного брандмауэра. В облачных средах эти порты могут быть закрыты по-умолчанию облачным брандмауэром и/или security group. Контейнеры в этом случае будут доступны с localhost;
- Все тома подключаются с правами на чтение-запись. Вы не можете установить права только на чтение;
- Вы не можете использовать docker-compose и его конфигурационные файлы.
Развертывание окружения. Установка расширения Docker
0. Получите действующий сертификат с помощью Let's Encrypt (это необязательный шаг, я таким образом уберу предупреждение о само-подписанном сертификате);
1. Выберите Extensions в левом меню;
2. Найдите Docker;
3. Нажмите «Install»;
4. Дождитесь окончания процесса установки;
5. Перейдите в расширение. Готово.
Получите действующий сертификат с помощью Let's Encrypt (опционально)
Выберите Extensions в левом меню
Найдите Docker
Нажмите «Install»
Дождитесь окончания процесса установки
Перейдите в расширение. Готово
Задачи
Хостинг-провайдер
- Клиенты на нашем форуме периодически спрашивают, как обновить MySQL/MariaDB до последней поддерживаемой Plesk версии.
- Иногда возникают вопросы, как использовать веб-приложение, у которого в минимальных требованиях указана БД MySQL 5.7 или MariaDB 10.2, либо клиент хочет использовать самую последнюю версию БД, т.к. она лучше в тестах производительности.
- Клиент хочет полный контроль над MySQL сервером, а не над базой данных.
Скоро мы рассмотрим, как решить перечисленные задачи, но перед этим посмотрим, какие могут стоять задачи перед web-разработчиком.
Веб-разработчик
Давайте представим, что вы — разработчик веб-приложений. Сегодня вы начинаете разрабатывать новое веб-приложение, которое будет сохранять все данные в SQL базу данных. Какую SQL базу данных вы будете использовать? Возможно, вы предпочтете так написать веб-приложение, чтобы оно работало со всеми популярными базами данных, т.к. это поможет привлечь больше клиентов. Итак, какие базы данных вы знаете?
- Официально поддерживаемые в Plesk (это не полный список, только в качестве примера)
- MySQL 5.5/5.6/5.7
- MariaDB 10.0/10.1
- PosgreSQL 9.5
- Не поддерживаемые в Plesk
- MySQL 8.0
- MariaDB 10.2
- PostgreSQL 9.6
- Что-то еще?
- Microsoft SQL Server on Linux
Хорошо, ваше приложение готово, но теперь необходимо протестировать его со всеми этими базами данных. Давайте рассмотрим, каким образом эту задачу можно решить с помощью Plesk, Docker и расширения Docker.
Устанавливаем контейнеры со всеми необходимыми базами данных
Мы будем использовать официальные контейнеры с Docker Hub:
- MySQL: hub.docker.com/_/mysql
- MariaDB: hub.docker.com/_/mariadb
- PostgreSQL: hub.docker.com/_/postgres
Рассмотрим по шагам установку одного из контейнеров, допустим MariaDB 10.0:
- Найдите доступные контейнеры с MariaDB, выберите необходимую версию;
- Дождитесь окончания установки;
- Настройте необходимые параметры:
- Включите автозагрузку;
- Укажите статичный port mapping;
- Добавьте volume mapping, чтобы данные хранились вне контейнера;
- Настройте переменную окружения с паролем для root.
- Создайте контейнер и дождитесь, когда он запустится.
Повторите шаги по созданию контейнеров для MariaDB 10.1/10.2, MySQL 5.5/5.6/5.7/8.0, PostgreSQL 9.5/9.6.
Найдите доступные контейнеры с MariaDB, выберите необходимую версию
Дождитесь окончания установки
Настройте необходимые параметры
Создайте контейнер и дождитесь, когда он запустится
Повторите шаги по созданию контейнеров
Использование созданных баз данных в Plesk
Ниже представлено два варианта возможного использования созданных баз данных:
- Добавьте созданные базы данных в Plesk, чтобы у клиентов появилась возможность использовать их в своих подписках.
- Если база данных не поддерживается Plesk, то вы можете использовать её, подключившись напрямую (это актуально, например, для MySQL 8.0)
Немного скриншотов, которые показывают, как выглядит результат на настроенной системе.
Добавляем БД в Plesk
Итоговый получившийся список БД в Plesk
Как это всё выглядит внутри ОС
Администратор WordPress
Еще одна задача, которая может быть актуальна для владельцев сайтов с Wordpress, и решение которой я бы хотел рассмотреть в данной статье.
- Установить демон Memcached для увеличения скорости работы WordPress и уменьшения нагрузки на CPU.
- Из соображений безопасности, вы должны отключить доступ к Memcached отовсюду, исключая WordPress.
- В данном примере Plesk развернут в Google Cloud, поэтому я нахожусь под защитой брандмауэра облачной платформы.
- Из соображений безопасности, вы должны отключить доступ к Memcached отовсюду, исключая WordPress.
Шаги:
- Проверьте настройки вашего брандмауэра, вы должны блокировать внешние подключения к memcached;
- Найдите и установите контейнер с Memcached;
- Включите автозапуск и настройте привязку порта;
- Запустите контейнер;
- Проверьте, что всё работает.
Проверьте настройки вашего брандмауэра, вы должны блокировать внешние подключения к memcached (индивидуально)
Найдите и установите контейнер с Memcached
Включите автозапуск и настройте привязку порта
Запустите контейнер
Проверьте, что всё работает
Организация
Задача, которая может быть актуальна для небольших организаций: вы хотите иметь собственный ресурс для обмена файлами на базе Nextcloud. Эту задачу тоже можно легко решить.
Собственный Nextcloud в Plesk c Docker?
Шаги:
- Найдите и установите контейнер с Nextcloud;
- Обратите внимание, что volume mapping оставлен не настроенным; это сделано сознательно, т.к. внутри Dockerfile для Nextcloud используется unnamed docker volume.
- Дождитесь, когда он запустится;
- Настройте правила proxy для Docker в «Websites & Domains»;
- Откройте web-интерфейс Nextcloud и установите имя и пароль для администратора;
- Готово. Вы можете использовать Nextcloud.
Найдите и установите контейнер с Nextcloud
Дождитесь, когда он запустится
Настройте правила proxy для Docker в «Websites & Domains»
Откройте web-интерфейс Nextcloud, установите имя и пароль для администратора
Готово. Вы можете использовать Nextcloud
Go-разработчик
В настоящее время у Plesk нет расширений, позволяющих работать с Go, но вы можете написать приложение на Go и запустить его под Plesk в Docker-контейнере. Я не умею писать на Go, поэтому для наглядности я возьму готовый продукт написанный на Go и покажу, как запустить собственный git-сервис в Plesk.
Найдите контейнер с Gogs
Настройте контейнер с Gogs
Запустите контейнер с Gogs
Укажите начальные настройки для самого Gogs
Готово. Собственный git-сервис запущен и работает
Создадим первый репозиторий. Назовем его… HelloWorld
Тестирование новых версий Plesk!
Давайте установим Plesk как Docker-контейнер в Plesk с расширением Docker! Сразу отвечу на вопрос «Зачем?»:
- Можно тестировать собственные планируемые изменения в изолированном окружении независимо от боевой версии сайта и только затем применять их к публичной версии сайта.
- Можно развернуть Plesk Preview, посмотреть новый функционал, при необходимости заранее проверить, что веб-сайты готовы к обновлению в будущем.
Найдите контейнер с Plesk
Настройте контейнер с Plesk
Запустите контейнер с Plesk. Готово. Можно проверять
Заключение
Вместо заключения предлагаю обсудить в комментариях, какие общедоступные контейнеры с Docker Hub вы регулярно используете в повседневной работе, либо наоборот, почему вы отказались от использования публичных контейнеров в своих задачах.
Комментарии (4)
AYamshanov Автор
20.11.2017 08:29Каждый сайт представляет собой отдельный Virtual Host и не является индивидуальной виртуальной машиной (VPS/VDS) клиента. Клиент может установить Plesk на свой VPS и единолично использовать возможности панели управления.
klyuchnik
20.11.2017 10:21Спасибо за статью! У меня вопрос по контейнеру «php» из официального репозитория (https://hub.docker.com/_/php/). Мне нужны версии php, которых нет в списке доступных в панели Plesk, но есть в Docker (контейнер php).
Есть ли возможность добавить версии php из Docker в список обработчиков php Plesk, чтобы у клиентов появилась возможность использовать их в своих подписках? Если есть, то как это сделать или где об этом почитать?
AYamshanov Автор
20.11.2017 11:13К сожалению, интегрировать контейнер php в Plesk на уровне подписок не получится. Утилита php_handler в качестве аргументов использует пути к файлам внутри файловой системы, также внутри Docker-контейнера должен быть доступ к клиентским файлам php.
Но если надо решить проблему с одним конкретным проектом, то см. вариант с Nextcloud: можно создать контейнер php требуемой версии, с помощью volume mapping обеспечить доступ к php-файлам, с помощью Proxy Rules направить запросы внутрь контейнера.
kolu4iy
"Найдите и установите контейнер. Запустите его".
Хотя, видимо, я придираюсь. Если ты хостер, то наверное так и надо.
Да, а машинки у клиентов виртуальные же при этом?