Докеризация PHP-приложения в единый Docker-образ Alpine+PHP+NGINX+logrotate

Идея

У меня есть несколько ультралегковесных PHP-скриптов, предоставляющих простой HTTP-API для тех или иных целей. Например, один из таких скриптов выполняет функции управления сетью (реализует протоколы SNMP, Telnet и т.д.) с доступом по HTTP-API. Но чтобы клиент мог эксплуатировать такой простой скрипт, ему необходимо установить и настроить WEB-сервер, РНР со всеми необходимыми расширениями, системные зависимости, такие как iproute2 и прочие и для многих клиентов это оказалось нетривиальной задачей. Так родилась идея поместить в один Docker-образ и скрипт и всё окружение, вместе со всеми необходимыми настройками. По идее, пользователь должен выполнить простую команду docker run ... чтобы всё это магическим образом сразу же заработало без какой-либо необходимости что-то устанавливать и настраивать самостоятельно.

Цель

  1. Нам нужен крайне легковесный Docker-образ, включающий в себя сам PHP-скрипт, php-fpm, nginx и остальное окружение, необходимое для работы.
  2. Доступ по HTTP должен быть только к единственному файлу index.php.
  3. Службы внутри контейнера должны работать от имени непривилегированного пользователя nobody, чтобы сделать контейнер чуточку безопасней.
  4. Так как клиенты разбросаны по всему миру, нужно чтобы часовой пояс клиента был корректным внутри контейнера, в том числе и для PHP.
  5. Все сообщения системных процессов (nginx, php и т.д.) должны выводиться на стандартный вывод stdout и stderr, как это требуется для процессов, работающих в контейнерах. Но выводить туда же логи самого PHP-скрипта может быть не совсем целесообразно, хотя и вполне допустимо. Всё же для логов PHP-скрипта условимся использовать отдельный лог-файл, который к тому же должен автоматически ротироваться без участия пользователя.

Вроде бы всё. Поехали.

Читать далее Докеризация PHP-приложения в единый Docker-образ Alpine+PHP+NGINX+logrotate

Vagrant — единое окружение для разработки

Преамбула

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

В современном мире WEB-разработки, разработчики уже давно перестали устанавливать окружение для разработки: PHP, WEB-сервер, СУБД и т.д. на свой локальный компьютер, на котором производят разработку.

Во-первых, установка и настройка занимает драгоценное время и силы.

Во-вторых, если разработчик работает на нескольких компьютерах (компьютер в офисе, дома, ноутбук), то достаточно проблематично настроить идентичное окружение везде и синхронизировать его настройку между всеми своими компьютерами. Эта проблема называется проблемой идентичности состояния, когда предполагается, что состав, версии и конфигурация всего ПО должна быть максимально идентичной.

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

В четвертых, состояние окружения вашего рабочего компьютера скорее всего не совпадает и не может совпадать с состоянием окружения вашего боевого (продакшн) сервера. Ведь у вас же Windows со всеми его причудами в конфигурировании, а на боевом сервере что-то однозначно другое.

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

Избежать этого хаоса вам поможет виртуализация окружения разработки. Вам нужна виртуальная машина, которая бы разворачивалась по заданному вами сценарию, чтобы ее можно было развернуть одним кликом на любом компьютере под любой операционной системой. Пока вы будете пить кофе, ваша виртуальная машина будет готова. Также вам нужны какие-то средства для быстрого и простого управления такой виртуальной машиной (запуск, остановка, реконфигурация).

Также вам необходимо, чтобы ваш рабочий каталог с проектом отражался на каталог внутри виртуальной машины. Например, чтобы каталог локальной машины D:\myProjects, где хранятся ваши проекты, соответствовал каталогу виртуальной машины /var/myProjects или подобному.

Еще хотелось бы иметь возможность полноценно выполнять отладку с использованием PHP-Xdebug, причем приложение должно выполняться в виртуальной среде, на виртуальной машине, а управлять им вы могли с локальной. Уже нравится? Идем дальше!

Читать далее Vagrant — единое окружение для разработки

Установка Nginx 1.13, PHP 7, MySQL 5.7, MariaDB 10.1, PostgreSQL 11 в Debian и Ubuntu

Набор инструкций для установки последних версий Nginx, PHP, MySQL, MariaDB на компьютер (сервер) под управлением операционных систем Debian или Ubuntu. Инструкции описывают простое добавление альтернативных репозиториев в систему и установку приложений из них.

Разделы данной инструкции не пересекаются между собой. Это всего лишь набор не связанных инструкций. Всё, что их связывает, это дополнение стандартного репозитория альтернативными с последними версиями. Всё это одновременно устанавливать не нужно! Инсталлируйте только то, что Вам необходимо.

Описаны следующие приложения (версии указаны на момент написания статьи):

  1. Nginx (1.15)
  2. MySQL (5.7, 8.0)
  3. MariaDB (10.1)
  4. PostgreSQL (11)
  5. PHP (7.1, 7.2, 7.3)
  6. MongoDB (3.4)
  7. Elasticsearch (5.4)


Внимание! Здесь не описан атомарный процесс установки и настройки web-сервера! Не задавайте, пожалуйста, подобных вопросов в комментариях.

Читать далее Установка Nginx 1.13, PHP 7, MySQL 5.7, MariaDB 10.1, PostgreSQL 11 в Debian и Ubuntu