Как можно запустить PHP-FPM в Docker после установки с помощью make install?

Как настроить php5.4-fpm в docker контейнере так, чтобы избежать проблем с перезагрузкой контейнера и убедиться, что конфигурационные файлы fpm настроены корректно для работы?
  • 22 января 2024 г. 15:30
Ответы на вопрос 2
Чтобы запустить PHP-FPM в Docker после компиляции и установки через `make install`, вам нужно создать соответствующий Dockerfile, который будет учитывать все этапы: установку зависимостей, компиляцию, настройку и старт сервиса.

Ниже представлен пример того, как может выглядеть Dockerfile для установки и запуска PHP 5.4-FPM:

```Dockerfile
# Используем образ на базе дистрибутива, который предпочтительнее
FROM debian:bullseye

# Устанавливаем необходимые зависимости для компиляции PHP
RUN apt-get update && apt-get install -y \
    autoconf \
    build-essential \
    libxml2-dev \
    libcurl4-openssl-dev \
    libjpeg-dev \
    libpng-dev \
    libxpm-dev \
    libfreetype6-dev \
    libmysqlclient-dev \
    libpq-dev \
    libicu-dev \
    libmcrypt-dev \
    libreadline-dev \
    libfpm-helper \
    wget

# Скачиваем исходный код PHP 5.4
RUN wget https://www.php.net/distributions/php-5.4.45.tar.gz && \
    tar -xf php-5.4.45.tar.gz && \
    rm php-5.4.45.tar.gz

# Компилируем PHP с необходимыми опциями
WORKDIR /php-5.4.45
RUN ./configure \
    --enable-fpm \
    --with-fpm-user=www-data \
    --with-fpm-group=www-data \
    ... # Дополнительные опции конфигурации по необходимости
RUN make && make install

# Копируем конфигурационные файлы (можно подготовить на основе шаблонов из скачанных исходников)
COPY ./php-fpm.conf /usr/local/etc/
COPY ./www.conf /usr/local/etc/php-fpm.d/

# Копируем скрипт запуска сервиса
COPY ./start-php-fpm.sh /usr/local/bin/start-php-fpm
RUN chmod +x /usr/local/bin/start-php-fpm

# Открываем порт для FPM
EXPOSE 9000

# Запускаем PHP-FPM при старте контейнера
CMD ["start-php-fpm"]
```

`start-php-fpm.sh` скрипт будет запускать PHP-FPM и должен выглядеть примерно так:

```bash
#!/bin/bash
# Останавливаем PHP-FPM, если он уже запущен (на случай перезапуска контейнера)
kill -QUIT $(pidof php-fpm) 2>/dev/null
# Запускаем PHP-FPM
/usr/local/sbin/php-fpm --nodaemonize --fpm-config /usr/local/etc/php-fpm.conf
```

Не забудьте создать файлы конфигурации `php-fpm.conf` и `www.conf` на базе дистрибутивных и отредактировать их под вашу ситуацию.

Далее, вы можете построить контейнер командой `docker build` и запустить его с использованием `docker run` команд.

Этот пример не идеален, и должен быть адаптирован под конкретные условия вашего проекта. Важно также отметить, что работа с устаревшими версиями PHP может привести к проблемам безопасности и совместимости.
А просто сделать docker run на основе https://hub.docker.com/_/php/tags?page=1&name=5.4 не подходит? 
Или написать docker-compose файл и указать image: php:5.4-fpm ?
Похожие вопросы