Как установить зависимости при развертывании PHP-приложения?

«Как установить зависимости при развертывании PHP-приложения?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стандартный инструмент для управления зависимостями в PHP — Composer. Процесс установки зависит от среды (разработка, staging, production).

Типичный процесс развертывания:

  1. Подготовка: Убедиться, что на сервере установлены PHP и Composer нужных версий, совместимых с composer.json.

    php --version
    composer --version
  2. Установка зависимостей: В корне проекта (где лежит composer.json и composer.lock) выполнить:

    composer install --no-dev --optimize-autoloader --no-interaction --no-progress
    • --no-dev: Не устанавливает зависимости из секции require-dev (тестовые фреймворки, инструменты анализа кода). Обязательно для production.
    • --optimize-autoloader: Генерирует оптимизированный автозагрузчик классов (преобразует PSR-4/PSR-0 в classmap), что ускоряет загрузку в production.
    • --no-interaction --no-progress: Флаги для CI/CD пайплайнов, убирают интерактивность и прогресс-бар.
  3. Важность composer.lock: Файл composer.lock фиксирует точные версии всех установленных пакетов. Его обязательно нужно коммитить в репозиторий и использовать при развертывании, чтобы гарантировать идентичные версии зависимостей на всех окружениях.

Интеграция с Docker: В Dockerfile установку зависимостей лучше выносить в отдельный слой для кэширования.

FROM php:8.2-fpm-alpine

WORKDIR /var/www/html

# Копируем файлы зависимостей отдельно для кэширования слоя
COPY composer.json composer.lock ./ 

# Устанавливаем зависимости (без dev)
RUN composer install --no-dev --optimize-autoloader --no-interaction --no-progress

# Копируем остальной код приложения
COPY . .

Для сред разработки и CI:

# Установить ВСЕ зависимости (включая dev)
composer install

# Обновить зависимости до последних версий, разрешенных composer.json (осторожно!)
composer update

# Добавить новую зависимость
composer require guzzlehttp/guzzle

Этот подход обеспечивает предсказуемость и скорость развертывания.