Настройка окружения PHP 8.3 для облачной платформы Nextcloud

Раздел: Версии PHP -> Nextcloud

Настройка Nextcloud для работы с PHP 8.3

Переход на PHP 8.3 позволяет улучшить производительность и безопасность облачного хранилища Nextcloud. Однако не все приложения (apps) сразу совместимы с новой версией. Ниже рассмотрены основные подходы к установке и конфигурированию.

Как установить PHP 8.3 на сервер с Ubuntu и подключить к Nextcloud?

Самый надёжный способ - использовать репозиторий Ondřej Surý, который предоставляет свежие версии PHP. Выполните следующие шаги:

sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-gd php8.3-xml php8.3-mbstring php8.3-zip php8.3-curl php8.3-intl php8.3-bcmath php8.3-gmp php8.3-imagick php8.3-redis php8.3-apcu -y

Nextcloud настройка php (настройка php для nextcloud)

После установки необходимо настроить пул PHP-FPM для пользователя www-data и указать правильный сокет. Отредактируйте файл пула (например, /etc/php/8.3/fpm/pool.d/www.conf):

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
listen.owner = www-data
listen.group = www-data

Php 8.3 nextcloud (php 8.3 для nextcloud)

Затем перезапустите PHP-FPM и веб-сервер:

sudo systemctl restart php8.3-fpm
sudo systemctl reload nginx

Nextcloud php version (версия php для nextcloud)

В Nextcloud измените config.php, указав версию PHP (необязательно, но помогает диагностике):

'version' => '28.0.2', // или ваша версия
'default_php_version' => '8.3'

Типичная ошибка: после переключения версии PHP Nextcloud выдает сообщение о несовместимости приложений. Решение - временно отключить несовместимые приложения через occ или удалить их. Также можно проверить логи: sudo -u www-data php /var/www/nextcloud/occ app:list - выявить проблемные.

Как развернуть Nextcloud с PHP 8.3 в Docker?

Официальный образ Nextcloud уже содержит PHP 8.2, но можно использовать тег с PHP 8.3 (например, nextcloud:28-apache). Однако для точного контроля версии PHP создайте собственный Dockerfile на основе образа с PHP 8.3 CLI и FPM.

FROM php:8.3-fpm-alpine
RUN docker-php-ext-install pdo_mysql gd zip intl bcmath gmp
# Далее скопируйте Nextcloud и настройте

Проще использовать готовый docker-compose.yml с сервисом Nextcloud, указав образ nextcloud:stable-fpm. В конфигурации задайте переменные окружения для PHP версии (если образ поддерживает).

version: '3'
services:
  nextcloud:
    image: nextcloud:28-fpm-alpine
    environment:
      - PHP_VERSION=8.3 # некоторые образы игнорируют
    volumes:
      - nextcloud_data:/var/www/html
  db:
    image: mariadb:10

Проблема: версия PHP в контейнере может не совпадать с ожидаемой. Решение - явно указать тег образа с нужной версией, например nextcloud:28.0.2-fpm-alpine, который базируется на PHP 8.3. Проверить версию внутри контейнера: docker exec -it <container> php -v.

Как обновить PHP с 8.2 до 8.3 на CentOS/RHEL с помощью Remi репозитория?

Репозиторий Remi’s RPM содержит модульные версии PHP. Для CentOS 8/9 выполните:

sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf module reset php
sudo dnf module enable php:remi-8.3
sudo dnf install php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-zip php-curl php-intl php-bcmath php-gmp php-imagick php-redis php-apcu

Настройте PHP-FPM аналогично Ubuntu. В CentOS путь к пулу - /etc/php-fpm.d/www.conf. После установки удалите старые расширения PHP 8.2 и перезапустите службы.

Ошибка: при переходе могут остаться расширения от предыдущей версии, вызывающие конфликты. Решение - полностью очистить пакеты php-8.2 и установить только нужные для 8.3.

Как использовать менеджер версий PHP (phpenv) для Nextcloud?

Для тестирования или изолированного окружения подойдет phpenv. После установки phpenv и php-build скомпилируйте PHP 8.3 с нужными опциями:

phpenv install 8.3.12
phpenv global 8.3.12
# Установка расширений через pecl
pecl install redis apcu imagick

Затем настройте веб-сервер на использование этого PHP (например, через PHP-FPM, запущенный от пользователя). Однако для production такой подход менее стабилен из-за ручной компиляции.

