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

в 3:00, , рубрики: devops, docker, Gogs, mariadb, memcached, mssql, mysql, nextcloud, Plesk, postgresql, Блог компании Plesk, виртуализация, системное администрирование

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 вы регулярно используются в повседневной работе, либо наоборот, почему вы отказались от использования публичных контейнеров в своих задачах.

Автор: Alexander Yamshanov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js