Понедельник, 05.08.2024 21:03

Сборка из исходного кода. Собираем PHP 8.3 из исходного кода в Debian 12 Bookworm.  Часть 1.

Сборка из исходного кода. Собираем PHP 8.3 из исходного кода в Debian 12 Bookworm. Часть 1.

В предыдущей статье – мы рассмотрели установку PHP 8.3 после блокировки репозитория deb.sury.org

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

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

Сегодня мы рассмотрим сборку 8.3.10 из исходного кода. В будущих статьях на базе собранного проекта мы соберем .deb-пакет и создадим локальный apt-репозиторий.

Сборка из исходного кода

Установка требуемых пакетов

Обновим apt

su
apt update && apt upgrade

Установим требуемые пакеты:

su
apt install sudo

Добавим пользователя в группу sudo, в моем случае пользователь - user

sudo usermod -aG sudo user

Выйдем из сеанса

exit

Перезайдем, теперь если мы введем:

sudo mc

То успешно запустим mc от пользователя root!

Обновим пакеты

sudo apt install --yes build-essential curl libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline8 libreadline-dev libzip-dev libzip4 nginx openssl pkg-config zlib1g-dev libsqlite3-dev sqlite3 libonig-dev libpq-dev git autoconf bison re2c libpng-dev libldap2-dev libfreetype6-dev libfreetype6 libjpeg-dev unzip mc sudo

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

Загрузим исходный код

cd ~
wget https://github.com/php/php-src/archive/refs/tags/php-8.3.10.zip

Распакуем:

unzip php-8.3.10.zip

Перейдем в папку с исходным кодом:

cd php-src-php-8.3.10

Создадим скрипт для конфигурирования PHP

touch configure.sh && chmod +x configure.sh

Откроем файл для редактирования

mcedit configure.sh

Скопируем и вставим содержимое:

./buildconf --force
./configure --with-config-file-path=/etc/php/php8.3.10 \
--sysconfdir=/etc/php/php8.3.10 \
--enable-mysqlnd \
--with-pdo-mysql \
--with-pdo-mysql=mysqlnd \
--with-pdo-pgsql=/usr/bin/pg_config \
--enable-bcmath \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-mbstring \
--enable-phpdbg \
--enable-shmop \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-zlib \
--with-curl \
--with-pear \
--with-openssl \
--enable-pcntl \
--enable-gd \
--with-jpeg \
--with-mysqli \
--with-readline \
--with-freetype \
--with-ldap

Нажмем F2 сохраним и Esc для выхода

Запустим конфигурирования с помощью нашего скрипта:

./configure.sh

Если всё прошло хорошо, то у нас появится сообщение:

Thank you for using PHP.

Запустим сборку:

make

У меня на виртуальной машине, с SSD сбора заняла примерно 10 минут.

Установим:

sudo make install

Проверим версию:

php -v
PHP 8.3.10 (cli) (built: Jul 31 2024 06:05:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.10, Copyright (c) Zend Technologies

Проверим конфигурацию:

php-config
Usage: /usr/local/bin/php-config [OPTION]
Options:
 --prefix            [/usr/local]
 --includes          [-I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib]
 --ldflags           [ -L/usr/lib/x86_64-linux-gnu]
 --libs              [  -lreadline -lncurses -lpq -lrt -lldap -llber -lrt -lm  -lxml2 -lssl -lcrypto -lsqlite3 -lz -lcurl -lssl -lcrypto -lxml2 -lz -lpng16 -ljpeg -lfreetype -lonig -lsqlite3 -lxml2 -lxml2 -lxml2 -lxml2 -lz -lssl -lcrypto ]
 --extension-dir     [/usr/local/lib/php/extensions/no-debug-non-zts-20230831]
 --include-dir       [/usr/local/include/php]
 --man-dir           [/usr/local/php/man]
 --php-binary        [/usr/local/bin/php]
 --php-sapis         [ cli fpm phpdbg cgi]
 --ini-path          [/etc/php/php8.3.10]
 --ini-dir           []
 --configure-options [--with-config-file-path=/etc/php/php8.3.10 --sysconfdir=/etc/php/php8.3.10 --enable-mysqlnd --with-pdo-mysql --with-pdo-mysql=mysqlnd --with-pdo-pgsql=/usr/bin/pg_config --enable-bcmath --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --enable-mbstring --enable-phpdbg --enable-shmop --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-zlib --with-curl --with-pear --with-openssl --enable-pcntl --enable-gd --with-jpeg --with-mysqli --with-readline --with-freetype --with-ldap]
 --version           [8.3.10]
 --vernum            [80310]

Создадим файлы конфигурации для новой версии:

sudo cp php.ini-development /etc/php/php8.3.10/php.ini
sudo cp /etc/php/php8.3.10/php-fpm.conf.default /etc/php/php8.3.10/php-fpm.conf
sudo cp /etc/php/php8.3.10/php-fpm.d/www.conf.default /etc/php/php8.3.10/php-fpm.d/www.conf

Запускаем php-fpm как службу

Создадим файл для запуска php-fpm:

sudo mcedit /lib/systemd/system/php-8.3.10-fpm.service

С содержимым:

[Unit]
Description=The PHP 8.3.10 FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/var/run/php8.3.10-fpm.pid
ExecStart=/usr/local/sbin/php-fpm --nodaemonize --fpm-config /etc/php/php8.3.10/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

Разрешим запуск службы:

sudo systemctl enable php-8.3.10-fpm.service

Перезапустим:

sudo systemctl daemon-reload

Запустим службу:

sudo systemctl start php-8.3.10-fpm.service

Проверим статус:

sudo systemctl status php-8.3.10-fpm.service
● php-8.3.10-fpm.service - The PHP 8.3.10 FastCGI Process Manager
    Loaded: loaded (/lib/systemd/system/php-8.3.10-fpm.service; enabled; preset: enabled)
    Active: active (running) since Wed 2024-07-31 06:14:09 CDT; 27s ago
  Main PID: 134420 (php-fpm)
     Tasks: 3 (limit: 4643)
    Memory: 8.1M
       CPU: 17ms
    CGroup: /system.slice/php-8.3.10-fpm.service
            ├─134420 "php-fpm: master process (/etc/php/php8.3.10/php-fpm.conf)"
            ├─134421 "php-fpm: pool www"
            └─134422 "php-fpm: pool www"

Jul 31 06:14:09 debian-build systemd[1]: Started php-8.3.10-fpm.service - The PHP 8.3.10 FastCGI Process Manager.

Проверка работоспособности php-fpm

Установим nginx:

sudo apt install --yes nginx

Создадим файл:

sudo mcedit /etc/nginx/sites-available/php83_test

С содержимым:

server {
listen 9999 default_server;
listen [::]:9999 default_server;


root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
}

Создадим символическую ссылку:

sudo ln -s /etc/nginx/sites-available/php83_test /etc/nginx/sites-enabled

Проверим конфигурацию Nginx:

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустим:

sudo service nginx restart

Проверим:

http://192.168.1.36:9999

Страница загружается.

Создадим файл:

echo "<?php echo phpinfo(); ?>" | sudo tee /var/www/html/test.php

Проверим

http://192.168.1.36:9999/test.php
Изображение удалено.Изображение удалено.

Всё загружается и работает, но данный способ далек от идеала, так как требует достаточно много времени, даже при использовании скриптов и создает ненужную нагрузку на сеть и процессор.

В одной из следующей статье мы упакуем полученный код в .deb пакет, для более простого распространения PHP 8.3.10 на другие сервера!

Заключение

Сегодня мы рассмотрели сборку PHP 8.3.10 из исходного кода в Debian 12 Bookworm:

Установили требуемые пакеты;

Загрузили исходный код PHP 8.3.10;

Произвели конфигурирование, сборку и установку;

Проверили версию и конфигурацию;

Создали службу для запуска php-fpm;

Проверили работоспособность службы, настроив тестовый сайт с использованием nginx.

Категория PHP
Теги Debian PHP Nginx

Добавить комментарий

Простой текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
Просмотров: 328