Как обновить PHP на Debian: пошаговая инструкция
Два одинаковых лотка с ячейками, заполненными рядами белых шариков; в правом лотке один шарик изумрудный

Как обновить PHP на Debian: пошаговая инструкция

Обновить PHP на Debian можно через репозиторий Sury: добавьте источник, поставьте нужную версию с модулями, переключите веб-сервер и проверьте сайт.

Как обновить PHP на Debian

Чтобы обновить PHP на Debian, подключите репозиторий Sury, установите нужную версию вместе с расширениями, переключите на неё веб-сервер и CLI, а затем удалите старую версию. Штатный apt upgrade на новую мажорную или минорную версию PHP не переведёт.

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

Команда apt upgrade обновляет PHP только внутри той ветки, которая закреплена за вашим релизом Debian: патчи безопасности приходят, но версия остаётся прежней. Если на сервере стоит PHP 7.4 или 8.2, а вашей CMS или фреймворку нужна 8.3 или 8.4, придётся подключать дополнительный источник пакетов. Ниже подробный порядок действий для Apache и Nginx с PHP-FPM, типичные ошибки и чек-лист проверки.

Зачем обновлять PHP и как узнать текущую версию

Устаревшая версия PHP — это не только отсутствие новых возможностей. Ветки, снятые с поддержки, не получают исправлений безопасности, и любая найденная уязвимость остаётся открытой навсегда. Кроме того, современные версии CMS, плагины и библиотеки Composer постепенно повышают минимальные требования, а новые релизы PHP заметно быстрее старых: JIT, улучшенный opcache и оптимизации движка дают прирост без изменения кода.

Начните с диагностики. Выполните php -v, чтобы увидеть версию командной строки. Помните, что для веб-сервера она может отличаться: сайт обслуживается модулем Apache или сервисом PHP-FPM, и их версия определяется отдельно. Список установленных пакетов покажет команда dpkg -l | grep php, а список подключённых расширений — php -m. Сохраните этот вывод в файл: он понадобится, чтобы поставить на новую версию тот же набор модулей.

Узнать релиз самого Debian можно командой cat /etc/os-release. От него зависит, какая версия PHP идёт из коробки и какое кодовое имя (bullseye, bookworm, trixie) нужно указывать в репозитории.

php в штатных репозиториях debian
01 / debian 10
buster
PHP 7.3

Поддержка релиза завершена, требуется переход на новый Debian

02 / debian 11
bullseye
PHP 7.4

Ветка PHP давно снята с поддержки, обновление желательно

03 / debian 12
bookworm
PHP 8.2

Подходит для большинства проектов, но новее версии — через Sury

04 / debian 13
trixie
PHP 8.4

Свежая версия доступна сразу, дополнительный репозиторий не нужен

Два пути: обновить Debian или подключить репозиторий Sury

Есть два способа получить свежий PHP. Первый — перейти на следующий релиз Debian целиком. Он правильный, но затрагивает всю систему: ядро, библиотеки, почтовый сервер, базы данных. Для боевого сервера это отдельный проект со своим планом отката.

Второй способ — подключить репозиторий Ондржея Сури (Ondřej Surý), который поддерживает пакеты PHP для Debian и приводит их в соответствие с официальными релизами. Именно он используется в большинстве инструкций, потому что позволяет поставить нужную версию на текущий Debian и держать несколько версий параллельно. Дальше разбираем именно этот вариант.

Перед любыми изменениями сделайте копию: sudo cp -a /etc/php /root/php-backup, архив конфигураций Nginx или Apache и дамп базы через mysqldump либо pg_dump. Если сервер виртуальный, создайте снимок диска у хостинг-провайдера.

шаг 1 — подключение репозитория и установка php 8.3
sudo apt update
sudo apt -y install lsb-release ca-certificates curl
sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update
sudo apt -y install php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip php8.3-gd php8.3-intl

важноЗамените 8.3 на нужную вам версию. Если сервер работает на Apache, вместо php8.3-fpm ставьте libapache2-mod-php8.3.

Какие расширения нужно поставить

Самая частая причина «белого экрана» после обновления — не поставленные расширения. Сравните сохранённый вывод php -m со старой версии с тем, что показывает новая. Для типичного сайта на WordPress, Laravel или 1С-Битрикс обычно нужны: mysql или pgsql, curl, mbstring, xml, zip, gd, intl, opcache, а для Битрикса ещё и soap. Для кэша и очередей часто добавляют redis или memcached, для работы с изображениями — imagick.

Пакеты называются по шаблону php<версия>-<расширение>, например php8.3-redis. Просмотреть всё доступное можно командой apt search php8.3-. Настройки новой версии лежат отдельно: /etc/php/8.3/fpm/php.ini, /etc/php/8.3/cli/php.ini и пул /etc/php/8.3/fpm/pool.d/www.conf. Файлы от старой версии автоматически не переносятся, поэтому лимиты памяти, upload_max_filesize, max_execution_time и часовой пояс нужно перенести вручную, сравнив конфигурации утилитой diff.

Как переключить сервер на новую версию PHP

  1. 01

    Переключите консольный PHP: выполните sudo update-alternatives --config php и выберите новую версию. Проверьте результат командой php -v.

  2. 02

    Для Nginx с PHP-FPM: в конфигурации сайта замените сокет, например fastcgi_pass unix:/run/php/php8.2-fpm.sock на unix:/run/php/php8.3-fpm.sock.

  3. 03

    Для Apache с mod_php: отключите старый модуль и включите новый — sudo a2dismod php8.2, затем sudo a2enmod php8.3.

  4. 04

    Перенесите параметры из старого php.ini и пула www.conf: лимиты памяти, загрузки файлов, время выполнения, часовой пояс, настройки opcache.

  5. 05

    Проверьте конфигурацию командой sudo nginx -t (или apachectl configtest), затем перезапустите службы: sudo systemctl restart php8.3-fpm и sudo systemctl reload nginx.

  6. 06

    Откройте сайт, админку и страницы с формами и оплатой, затем просмотрите журналы ошибок: /var/log/nginx/error.log и журнал php8.3-fpm через journalctl.

  7. 07

    Когда всё работает стабильно несколько дней, удалите старую версию: sudo apt purge 'php8.2*' и sudo apt autoremove.

Типичные ошибки при обновлении PHP на Debian

Большинство проблем возникает не из-за самой установки, а из-за пропущенных мелочей в конфигурации и несовместимого кода.

Как делают неправильно

  • Удаляют старую версию PHP сразу, не проверив работу сайта на новой
  • Забывают поменять сокет PHP-FPM в конфигурации Nginx, и сайт продолжает работать на старой версии
  • Не ставят расширения, которые были на прежней версии, и получают ошибки Call to undefined function
  • Переносят php.ini целиком из старой версии, хотя часть директив устарела или удалена
  • Обновляют PHP на боевом сервере без резервной копии и без тестового запуска

Как правильно

  1. 01

    Ставьте новую версию параллельно и тестируйте сайт, пока старая остаётся рабочей

  2. 02

    После правки конфигурации проверяйте, какая версия отвечает: выведите phpversion() на временной странице или посмотрите заголовки и phpinfo в закрытой зоне

  3. 03

    Сравнивайте списки php -m до и после, ставьте недостающие пакеты

  4. 04

    Переносите в новый php.ini только нужные параметры, а устаревшие директивы смотрите в журнале ошибок

  5. 05

    Перед работой делайте копию /etc/php, конфигов веб-сервера, файлов сайта и базы данных, а лучше снимок диска

Проверка совместимости кода и влияние на поисковую выдачу

Переход между минорными версиями (например, с 8.2 на 8.3) обычно проходит гладко, а прыжок с 7.4 на 8.x потребует проверки кода: в PHP 8 изменилась строгость типов, часть функций удалена, а предупреждения превратились в исключения. Заранее запустите статический анализ: php -l проверяет синтаксис файлов, а пакет PHPCompatibility для phpcs находит устаревшие конструкции. Для CMS заранее обновите ядро и плагины до версий, заявленных как совместимые с нужным PHP.

