PHP Composer
Для чего нужен Composer
Composer — это инструмент для управления зависимостями в PHP-проектах. Модуль Composer в ispmanager позволяет автоматически устанавливать и обновлять библиотеки и пакеты.
Например, вам нужна библиотека monolog/monolog для логирования. Вы можете указать название пакета и диапазон версий (или не указывать ничего), и модуль Composer:
- Проверит наличие нужных для monolog/monolog зависимостей и при необходимости скачает и установит их.
- Скачает и установит библиотеку monolog/monolog.
- Добавит информацию о зависимости в конфигурационный файл проекта.
- Сгенерирует файл
autoload.php
для автозагрузки классов из библиотеки в ваш проект. - При необходимости обновит зависимость, когда выйдет новая версия.
Установка Composer
Composer устанавливается в корневые директории сайта, для которого он включен.
Версия Composer зависит от версии PHP для сайта:
- последняя версия Composer требует версии PHP 7.2 и выше
- для версий PHP 5.3—7.1 устанавливаются версии Composer 2.2.x
Чтобы установить Composer:
- Авторизуйтесь в панели под учетной записью с правами суперпользователя.
- Перейдите в раздел Конфигурация ПО → Веб-сервер (WWW).
- Установите галочку PHP Composer и нажмите Сохранить.
Composer установится в фоновом режиме.
Чтобы Composer стал доступен для использования, включите его для пользователей и сайтов.
Включение Composer
Для пользователя
- Авторизуйтесь в панели под учетной записью уровня администратор или выше.
- Перейдите в раздел Пользователи.
- Выберите пользователя и нажмите
.
- В открывшейся форме перейдите в блок Доступ, установите галочку Может использовать PHP Composer и нажмите Сохранить.
Для сайта
- Перейдите в раздел Сайты.
- Выберите сайт и нажмите
.
- В открывшейся форме перейдите в блок Обработчик (PHP), установите галочку Использовать PHP Composer и нажмите Сохранить.
Управление зависимостями с помощью Composer
- Перейдите в раздел Сайты.
- Выберите сайт и нажмите
PHP на панели инструментов.
- В открывшейся форме нажмите
PHP Composer на панели инструментов.
Откроется форма Установленные пакеты PHP. Все действия с зависимостями выполняются на этой форме.
Версии зависимостей
При установке зависимости вы можете указать как ее конкретную версию, так и диапазон допустимых версий. Например:
- если указать версию 1.2.3, установится эта версия, и Composer не будет обновлять ее автоматически
- если указать ^1.2.3, установится последняя совместимая версия, но не ниже 1.2.3 и не выше 2.0.0. При выходе новой версии Composer автоматически обновит пакет (если новая версия ниже 2.0.0)
Установка
Зависимости и информация о них хранятся в директории сайта. При установке:
- Зависимости устанавливаются в директорию
/vendor
- Информация о зависимостях вносится в конфигурационный файл
composer.json
- Информация о конкретной установленной версии вносится в
composer.lock
. Файлcomposer.lock
нужен для фиксации версий зависимостей, чтобы у всех работающих над проектом устанавливались одни и те же версии зависимостей
Если устанавливаемое ПО зависит от другого ПО, оно также автоматически установится.
Есть два способа установки зависимости: быстрая установка и установка из файла конфигурации.
Быстрая установка
Позволяет установить зависимость с минимальными настройками.
- Нажмите
на панели инструментов.
- Укажите название пакета(-ов) и их версии (необязательно).
- Нажмите Установить.
По умолчанию зависимости устанавливаются из репозитория Packagist. Если нужно установить зависимость из другого репозитория, установите ее из файла конфигурации composer.json и укажите в нем нужный репозиторий.
Из файла конфигурации
Позволяет установить зависимость с расширенными настройками, из нестандартного репозитория либо используя собственный файл конфигурации .json
.
- Нажмите Файл конфигурации. Откроется конфигурационный файл
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 — электронный адрес технической поддержки
- Скопируйте содержимое вашего файла в файл конфигурации.
- Нажмите Сохранить и закрыть.
При сохранении автоматически проверяется правильность формата 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:
- Composer удалит intervention/image.
- Проверит, нужен ли еще guzzlehttp/guzzle другим пакетам.
- Если нет (guzzle был установлен только для intervention/image) → удалит и его.
Использование зависимостей в проекте
Чтобы использовать установленные зависимости в вашем проекте, пропишите в нем путь к файлу autoload.php
в секции php:
require_once('vendor/autoload.php')
<?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
доступен только учетной записи с правами суперпользователя.location ~* ^(/composer\.(json|lock|phar)$)|(/(vendor|.config|.cache|.local)/) {
deny all;
}
<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>
context exp: ^(/composer\.(json|lock|phar)$)|(/(vendor|.config|.cache|.local)/) {
allowBrowse 0
}