Давайте поговорим о Plesk с расширением Docker

  • Tutorial
Let's speak about Docker

Недавно вышла статья 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 в левом меню
Выберите Extensions в левом меню

Найдите Docker
Найдите Docker

Нажмите «Install»
Нажмите 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:


Рассмотрим по шагам установку одного из контейнеров, допустим MariaDB 10.0:

  1. Найдите доступные контейнеры с MariaDB, выберите необходимую версию;
  2. Дождитесь окончания установки;
  3. Настройте необходимые параметры:

    • Включите автозагрузку;
    • Укажите статичный port mapping;
    • Добавьте volume mapping, чтобы данные хранились вне контейнера;
    • Настройте переменную окружения с паролем для root.
  4. Создайте контейнер и дождитесь, когда он запустится.

Повторите шаги по созданию контейнеров для MariaDB 10.1/10.2, MySQL 5.5/5.6/5.7/8.0, PostgreSQL 9.5/9.6.

Найдите доступные контейнеры с MariaDB, выберите необходимую версию
Найдите доступные контейнеры с MariaDB, выберите необходимую версию

Дождитесь окончания установки
Дождитесь окончания установки

Настройте необходимые параметры
Настройте необходимые параметры

Создайте контейнер и дождитесь, когда он запустится
Создайте контейнер и дождитесь, когда он запустится

Повторите шаги по созданию контейнеров
Повторите шаги по созданию контейнеров

Использование созданных баз данных в Plesk


Ниже представлено два варианта возможного использования созданных баз данных:

  • Добавьте созданные базы данных в Plesk, чтобы у клиентов появилась возможность использовать их в своих подписках.
  • Если база данных не поддерживается Plesk, то вы можете использовать её, подключившись напрямую (это актуально, например, для MySQL 8.0)

Немного скриншотов, которые показывают, как выглядит результат на настроенной системе.

Добавляем БД в Plesk
Добавляем БД в Plesk

Итоговый получившийся список БД в Plesk
Итоговый получившийся список БД в Plesk

Как это всё выглядит внутри ОС
Как это всё выглядит внутри ОС

Администратор WordPress


Еще одна задача, которая может быть актуальна для владельцев сайтов с Wordpress, и решение которой я бы хотел рассмотреть в данной статье.

  • Установить демон Memcached для увеличения скорости работы WordPress и уменьшения нагрузки на CPU.

    • Из соображений безопасности, вы должны отключить доступ к Memcached отовсюду, исключая WordPress.
      • В данном примере Plesk развернут в Google Cloud, поэтому я нахожусь под защитой брандмауэра облачной платформы.

Шаги:

  1. Проверьте настройки вашего брандмауэра, вы должны блокировать внешние подключения к memcached;
  2. Найдите и установите контейнер с Memcached;
  3. Включите автозапуск и настройте привязку порта;
  4. Запустите контейнер;
  5. Проверьте, что всё работает.

Проверьте настройки вашего брандмауэра, вы должны блокировать внешние подключения к memcached (индивидуально)

Найдите и установите контейнер с Memcached
Найдите и установите контейнер с Memcached

Включите автозапуск и настройте привязку порта
Включите автозапуск и настройте привязку порта

Запустите контейнер
Запустите контейнер

Проверьте, что всё работает
Проверьте, что всё работает

Организация


Задача, которая может быть актуальна для небольших организаций: вы хотите иметь собственный ресурс для обмена файлами на базе Nextcloud. Эту задачу тоже можно легко решить.

Собственный Nextcloud в Plesk c Docker?



Шаги:

  1. Найдите и установите контейнер с Nextcloud;

    • Обратите внимание, что volume mapping оставлен не настроенным; это сделано сознательно, т.к. внутри Dockerfile для Nextcloud используется unnamed docker volume.
  2. Дождитесь, когда он запустится;
  3. Настройте правила proxy для Docker в «Websites & Domains»;
  4. Откройте web-интерфейс Nextcloud и установите имя и пароль для администратора;
  5. Готово. Вы можете использовать Nextcloud.