Не забывайте про SEO. Если после обновления сайт отдаёт ошибки 500 или работает медленно, поисковые роботы это быстро заметят. Следите за отчётами «Индексирование» и «Диагностика сайта» в Яндекс Вебмастере и за отчётом о покрытии в Google Search Console: рост ошибок сервера сразу виден в обеих системах. В Яндекс Метрике и Google Analytics проверьте, не просели ли показатели скорости загрузки и не выросла ли доля отказов. Лучше проводить обновление в часы минимальной нагрузки.

Что менятьApache + mod_phpNginx + PHP-FPM
Пакет PHPlibapache2-mod-php8.3php8.3-fpm
Переключениеa2dismod php8.2 и a2enmod php8.3Новый сокет php8.3-fpm.sock в fastcgi_pass
Основной php.ini/etc/php/8.3/apache2/php.ini/etc/php/8.3/fpm/php.ini и pool.d/www.conf
Перезапускsystemctl restart apache2systemctl restart php8.3-fpm и reload nginx

Как откатиться, если что-то пошло не так

Преимущество параллельной установки в том, что откат занимает минуты. Верните прежний сокет в конфигурации Nginx (или включите старый модуль в Apache), проверьте конфигурацию и перезагрузите службу. Старая версия PHP и её настройки никуда не делись, поэтому сайт сразу заработает как раньше.

Именно поэтому удалять прежнюю версию стоит не в день обновления, а через несколько дней стабильной работы. За это время успеют отработать задачи cron, обмены с внешними системами, еженедельные отчёты и другие редкие сценарии, которые не всегда попадают в ручное тестирование. Не забудьте и про cron: задания, запускаемые через php в командной строке, используют CLI-версию, которую вы переключали отдельно.

чек-лист после обновления php
01
Версия в CLI и на сайте

php -v и phpinfo() показывают одну и ту же новую версию

02
Расширения

Список php -m совпадает со старой версией, ошибок Call to undefined function нет

03
Журналы ошибок

В логах Nginx или Apache и PHP-FPM нет новых Fatal error и Deprecated

04
Ключевые сценарии

Работают авторизация, формы, корзина, оплата и загрузка файлов

05
Cron и очереди

Фоновые задания запускаются новой версией и завершаются без ошибок

06
Поисковые системы

В Яндекс Вебмастере и Google Search Console нет роста ошибок сервера

Если сервер работает на Debian 10 или другом релизе, который уже не получает обновлений, обновление PHP не решит проблему целиком: устаревшими остаются и сама система, и библиотеки. В этом случае планируйте переход на актуальный релиз Debian, а PHP обновляйте уже после него.

Итоги: безопасное обновление PHP на Debian

Обновить PHP на Debian несложно, если действовать по порядку: копия, репозиторий Sury, параллельная установка, перенос настроек, проверка и только потом удаление старой версии.
  1. 01

    Проверьте текущую версию командами php -v и cat /etc/os-release

  2. 02

    Сделайте резервные копии конфигураций, файлов сайта и базы данных

  3. 03

    Подключите репозиторий Sury и установите нужную версию с расширениями

  4. 04

    Переключите CLI, Apache или PHP-FPM и перенесите параметры php.ini

  5. 05

    Протестируйте сайт, следите за журналами и отчётами Яндекс Вебмастера и Google Search Console

  6. 06

    Удалите старую версию через несколько дней стабильной работы

Регулярное обновление PHP повышает безопасность, ускоряет сайт и убирает зависимость от устаревших библиотек. Если у вас много проектов, нестандартная конфигурация или нет времени разбираться, доверьте миграцию специалистам: мы проведём её без простоев и с готовым планом отката.

Часто задаваемые вопросы

Обновим PHP на вашем сервере без простоев и потери данных

Проведём аудит версии, подготовим резервные копии и безопасно перенесём сайты на актуальный PHP

Бесплатный аудитОткат за минутыБез простоя сайта

Более 300 серверов уже обновлены без простоя

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

Полученные сведения не передаются третьим лицам, за исключением случаев исполнения обязательств перед клиентом (с его разрешения) и обоснованных требований закона.

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.