Composer — штука, которая спасает тебя от ручного скачивания библиотек, версий и кучи zip-архивов с непонятных сайтов. В PHP-мире он — как npm для Node или pip для Python. Если ты до сих пор делаешь git clone и require_once для каждой либы — ставим Composer.

Шаг 0. Подготовка

Сначала обновим пакеты и накинем нужные зависимости:

sudo apt update
sudo apt install wget php-cli php-zip unzip

Без php-cli Composer будет просто смотреть на тебя и молчать.

Шаг 1. Скачиваем установщик

wget -O composer-setup.php https://getcomposer.org/installer

Получишь файл composer-setup.php в текущей папке.

Шаг 2. Ставим глобально

Чтобы composer работал как обычная команда:

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

Теперь можно просто писать:

composer

и он отзовётся.

Шаг 3. Локальная установка (по проекту)

Если хочешь Composer только для конкретного проекта:

sudo php composer-setup.php --install-dir=/path/to/project

В проекте появится composer.phar, и команды будут такие:

php composer.phar ...

Да, чуть длиннее, но зато изолировано.

Шаг 4. Обновление Composer

Когда он устареет (а это случится быстрее, чем ты подумаешь):

sudo composer self-update

Быстрый пример работы

Создаём проект:

mkdir ~/my-first-composer-project
cd ~/my-first-composer-project

Ставим пакет Carbon:

composer require nesbot/carbon

Composer создаст composer.json, composer.lock и папку vendor.

  • vendor — библиотеки.
  • composer.json — список зависимостей.
  • composer.lock — зафиксированные версии.

Автозагрузка

Создай testing.php:

<?php

require __DIR__ . '/vendor/autoload.php';

use Carbon\Carbon;

printf("Now: %s", Carbon::now());

Запусти:

php testing.php

Получишь время. Красиво.

Обновление зависимостей проекта

composer update

Если в composer.json версия пакета позволяет, обновит до свежей.

В итоге

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