Найдите и установите контейнер с Nextcloud
Найдите и установите контейнер с Nextcloud

Дождитесь, когда он запустится
Дождитесь, когда он запустится

Настройте правила proxy для Docker в «Websites & Domains»
Настройте правила proxy для Docker в Websites & Domains

Откройте web-интерфейс Nextcloud, установите имя и пароль для администратора
Откройте web-интерфейс Nextcloud и установите имя и пароль для администратора

Готово. Вы можете использовать Nextcloud
Готово. Вы можете использовать Nextcloud

Go-разработчик


В настоящее время у Plesk нет расширений, позволяющих работать с Go, но вы можете написать приложение на Go и запустить его под Plesk в Docker-контейнере. Я не умею писать на Go, поэтому для наглядности я возьму готовый продукт написанный на Go и покажу, как запустить собственный git-сервис в Plesk.

Найдите контейнер с Gogs
Найдите контейнер с Gogs

Настройте контейнер с Gogs
Настройте контейнер с Gogs

Запустите контейнер с Gogs
Запустите контейнер с Gogs

Укажите начальные настройки для самого Gogs
Укажите начальные настройки для самого Gogs

Готово. Собственный git-сервис запущен и работает
Готово. Собственный git-сервис запущен и работает

Создадим первый репозиторий. Назовем его… HelloWorld
Создайте первый репозиторий. Назовите его... HelloWorld

Тестирование новых версий Plesk!


Давайте установим Plesk как Docker-контейнер в Plesk с расширением Docker! Сразу отвечу на вопрос «Зачем?»:

  • Можно тестировать собственные планируемые изменения в изолированном окружении независимо от боевой версии сайта и только затем применять их к публичной версии сайта.
  • Можно развернуть Plesk Preview, посмотреть новый функционал, при необходимости заранее проверить, что веб-сайты готовы к обновлению в будущем.

Найдите контейнер с Plesk
Найдите контейнер с Plesk

Настройте контейнер с Plesk
Настройте контейнер с Plesk

Запустите контейнер с Plesk. Готово. Можно проверять
Запустите контейнер с Plesk. Готово. Можно проверять

Заключение


Вместо заключения предлагаю обсудить в комментариях, какие общедоступные контейнеры с Docker Hub вы регулярно используете в повседневной работе, либо наоборот, почему вы отказались от использования публичных контейнеров в своих задачах.
Plesk 56,85
Plesk – панель управления хостингом
Поделиться публикацией
Похожие публикации

Вакансии компании Plesk

Комментарии 4
  • 0

    "Найдите и установите контейнер. Запустите его".
    Хотя, видимо, я придираюсь. Если ты хостер, то наверное так и надо.
    Да, а машинки у клиентов виртуальные же при этом?

    • 0
      Каждый сайт представляет собой отдельный Virtual Host и не является индивидуальной виртуальной машиной (VPS/VDS) клиента. Клиент может установить Plesk на свой VPS и единолично использовать возможности панели управления.
      • 0
        Спасибо за статью! У меня вопрос по контейнеру «php» из официального репозитория (https://hub.docker.com/_/php/). Мне нужны версии php, которых нет в списке доступных в панели Plesk, но есть в Docker (контейнер php).

        Есть ли возможность добавить версии php из Docker в список обработчиков php Plesk, чтобы у клиентов появилась возможность использовать их в своих подписках? Если есть, то как это сделать или где об этом почитать?

        • 0
          К сожалению, интегрировать контейнер php в Plesk на уровне подписок не получится. Утилита php_handler в качестве аргументов использует пути к файлам внутри файловой системы, также внутри Docker-контейнера должен быть доступ к клиентским файлам php.

          Но если надо решить проблему с одним конкретным проектом, то см. вариант с Nextcloud: можно создать контейнер php требуемой версии, с помощью volume mapping обеспечить доступ к php-файлам, с помощью Proxy Rules направить запросы внутрь контейнера.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое