Как установить Composer и использовать его на сервере
Установка и использование Composer на сервере


Введение.

Composer - это популярный инструмент управления зависимостями для PHP, созданный в первую очередь для облегчения установки и обновления зависимостей проекта. Composer работает, проверяя, какие пакеты зависят в конкретном проекте, а затем устанавливает их с использованием соответствующих версий в соответствии с требованиями проекта. Composer также часто используется для загрузки новых проектов, созданных на основе популярных PHP-фреймворков, таких как Symfony и Laravel.

В этом руководстве описывается установка и использование Composer на сервере Debian.

Необходимые условия.

Чтобы воспользоваться этой инструкцией, необходимо настроить сервер Debian, включая пользователя без права root с правами sudo и включенный брандмауэр. Это можно сделать, следуя руководству по начальной настройке сервера Debian.

Шаг 1 - Установка зависимостей на сервере.

В дополнение к зависимостям, которые уже могут быть включены в системе Debian, Composer требует php-cli для выполнения PHP-скриптов в командной строке и unzip для извлечения заархивированных архивов.

Для начала следует обновить кэш менеджера пакетов:

sudo apt update

Затем установите зависимости. Для загрузки Composer потребуется curl, а для установки и запуска - php-cli. Пакет php-mbstring необходим для обеспечения функций библиотеки, которую в дальнейшем будет использоваться в данном руководстве. git используется Composer для загрузки зависимостей проекта, а unzip - для извлечения заархивированных пакетов. Все это можно установить с помощью следующей команды:

sudo apt install curl php-cli php-mbstring git unzip

Когда все зависимости установлены, теперь можно устанавливать Composer.

Шаг 2 - Загрузка и установка Composer на сервер.

Composer предоставляет программу установки, написанную на PHP. Необходимо загрузить его, убедиться, что он не поврежден, а затем использовать его для установки Composer.

Во-первых, убедитесь, что находитесь в своем домашнем каталоге:

cd ~

Затем загрузите программу установки с помощью curl:

curl -sS https://getcomposer.org/installer -o composer-setup.php

Затем проверьте, что программа установки соответствует хэшу SHA-384 для последней версии программы установки, найденному на странице Public Keys / Signatures программы Composer. Чтобы облегчить шаг проверки, можно использовать следующую команду, чтобы программно получить последний хэш со страницы Composer и сохранить его в переменной shell:

HASH=`curl -sS https://composer.github.io/installer.sig`

Чтобы вывести полученное значение, выполните команду:

echo $HASH

Должно быть выведено значение:

55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae

* Зависит от версии устанавливаемого Composer (Примечание переводчика.)

Теперь выполните следующий PHP-код, представленный на странице загрузки Composer, чтобы убедиться, что сценарий установки безопасен для запуска:

php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

На выходе должно быть получено следующее:

Installer verified

Если появилось сообщение Installer corrupt, необходимо снова загрузить скрипт установки и убедиться, что использован правильный хэш. Затем снова выполните команду для проверки программы установки. Как только программа установки будет проверена, можно продолжать.

Чтобы установить composer глобально, используйте следующую команду для загрузки и установки Composer в качестве команды с именем composer доступной из любого места в операционной системе в /usr/local/bin:

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

В результате выведется следующее сообщение:

All settings correct for using Composer
Downloading...

Composer (version 2.3.10) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

Проверьте свою установку, выполнив эту команду:

composer

На выходе будет показана версия и аргументы Composer, как показано ниже:

  ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.3.10 2022-07-13 15:48:23

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display help for the given command. When no command is given display help for the list command
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi|--no-ansi           Force (or disable --no-ansi) ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
      --no-scripts               Skips the execution of all scripts defined in composer.json file.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
      --no-cache                 Prevent use of the cache
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .

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

Примечание: Если вы предпочитаете иметь отдельные исполняемые файлы Composer для каждого проекта, размещенного на своём сервере, то можете установить его локально, для каждого проекта. Пользователи NPM знакомы с этим подходом. Этот метод также полезен, когда пользователь системы не имеет права устанавливать программное обеспечение в масштабах всей системы.

Для этого используйте команду php composer-setup.php. Это создаст файл composer.phar в текущем каталоге, который можно выполнить при помощи команды ./composer.phar command.

Теперь, когда Composer установлен, в следующей части статьи будет рассказано, как использовать Composer для управления зависимостями PHP.

Шаг 3 - Использование Composer в PHP-проекте.

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

Для того чтобы использовать Composer в своем проекте, необходимо иметь файл composer.json. Файл composer.json сообщает Composer о зависимостях, которые ему необходимо загрузить для этого проекта, а также о версиях каждого пакета, которые разрешено устанавливать. Это очень важно, чтобы сохранить согласованность проекта и избежать установки нестабильных версий, которые могут вызвать проблемы с обратной совместимостью.

Этот файл не нужно создавать вручную, поскольку это чревато ошибками и может привести к синтаксическим ошибкам. Composer автоматически создаёт файл composer.json, когда в проект добавляется зависимость с помощью команды composer require. Таким же образом можно добавлять дополнительные зависимости без необходимости вручную редактировать этот файл.

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

  1. Определение того, какая библиотека нужна приложению.
  2. Поиск подходящей библиотеки с открытым исходным кодом на Packagist.org, официальном репозитории пакетов для Composer.
  3. Выбор пакета, от которого должна быть зависимость.
  4. Выполнить composer require, чтобы включить зависимость в файл composer.json и установить пакет.

Это можно проверить с помощью демонстрационного приложения.

Цель этого приложения - преобразовать заданное предложение в удобную для URL строку, называемую slug. Slug обычно используется для преобразования заголовков страниц в пути URL, как, например, последняя часть URL этой статьи.

Начните с перехода в свой домашний каталог:

cd ~

Затем создайте каталог. Назовите его slugify:

mkdir slugify

После его создания перейдите в каталог:

cd slugify

Теперь пришло время поискать на Packagist.org пакет, который может помочь генерировать slug. Если выполнить поиск по термину slug на Packagist, можно получить результат, подобный следующему:

Включение скрипта автозагрузки Composer на сервере

Справа от каждого пакета в списке будет два числа. Число рядом со значком со стрелкой, направленной вниз, означает, сколько раз пакет был установлен, а число со значком звезды означает, сколько раз пакет был отмечен на GitHub. Результаты поиска можно также упорядочить на основе этих чисел. Вообще говоря, пакеты с большим количеством установок и большим количеством звезд, как правило, более стабильны, так как их использует большое количество людей. Также важно проверить описание пакета на релевантность, чтобы убедиться, что это то, что вам нужно.

Для данного примера нужен конвертер строк в слова. Из результатов поиска пакет cocur/slugify является хорошим вариантом, с разумным количеством установок и звезд.

Пакеты на Packagist имеют имя поставщика (vendor name) и имя пакета (package name). Каждый пакет имеет уникальный идентификатор (namespace) в том же формате, который GitHub использует для своих репозиториев, в виде vendor/package. Библиотека, которую планируется установить, использует пространство имен cocur/slugify. Пространство имен (namespace) необходимо для того, чтобы использовать пакет в своем проекте.

Теперь, когда известен пакет, который требуется установить, запустите composer require, чтобы включить его в качестве зависимости, а также создайте файл composer.json для проекта:

composer require cocur/slugify

По мере загрузки зависимостей Composer будет выдавать следующее:

Using version ^4.1 for cocur/slugify
./composer.json has been created
Running composer update cocur/slugify
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking cocur/slugify (v4.1.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Downloading cocur/slugify (v4.1.0)
  - Installing cocur/slugify (v4.1.0): Extracting archive
Generating autoload files

Как показывает этот вывод, Composer автоматически решает, какую версию пакета использовать. Если теперь проверить каталог вашего проекта, он будет содержать два новых файла: composer.json и composer.lock, а также каталог vendor:

ls -l
total 12
-rw-r--r-- 1 sammy sammy   59 Aug  2 22:19 composer.json
-rw-r--r-- 1 sammy sammy 3462 Aug  2 22:19 composer.lock
drwxr-xr-x 4 sammy sammy 4096 Aug  2 22:19 vendor

Файл composer.lock используется для хранения информации о версиях каждого установленного пакета. Он также обеспечивает использование тех же версий, если кто-то другой клонирует ваш проект и установит его зависимости. Каталог vendor - это место, где находятся зависимости проекта. Папку vendor не нужно регистрировать в системе контроля версий, достаточно включить в нее файлы composer.json и composer.lock.

В процессе установки проекта, который уже содержит файл composer.json, запустите composer install, чтобы загрузить зависимости проекта.

Далее проверьте ограничения по версиям. Если посмотреть содержимое файла composer.json, то получится примерно следующее:

cat composer.json
{
    "require": {
        "cocur/slugify": "^4.1"
    }
}

Наверняка в файле composer.json есть специальный символ ^ перед номером версии. Composer поддерживает несколько различных ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость и в то же время сохранить стабильность проекта. Оператор каретки ^, используемый автоматически генерируемым файлом composer.json, является рекомендуемым оператором для максимальной совместимости, следуя семантическому версионированию. В данном случае он определяет версию 4.1 как минимально совместимую и разрешает обновления до любой будущей версии ниже 5.0.

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

Ниже приведено несколько примеров для лучшего понимания того, как работают ограничения версий в Composer:

Примеры ограничений версий в Composer
Ограничение Значение Примеры допустимых версий
^1.0 >= 1.0 < 2.0 1.0, 1.2.3, 1.9.9
^1.1.0 >= 1.1.0 < 2.0 1.1.0, 1.5.6, 1.9.9
~1.0 >= 1.0 < 2.0.0     1.0, 1.4.1, 1.9.9
~1.0.0 >= 1.0.0 < 1.1 1.0.0, 1.0.4, 1.0.9
1.2.1 1.2.1 1.2.1
1.* >= 1.0 < 2.0 1.0.0, 1.4.5, 1.9.9
1.2.* >= 1.2 < 1.3 1.2.0, 1.2.3, 1.2.9

Для более детального ознакомления с ограничениями версий Composer ознакомьтесь с официальной документацией.

Дальше будет рассмотрено, как автоматически загружать зависимости с помощью Composer.

Шаг 4 - Включение скрипта автозагрузки на сервере.

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

Единственное, что необходимо сделать, это включить файл vendor/autoload.php в ваши PHP-скрипты перед внедрением любого класса. Этот файл автоматически генерируется Composer при добавлении первой зависимости.

Это можно проверить в своем приложении. Создайте файл test.php и откройте его в выбранном текстовом редакторе. В этом примере используется nano:

nano test.php

Добавьте следующий код в файл test.php, чтобы вызвать файл vendor/autoload.php, загрузить зависимость cocur/slugify и создать slug:

<?php
require __DIR__ . '/vendor/autoload.php'; 
use Cocur\Slugify\Slugify;

$slugify = new Slugify();

echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');

Сохраните файл и выйдите из редактора. Если вы используете nano, вы можете сделать это, нажав CTRL + X, затем Y и ENTER.

Теперь запустите скрипт:

php test.php

Это приведет к выходу следующего результата:

hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it

Зависимости требуют обновления при выходе новых версий, поэтому на последнем этапе будет рассказано, как это сделать.

Шаг 5 - Обновление зависимостей проекта на сервере.

Если необходимо обновить зависимости проекта до более новых версий, необходимо выполнить команду update:

composer update

Это позволяет проверить наличие более новых версий библиотек, которые были добавлены в проект в качестве требований. Если будет найдена более новая версия и она совместима с ограничением версии, определенным в файле composer.json, Composer заменит предыдущую установленную версию. Файл composer.lock будет обновлен, чтобы отразить эти изменения.

Можно также обновить одну или несколько конкретных библиотек, указав их следующим образом:

composer update vendor/package vendor2/package2

Обязательно коммитите изменения в файлах composer.json и composer.lock после обновления зависимостей, чтобы все, кто работает в проекте, имели доступ к тем же версиям пакетов.

Заключение.

Composer - это мощный инструмент, который должен быть у каждого PHP-разработчика. В этом руководстве вы установили Composer на Debian и использовали его в проекте. Теперь вы знаете, как устанавливать и обновлять зависимости.

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

Перевод с английского:
www.digitalocean.com

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню