Ispmanager 6 lite, pro, host

PHP Composer

Для чего нужен Composer

Composer — это инструмент для управления зависимостями в PHP-проектах. Модуль Composer в ispmanager позволяет автоматически устанавливать и обновлять библиотеки и пакеты.

Например, вам нужна библиотека monolog/monolog для логирования. Вы можете указать название пакета и диапазон версий (или не указывать ничего), и модуль Composer:

  1. Проверит наличие нужных для monolog/monolog зависимостей и при необходимости скачает и установит их.
  2. Скачает и установит библиотеку monolog/monolog.
  3. Добавит информацию о зависимости в конфигурационный файл проекта.
  4. Сгенерирует файл autoload.php для автозагрузки классов из библиотеки в ваш проект.
  5. При необходимости обновит зависимость, когда выйдет новая версия.

Установка Composer

Composer устанавливается в корневые директории сайта, для которого он включен.

Версия Composer зависит от версии PHP для сайта:

  • последняя версия Composer требует версии PHP 7.2 и выше
  • для версий PHP 5.3—7.1 устанавливаются версии Composer 2.2.x

Чтобы установить Composer:

  1. Авторизуйтесь в панели под учетной записью с правами суперпользователя.
  2. Перейдите в раздел Конфигурация ПО Веб-сервер (WWW).
  3. Установите галочку PHP Composer и нажмите Сохранить.

Composer установится в фоновом режиме.

Чтобы Composer стал доступен для использования, включите его для пользователей и сайтов.

Включение Composer

Для пользователя

  1. Авторизуйтесь в панели под учетной записью уровня администратор или выше.
  2. Перейдите в раздел Пользователи
  3. Выберите пользователя и нажмите 
  4. В открывшейся форме перейдите в блок Доступ, установите галочку Может использовать PHP Composer и нажмите Сохранить.

Для сайта

Composer должен быть включен для пользователя, владеющего сайтом.
  1. Перейдите в раздел Сайты.
  2. Выберите сайт и нажмите 
  3. В открывшейся форме перейдите в блок Обработчик (PHP), установите галочку Использовать PHP Composer и нажмите Сохранить.

Управление зависимостями с помощью Composer

  1. Перейдите в раздел Сайты
  2. Выберите сайт и нажмите   PHP на панели инструментов.
  3. В открывшейся форме нажмите   PHP Composer на панели инструментов.

Откроется форма Установленные пакеты PHP. Все действия с зависимостями выполняются на этой форме.

Версии зависимостей

При установке зависимости вы можете указать как ее конкретную версию, так и диапазон допустимых версий. Например:

  • если указать версию 1.2.3, установится эта версия, и Composer не будет обновлять ее автоматически
  • если указать ^1.2.3, установится последняя совместимая версия, но не ниже 1.2.3 и не выше 2.0.0. При выходе новой версии Composer автоматически обновит пакет (если новая версия ниже 2.0.0)
Подробнее о версиях зависимостей — в официальной документации Composer.

Установка

Зависимости и информация о них хранятся в директории сайта. При установке: 

  • Зависимости устанавливаются в директорию /vendor
  • Информация о зависимостях вносится в конфигурационный файл composer.json
  • Информация о конкретной установленной версии вносится в composer.lock. Файл composer.lock нужен для фиксации версий зависимостей, чтобы у всех работающих над проектом устанавливались одни и те же версии зависимостей

Если устанавливаемое ПО зависит от другого ПО, оно также автоматически установится. 

Есть два способа установки зависимости: быстрая установка и установка из файла конфигурации.

Быстрая установка

Позволяет установить зависимость с минимальными настройками.

  1. Нажмите   на панели инструментов. 
  2. Укажите название пакета(-ов) и их версии (необязательно).
  3. Нажмите Установить

По умолчанию зависимости устанавливаются из репозитория Packagist. Если нужно установить зависимость из другого репозитория, установите ее из файла конфигурации composer.json и укажите в нем нужный репозиторий.

Из файла конфигурации

Позволяет установить зависимость с расширенными настройками, из нестандартного репозитория либо используя собственный файл конфигурации .json.

  1. Нажмите Файл конфигурации. Откроется конфигурационный файл composer.json.
    Подробнее

    Файл composer.json является основным файлом настройки Composer и содержит настройки зависимостей: их названия, версии, репозитории для установки и т. д.:   

    Пример composer.json
    {
        "require": {
                "monolog/monolog": ">=1.0.2 <2.1.2"
        },
        "description": "This example",
        "keywords": ["testing", "example"],
        "type": "project",
        "version": "1.0.0",
        "homepage": "https://example.com",
        "readme": "readme.md",
        "license": "MIT",
        "authors": [{
                "name": "User",
                "email": "user@example.com",
                "homepage": "https://www.example.com",
                "role": "Developer"
        }],
        "support": {
                "email": "support@example.org"
        }
    }
    Пояснение
    • require — название и версия библиотек для установки — обязательное поле
    • description — описание проекта
    • keywords — ключевые слова для поиска проекта в репозитории
    • type — тип: library, project, metapackage или composer-plugin
    • version — версия проекта
    • homepage — домашняя страница проекта
    • readme — путь к файлу readme
    • license — тип лицензии проекта
    • authors — информация об авторах проекта:
      • name — имя автора
      • email — электронный адрес автора
      • homepage — домашняя страница автора
      • role — роль в проекте
    • support — электронный адрес технической поддержки
  2. Скопируйте содержимое вашего файла в файл конфигурации. 
  3. Нажмите Сохранить и закрыть.

При сохранении автоматически проверяется правильность формата JSON и эмулируется установка пакетов с помощью команды:

/bin/sh -c cd\ /var/www/cm/data/www/example.com\;./composer.phar\ install\ --dry-run

После сохранения указанные зависимости автоматически установятся и появятся в списке Установленные пакеты PHP.

Обновление

Чтобы обновить установленные версии зависимостей, нажмите Обновить. Будут установлены последние доступные версии зависимостей, удовлетворяющие условиям в composer.json, и обновится composer.lock.

Shell-клиент

Shell-клиент позволяет выполнять дополнительные команды Composer. Терминал запускается от имени владельца сайта. При открытии происходит следующее:

  • переход в домашнюю директорию сайта
  • добавление в переменную окружения PATH пути к исполняемому файлу той версии php, которая выбрана для сайта

Команды в shell должны содержать путь к исполняемому файлу composer.phar:

./composer.phar КОМАНДА

Удаление

Чтобы удалить зависимость, выберите ее в списке и нажмите  .

Если удаляемая зависимость необходима для других зависимостей, возникнет ошибка.

Пример

Допустим, у вас установлены:

  • laravel/framework (основной фреймворк)
  • symfony/http-foundation (это зависимость Laravel)

Если попытаться удалить symfony/http-foundation, возникнет ошибка.

Нужно либо:

  • удалить laravel/framework (тогда symfony/http-foundation тоже удалится, если больше никому не нужна)
  • оставить всё как есть

Если для зависимости была установлена другая зависимость, удалены будут обе.

Пример

Допустим, у вас установлены:

  • intervention/image (библиотека для работы с изображениями)
  • guzzlehttp/guzzle (зависимость intervention/image для HTTP-запросов)

Если попытаться удалить intervention/image:

  1. Composer удалит intervention/image.
  2. Проверит, нужен ли еще guzzlehttp/guzzle другим пакетам.
  3. Если нет (guzzle был установлен только для intervention/image) → удалит и его.

Использование зависимостей в проекте

Чтобы использовать установленные зависимости в вашем проекте, пропишите в нем путь к файлу autoload.php в секции php:

require_once('vendor/autoload.php')
Пример использования зависимости Monolog
<?php
require_once('vendor/autoload.php');
use Monolog\Level;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('channel-name');
$logger->pushHandler(new StreamHandler('app.log', Logger::DEBUG));
$logger->info('This is log');
$logger->warning('This is log warning');
$logger->error('This is log error');
?>

Резервное копирование​

При выполнении резервного копирования сайта настройки Composer для сайта и установленные библиотеки сохраняются.

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

Логирование Composer

Работа с Composer записывается в журналы:

  • /usr/local/mgr5/var/phpcomposerctl.log — содержит вызовы команд и ошибки.
    Чтобы изменить уровень логирования, добавьте в конфигурационный файл /usr/local/mgr5/etc/debug.conf строку:
    phpcomposerctl.*        9
  • /usr/local/mgr5/var/ispmgr.log — содержит внутренние процессы панели, связанные с работой модуля.
    Изменить уровень логирования для модуля Composer в журнале панели можно в разделе Настройка логирования → Ispmanager - PHP (ispmgr.php).

Отключение Composer

После отключения Composer для сайта или его удаления в разделе Конфигурация ПО установленные зависимости сохраняются.

Защита служебных данных​ Composer

Во время работы Composer в домашней директории сайта создаются следующие служебные файлы и каталоги:

  • composer.phar — исполняемый файл Composer (работает только на консольной версии PHP)
  • composer.json — файл c описанием всех зависимостей для проекта
  • composer.lock — файл со списком установленных зависимостей и их версий
  • /vendor — директория, в которую устанавливаются зависимости
  • /.cache — директория, в которой хранится кэш загруженных библиотек
  • /.config — директория, в которой хранятся настройки конфигурации и публичные ключи
  • /.local — директория, в которой могут храниться дополнительные данные Composer

Чтобы служебные файлы и каталоги не были доступны при обращении через браузер, в конфигурационные файлы веб-серверов для сайтов добавляются специальные вложения. Если установлены Nginx + Apache, вложения добавляются для обоих.

После отключения Composer, если для сайта были установлены зависимости, вложения в конфигурационных файлах сохраняются. Это нужно, чтобы служебные файлы и каталоги не стали доступны в браузере после отключения. Если директория /vendor и файл composer.json были удалены из директории сайта вручную, вложения удалятся.

Примеры вложений:

Просмотр конфигурационных файлов phpcomposer.conf доступен только учетной записи с правами суперпользователя.
Nginx
/etc/nginx/modules-includes/phpcomposer/phpcomposer.conf
location ~* ^(/composer\.(json|lock|phar)$)|(/(vendor|.config|.cache|.local)/) {
    deny all;
}
Apache
/etc/apache2/modules-includes/phpcomposer/phpcomposer.conf (для Debian-подобных ОС) или /etc/httpd/modules-includes/phpcomposer/phpcomposer.conf (для RedHat-подобных ОС)
<LocationMatch "^(/composer\.(json|lock|phar)$)|(/(vendor|.config|.cache|.local)/)">
	<IfModule mod_authz_core.c>
		# Apache 2.4
		<RequireAny>
		Require all denied
		</RequireAny>
	</IfModule>
	<IfModule !mod_authz_core.c>
		# Apache 2.2
		Order Deny,Allow
		Deny from All
	</IfModule>
</LocationMatch>
OpenLiteSpeed​
/usr/local/lsws/conf/modules-includes/phpcomposer/phpcomposer.conf
context exp: ^(/composer\.(json|lock|phar)$)|(/(vendor|.config|.cache|.local)/) {
  allowBrowse 0
}