
Как обновить 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) нужно указывать в репозитории.
Поддержка релиза завершена, требуется переход на новый Debian
Ветка PHP давно снята с поддержки, обновление желательно
Подходит для большинства проектов, но новее версии — через Sury
Свежая версия доступна сразу, дополнительный репозиторий не нужен
Два пути: обновить Debian или подключить репозиторий Sury
Есть два способа получить свежий PHP. Первый — перейти на следующий релиз Debian целиком. Он правильный, но затрагивает всю систему: ядро, библиотеки, почтовый сервер, базы данных. Для боевого сервера это отдельный проект со своим планом отката.
Второй способ — подключить репозиторий Ондржея Сури (Ondřej Surý), который поддерживает пакеты PHP для Debian и приводит их в соответствие с официальными релизами. Именно он используется в большинстве инструкций, потому что позволяет поставить нужную версию на текущий Debian и держать несколько версий параллельно. Дальше разбираем именно этот вариант.
Перед любыми изменениями сделайте копию: sudo cp -a /etc/php /root/php-backup, архив конфигураций Nginx или Apache и дамп базы через mysqldump либо pg_dump. Если сервер виртуальный, создайте снимок диска у хостинг-провайдера.
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
- 01
Переключите консольный PHP: выполните sudo update-alternatives --config php и выберите новую версию. Проверьте результат командой php -v.
- 02
Для Nginx с PHP-FPM: в конфигурации сайта замените сокет, например fastcgi_pass unix:/run/php/php8.2-fpm.sock на unix:/run/php/php8.3-fpm.sock.
- 03
Для Apache с mod_php: отключите старый модуль и включите новый — sudo a2dismod php8.2, затем sudo a2enmod php8.3.
- 04
Перенесите параметры из старого php.ini и пула www.conf: лимиты памяти, загрузки файлов, время выполнения, часовой пояс, настройки opcache.
- 05
Проверьте конфигурацию командой sudo nginx -t (или apachectl configtest), затем перезапустите службы: sudo systemctl restart php8.3-fpm и sudo systemctl reload nginx.
- 06
Откройте сайт, админку и страницы с формами и оплатой, затем просмотрите журналы ошибок: /var/log/nginx/error.log и журнал php8.3-fpm через journalctl.
- 07
Когда всё работает стабильно несколько дней, удалите старую версию: sudo apt purge 'php8.2*' и sudo apt autoremove.
Типичные ошибки при обновлении PHP на Debian
Как делают неправильно
- Удаляют старую версию PHP сразу, не проверив работу сайта на новой
- Забывают поменять сокет PHP-FPM в конфигурации Nginx, и сайт продолжает работать на старой версии
- Не ставят расширения, которые были на прежней версии, и получают ошибки Call to undefined function
- Переносят php.ini целиком из старой версии, хотя часть директив устарела или удалена
- Обновляют PHP на боевом сервере без резервной копии и без тестового запуска
Как правильно
- 01
Ставьте новую версию параллельно и тестируйте сайт, пока старая остаётся рабочей
- 02
После правки конфигурации проверяйте, какая версия отвечает: выведите phpversion() на временной странице или посмотрите заголовки и phpinfo в закрытой зоне
- 03
Сравнивайте списки php -m до и после, ставьте недостающие пакеты
- 04
Переносите в новый php.ini только нужные параметры, а устаревшие директивы смотрите в журнале ошибок
- 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_php | Nginx + PHP-FPM |
|---|---|---|
| Пакет PHP | libapache2-mod-php8.3 | php8.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 apache2 | systemctl restart php8.3-fpm и reload nginx |
Как откатиться, если что-то пошло не так
Преимущество параллельной установки в том, что откат занимает минуты. Верните прежний сокет в конфигурации Nginx (или включите старый модуль в Apache), проверьте конфигурацию и перезагрузите службу. Старая версия PHP и её настройки никуда не делись, поэтому сайт сразу заработает как раньше.
Именно поэтому удалять прежнюю версию стоит не в день обновления, а через несколько дней стабильной работы. За это время успеют отработать задачи cron, обмены с внешними системами, еженедельные отчёты и другие редкие сценарии, которые не всегда попадают в ручное тестирование. Не забудьте и про cron: задания, запускаемые через php в командной строке, используют CLI-версию, которую вы переключали отдельно.
php -v и phpinfo() показывают одну и ту же новую версию
Список php -m совпадает со старой версией, ошибок Call to undefined function нет
В логах Nginx или Apache и PHP-FPM нет новых Fatal error и Deprecated
Работают авторизация, формы, корзина, оплата и загрузка файлов
Фоновые задания запускаются новой версией и завершаются без ошибок
В Яндекс Вебмастере и Google Search Console нет роста ошибок сервера
Итоги: безопасное обновление PHP на Debian
- 01
Проверьте текущую версию командами php -v и cat /etc/os-release
- 02
Сделайте резервные копии конфигураций, файлов сайта и базы данных
- 03
Подключите репозиторий Sury и установите нужную версию с расширениями
- 04
Переключите CLI, Apache или PHP-FPM и перенесите параметры php.ini
- 05
Протестируйте сайт, следите за журналами и отчётами Яндекс Вебмастера и Google Search Console
- 06
Удалите старую версию через несколько дней стабильной работы
Регулярное обновление PHP повышает безопасность, ускоряет сайт и убирает зависимость от устаревших библиотек. Если у вас много проектов, нестандартная конфигурация или нет времени разбираться, доверьте миграцию специалистам: мы проведём её без простоев и с готовым планом отката.
Часто задаваемые вопросы
Штатные репозитории Debian содержат только одну версию PHP, закреплённую за релизом. Чтобы получить более новую, подключите репозиторий Sury, выполните apt update, установите нужную версию (например, php8.3 с php8.3-fpm и расширениями), переключите веб-сервер и удалите старую версию.
В Debian 11 это PHP 7.4, в Debian 12 — PHP 8.2, в Debian 13 — PHP 8.4. Точную версию на своём сервере покажет команда php -v, а доступные кандидаты — apt policy php.
Да. Пакеты Sury устанавливаются параллельно: у каждой версии свои каталоги в /etc/php и свой сервис PHP-FPM. Это удобно для поэтапной миграции сайтов: для каждого виртуального хоста указывается собственный сокет.
Посмотрите журнал ошибок веб-сервера и PHP-FPM, проверьте, что установлены все расширения (php -m), и сверьте настройки в php.ini новой версии. Если причина не находится быстро, верните прежний сокет в конфигурации Nginx или модуль в Apache и перезапустите службу. Старая версия при этом остаётся на месте.
Обязательно. Сохраните каталог /etc/php, конфигурации веб-сервера, файлы сайта и дамп базы данных. Займёт это несколько минут, а откат без копии может растянуться на часы.
Обновим PHP на вашем сервере без простоев и потери данных
Проведём аудит версии, подготовим резервные копии и безопасно перенесём сайты на актуальный PHP
Спасибо за заявку!
Мы свяжемся с вами в ближайшее время.
Более 300 серверов уже обновлены без простоя



