Разворачивание сервиса PHP в D2C.io

Это руководство поможет вам развернуть сервис PHP в Docker контейнере. Данное руководство может быть полезно как начинающим, так и продвинутым разработчикам.

Denis Zaripov
Product manager

Почему Docker?

Докер — это открытая платформа для разработки, доставки и эксплуатации приложений. Docker разработан для более быстрого выкладывания ваших приложений. С помощью docker вы можете отделить ваше приложение от вашей инфраструктуры и обращаться с инфраструктурой как управляемым приложением. Docker помогает выкладывать ваш код быстрее, быстрее тестировать, быстрее выкладывать приложения и уменьшить время между написанием кода и запуска кода. Docker делает это с помощью легковесной платформы контейнерной виртуализации, используя процессы и утилиты, которые помогают управлять и выкладывать ваши приложения.

В своем ядре docker позволяет запускать практически любое приложение, безопасно изолированное в контейнере. Безопасная изоляция позволяет вам запускать на одном хосте много контейнеров одновременно. Легковесная природа контейнера, который запускается без дополнительной нагрузки гипервизора, позволяет вам добиваться больше от вашего железа.

Ознакомиться с технологией и преимуществами можно в оригинальной статье Docker, либо с переводом на русский язык вступительной статьи документации.

Подготовка

Будет проще начать, если у вас уже есть подключенный сервер. 

Вы можете начать с предоставляемыем бесплатно Демо сервером, но он создается только на час, после чего удаляется вместе с сервисами. Если вам требуется больше времени, подключите облачного провайдера или собственный сервер к вашему аккаунту.

Создание сервиса PHP

Для начала, потребуется открыть или создать любой проект и нажать «+Создать сервис». Вы увидите список нативно поддерживаемых сервисов, которые можно развернуть с помощью D2C.

Как вы могли заметить в D2C два варианта сервиса PHP: PHP-FPM и Apache-PHP. Разница в том, что использование PHP-FPM возможно только при наличии NGINX на это же сервере. Apache-PHP может использоваться как отдельное (Stand-alone) приложение. Начнем с Apache+PHP и нажмем на соответствующую плитку.

Создание сервиса PHP. Настройки сервиса

Name

Имя должно начинаться с буквы и содержать не более 16 символов (допускаются латинские символы и цифры).

У каждого сервиса есть своё уникальное имя. Сервисы могут обращаться друг к другу по имени контейнера (например, gracie-1) или по alias-именам (например,  gracie). Имена сервисов также используются для создания публичных доменов таких как: [servicename]-[www].[accountID].[at].d2c.io при их обслуживании сервисами NGINX или HAProxy. Про эти сервисы у нас написаны отдельные статьи.

Version

Вы можете выбрать версию для вашего приложения из списка:

PHP расширения и PECL пакеты

Вы можете установить PHP расширения. Для этого в поле PHP extensions начните печатать название или просто выберите необходимые из списка. 

В каждой версии PHP имеется свой набор встроенных расширений. Для того, чтобы посмотреть какие расширения установлены в конкретной версии — создайте сервис PHP (например с готовым Hello World), откройте терминал контейнера и напишите команду php-m.

Для установки PECL пакетов напишите их названия, разделяя их запятыми:

Некоторые PECL пакеты требуют установки дополанительных библиотек для сборки. Их требуется устанавливать вручную в поле Global dependencies. Например, для установки mcrypt pecl пакета требуется установить пакет libmcrypt-dev через apt-get (пакетный менеджер debian).

Preinstall

Если вашему приложению требуется yarn, bower, webpack, gulp или grunt вы можете установить их, отметив нужные вам чекбоксы.

Global dependencies

В этом поле вы можете указать комманды для установки глобальных зависимостей и модификации Docker образа вашего сервиса. Для модификации исходного кода используйте локальные зависимости (Local dependencies)

Примеры: pip installbundle installapt-get installnpm install -g

Создание сервиса PHP. Исходный код

Вы можете выбрать способ доставки вашего исходного кода приложения: Git, Скачивание с внешнего ресурса (Download) или загрузка архива с вашего устройства (Upload).

Git

Git является рекомендуемым вариантом. Если вы используете приватный репозиторий, вы должны добавить SSH ключ в ваш аккаунт (инструкции к GitHubBitBucketGitLab). Кроме SSH ключей можно также использовать Логин/Пароль, но это нерекомендуемый способ.

Download

Альтернативный метод — скачивание исходного кода с внешнего ресурса.

Протоколы: httphttpsftp (для закрытых ftp требуется указать логин/пароль).

Форматы файлов: .tar.bz2.tar.gz.tar.zip

Пример: Example: https://wordpress.org/latest.tar.gz

Upload

Можно загрузить исходный код с вашего устройства.

Форматы файлов: .tar.bz2.tar.gz.tar.zip

Максимальный размер: 50MB

Создание сервиса PHP. Порты

Это важная часть создания сервиса. В этом заключается отличие от сервиса PHP-FPM, у которого нет этого блока поскольку он не умеет обслуживать сам себя. Читайте в следующей статье о том, как развернуть NGINX для обслуживания сервисов приложений.

По умолчанию, контейнеры сервисов запускаются внутри приватной сети и получают динамически заданный локальный IP адрес. Сервисы могут общаться друг с другом по сервисному имени. Не важно на каком сервере сервис запущен – все взаимосвязи внутри приватной сети прозрачны для всех сервисов.

Доступ из Интернета (Access from the Internet) по умолчанию отключен (кроме edge сервисов). Вы можете включить доступ из интернета во время создания или редактирования сервиса. Например, если вы развернули сервис на 3000 порту — он будет доступен по адресу ip_адрес_сервера:8080

Создание сервиса PHP. Настройки приложения

Local dependencies and code’s preparation

Команды для установки локальных зависимостей и подготовке кода к работе.

Примеры: npm installcomposer installbower install, и т.д. или для подготовки: gulp buildgrunt build, и т.д.

Initial commands

Команды, которые выполняются только один раз после первого разворачивания сервиса. Чаще всего используется для наполнения или миграции базы данных, установки плагинов.

Environment variables

Переменные окружения для вашего приложения. Могут редактироваться после создания сервиса.

Создание сервиса PHP. Дополнительные настройки. Постоянное хранилище

Нажмите на кнопку «Показать дополнительные настройки«.

Первый блок в этом разделе — Постоянное хранилище (Persistent data volumes).

D2C разделяет приложение от данных приложения. Docker volumes используются для хранения постоянных данных. Данные хранятся локально на серверах. Данные, которые генерируются приложением должны быть добавлены в Постоянное хранилище. Все изменения вне директорий постоянного хранилища сбрасываются после рестарта/пересборки/редеплое контайнера/сервиса (Docker восстанавливает оригинальное состояние контейнера после этих действий).

Мы рекомендуем хранить пользовательские данные (user generated content) в таких облачных хранилищах как Amazon S3 или CDN. Иногда появляется необходимость поддержки старых технологий, когда данные хранятся на серверах. Для таких случаях в D2C предусмотрена синхронизация Постоянного хранилища (Volumes) между всеми контейнерами приложения. Для того чтобы включить синхронизацию необходимо отметить галочкой директории, которые нужно синхронизировать.

Создание сервиса PHP. Дополнительные настройки. Конфиги

У некоторых сервисов есть свои стандартные конфиг файлы. Их можно изменять, нажав на кнопку «Edit». Всегда можно вернуться к стандартному содержимому, нажав на кнопку «Generate new config«

Вы можете также добавлять дополнительные конфиг файлы. Эти файлы не изменяются после рестарта/пересборки/редеплое ваших приложений. 

Нажмите «+Добавить пользовательский конфиг» и укажите полный путь к файлу.

После этого, заполните его.

Кнопка «Сгенерировать новый конфиг«, в этом случае, удалит всё содержимое.

Создание сервиса PHP. Выбор серверов

Вы можете выбрать один или несколько серверов, на которых будут развернуты одинаковые контейнеры. Необязательно выбирать несколько серверов с самого начала — масштабировать сервисы после разворачивания. Кроме этого, на этом шаге вы можете создавать сервера и выбирать те, которые ещё не в статусе «Онлайн». Контенейнеры будут развернуты после того, как сервера будут готовы.

После успешного разворачивания проект должен выглядеть следующим образом:

Что дальше?

В следующей статье мы поговорим о:

  • Создании edge сервиса для сервисов приложений и добавлении вашего домена с бесплатным TLS сертификатом от Let’s Encrypt.for application
  • Масштабировании, балансировке, обновлении исходников, проверке логов и метрик контейнеров