Проблема: отсутствие некоторых расширений (intl, gd) может потребовать дополнительных зависимостей. Решение - заранее установить системные пакеты libicu-dev, libgd-dev и другие.

После применения любого из вариантов выполните проверку через occ:

sudo -u www-data php /var/www/nextcloud/occ status
sudo -u www-data php /var/www/nextcloud/occ app:list

Убедитесь, что версия PHP отображается корректно и все приложения активны.

Расширенные примеры конфигурации PHP 8.3 для Nextcloud

Настройка OPcache для максимальной производительности

В файле /etc/php/8.3/cli/conf.d/10-opcache.ini (или /etc/php/8.3/fpm/conf.d/10-opcache.ini) задайте параметры, рекомендованные Nextcloud:

Пример
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.fast_shutdown=1

После изменения перезапустите PHP-FPM. Проверьте статус OPcache через phpinfo() или скрипт:

Пример
php -r "print_r(opcache_get_status(true));"
Array
(
    [opcache_enabled] => 1
    [cache_full] => 
    [memory_usage] => Array
        (
            [used_memory] => 10987654
            [free_memory] => 248123456
            [wasted_memory] => 0
        )
    [interned_strings_usage] => Array
        (
            [used_memory] => 1234567
            [free_memory] => 14123456
            [number_of_strings] => 12345
        )
    [opcache_statistics] => Array
        (
            [num_cached_scripts] => 150
            [num_cached_keys] => 432
            [max_cached_keys] => 10000
            [hits] => 15678
            [misses] => 23
            [blacklist_misses] => 0
            [opcache_hit_rate] => 99.85
            [start_time] => 1719234567
            [last_restart_time] => 0
        )
)

Конфигурация пула PHP-FPM для Nextcloud с ограничением ресурсов

Создайте новый пул nextcloud.conf в /etc/php/8.3/fpm/pool.d/:

Пример
[nextcloud]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm-nextcloud.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
request_terminate_timeout = 3600
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/nextcloud-error.log

Перезагрузите PHP-FPM и настройте nginx на использование этого сокета:

Пример
fastcgi_pass unix:/run/php/php8.3-fpm-nextcloud.sock;

Проверка совместимости приложений Nextcloud с PHP 8.3

Скрипт, который выводит список приложений и их совместимость с текущей версией PHP (на основе информации из appinfo/info.xml):

Пример
#!/usr/bin/env php
<?php
$appsDir = '/var/www/nextcloud/apps';
$requiredPhp = '8.3';
$iterator = new DirectoryIterator($appsDir);
foreach ($iterator as $fileInfo) {
    if ($fileInfo->isDir() && !$fileInfo->isDot()) {
        $infoXml = $fileInfo->getPathname() . '/appinfo/info.xml';
        if (file_exists($infoXml)) {
            $xml = simplexml_load_file($infoXml);
            $version = (string)$xml->dependencies->php['min-version'] ?? '0.0.0';
            if (version_compare($version, $requiredPhp, '>')) {
                echo "Приложение " . $xml->id . " требует PHP $version, несовместимо с $requiredPhp\n";
            } else {
                echo "Приложение " . $xml->id . " совместимо\n";
            }
        }
    }
}

Запустите: php check_apps.php

Приложение calendar совместимо
Приложение contacts несовместимо, требует 8.4
Приложение files совместимо

Автоматизация обновления PHP через Ansible

Playbook для установки PHP 8.3 и переключения Nextcloud на новую версию:

Пример
---
- hosts: nextcloud_servers
  tasks:
    - name: Add PHP PPA
      apt_repository:
        repo: ppa:ondrej/php
        state: present
    - name: Install PHP 8.3 and extensions
      apt:
        name:
          - php8.3
          - php8.3-fpm
          - php8.3-mysql
          - php8.3-gd
          - php8.3-xml
          - php8.3-mbstring
          - php8.3-zip
          - php8.3-curl
          - php8.3-intl
          - php8.3-bcmath
          - php8.3-gmp
          - php8.3-imagick
          - php8.3-redis
          - php8.3-apcu
        state: present
    - name: Enable PHP 8.3 FPM
      systemd:
        name: php8.3-fpm
        enabled: yes
        state: started
    - name: Disable old PHP 8.2 FPM
      systemd:
        name: php8.2-fpm
        state: stopped
        enabled: no

После выполнения проверьте работу Nextcloud и при необходимости выполните миграцию базы данных через occ.

PHP 8.3 для Nextcloud - comments

En
Php 8.3 nextcloud (php)