Тюнинг Nextcloud

 

 

1. Убираем первое предупреждение

2. Убираем второе предупреждение

3. Убираем третье предупреждение

4. Убираем предупреждение о php

 

После установки Nextcloud им можно сразу же пользоваться. (А если вы здесь по вопросу отключения техобслуживания Nextcloud, то вот команда — sudo -u www-data php /path/to/nextcloud/occ maintenance:mode —off (перед off ставьте два дефиса) )

 

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

 

Как и ранее я писал, Nextcloud стоит на Ubuntu 18.04 и работает под связкой nginx + php-fpm + mysql. Язык интерфейса — русский. Nextcloud установлен в /usr/share/nginx/nextcloud/

 

После внесения изменений не забываем перезапускать php-fpm. Или можете после применения всех изменений перезапустить его один раз.

 

 

1. Убираем первое предупреждение:

 

«PHP не настроен правильно для получения переменных системного окружения.

Запрос getenv(«PATH») возвращает пустые результаты.

Обратитесь к разделу о конфигурации PHP и примечаниям к конфигурации

PHP из руководства по установке. Обратите внимание на настройку

параметров PHP, особенно при использовании механизма php-fpm.»

 

Как сказано в документации

 

Когда вы используете php-fpm, системные переменные среды, такие как PATH, TMP или другие, не заполняются автоматически так же, как при использовании php-cli. Вызов функции PHP, такой как getenv(‘PATH’); может возвращать пустой результат. Поэтому вам может потребоваться вручную настроить переменные среды в файле конфигурации php-fpm.

 

Редактируем файл /etc/php/7.2/fpm/pool.d/www.conf

 

Ищем такие строки:

---------------------------------------------

;env[HOSTNAME] = $HOSTNAME

;env[PATH] = /usr/local/bin:/usr/bin:/bin

;env[TMP] = /tmp

;env[TMPDIR] = /tmp

;env[TEMP] = /tmp

---------------------------------------------

 

И раскомментируем их.

 

Или, если побыстрее

 

sed -i -e "s/\;env\[/env\[/g" \

/etc/php/7.2/fpm/pool.d/www.conf

 

Не забываем перезапустить php-fpm

 

$ systemctl restart php7.2-fpm

 

Готово. Идём дальше.

 

 

2. Убираем второе предупреждение

 

«PHP OPcache не настроен правильно»

 

Для обеспечения лучшей производительности рекомендуется задать в файле php.ini следующие параметры настроек:

 

opcache.enable=1

opcache.enable_cli=1

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=10000

opcache.memory_consumption=128

opcache.save_comments=1

opcache.revalidate_freq=1

 

Заменим вручную вышеуказанные параметры в файле /etc/php/7.2/fpm/php.ini или сразу заменим значения sed’ом

 

sed -i -e "s/\;opcache.enable=1/opcache.enable=1/g" \

/etc/php/7.2/fpm/php.ini

sed -i -e "s/\;opcache.enable_cli=0/opcache.enable_cli=1/g" \

/etc/php/7.2/fpm/php.ini

sed -i -e "s/\;opcache.interned_strings_buffer=8/opcache.interned_strings_buffer=8/g" \

/etc/php/7.2/fpm/php.ini

sed -i -e "s/\;opcache.max_accelerated_files=10000/opcache.max_accelerated_files=10000/g" \

/etc/php/7.2/fpm/php.ini

sed -i -e "s/\;opcache.memory_consumption=128/opcache.memory_consumption=128/g" \

/etc/php/7.2/fpm/php.ini

sed -i -e "s/\;opcache.save_comments=1/opcache.save_comments=1/g" \

/etc/php/7.2/fpm/php.ini

sed -i -e "s/\;opcache.revalidate_freq=2/opcache.revalidate_freq=1/g" \

/etc/php/7.2/fpm/php.ini

 

3. Убираем третье предупреждение

 

Некоторые индексы базы данных не были преобразованы в тип big int

Так как преобразование таких индексов может занять продолжительное время, оно должно быть запущенно вручную. Чтобы выполнить преобразование, необходимо включить режим обслуживания и запустить в терминале команду «occ db:convert-filecache-bigint». Дополнительные сведения приведены на соответствующей странице документации.filecache.mtime

filecache.storage_mtime

 

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

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --on

 

В браузере вы можете увидеть, что система находится в режиме обслуживания. Теперь в консоли выполните следующее:

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ db:convert-filecache-bigint --no-interaction

 

Затем выключите режим обслуживания.

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --off

 

4. Убираем предупреждение о php

 

Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ.

 

sudo nano /etc/php/7.2/fpm/php.ini

 

Ищем memory_limit и вводим, например, 512M вместо 128M. И перезапускаем php-fpm

 

sudo systemctl restart php7.2-fpm

 

5. Убираем предупреждение о кешировании.

 

Не настроена система кеширования

Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информация доступна в документации

 

Поэтому прикручиваем систему кэширования, состоящую из локальной системы кэширования на основе APCu и системы распределённого кеширования Redis.

 

6. Ставим APCu

 

sudo apt install php-apcu -y

 

В файле php.ini включаем apcu

 

sudo nano /etc/php/7.2/fpm/php.ini

 

вставив в начало

 

apc.enable_cli=1

 

Сохраняем файл и перезапускаем php-fpm.

 

sudo systemctl restart php7.2-fpm

 

Редактируем файл config/config.php в директории установки Nextсloud

 

sudo nano /usr/share/nginx/nextcloud/config/config.php

 

и вставляем следующую строку перед закрывающем скобкой «);»

 

'memcache.local' => '\OC\Memcache\APCu',

 

 

7. Ставим Redis.

 

sudo apt install redis-server php-redis -y

 

Проверяем, что он запустился

 

ps ax | grep redis

 

15758 ?        Ssl    0:00 /usr/bin/redis-server 127.0.0.1:6379

 

В тот же файл config/config.php

 

sudo nano /usr/share/nginx/nextcloud/config/config.php

 

вставьте следующее опять перед закрывающей скобкой «);»

 

---------------------------------------------

 'memcache.distributed' => '\OC\Memcache\Redis',

 'redis' =>

 array (

       'host' => '127.0.0.1',

       'port' => 6379,

 ),

 'memcache.locking' => '\OC\Memcache\Redis',

---------------------------------------------

 

Сохраняем файл. Перезапускаем php-fpm, если вы это ещё не сделали и наслаждаемся ускоренной работе Nextcloud.

 

 

8. Убираем ошибку отсутствия индексов

 

В базе данных отсутствуют некоторые индексы.

Так как создание таких индексов может занять достаточно продолжительное время, оно должно быть запущено вручную. Для создания индексов необходимо запустить команду «occ db:add-missing-indices» во время работы сервера Nextcloud. При созданных индексах, как правило, запросы к базе данных выполняются значительно быстрее.

 

Выполняем

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ db:add-missing-indices

 

При успешном индексировании будет следующий текст:

 

Check indices of the share table.

Check indices of the filecache table.

Check indices of the twofactor_providers table.

Check indices of the login_flow_v2 table.

Check indices of the whats_new table.

Check indices of the cards table.

Check indices of the cards_properties table.

Check indices of the calendarobjects_props table.

Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time…

calendarobjects_props table updated successfully.

Check indices of the schedulingobjects table.

Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time…

schedulingobjects table updated successfully.

 

Некоторые индексы базы данных не были преобразованы в тип big int.

Так как преобразование таких индексов может занять продолжительное время, оно должно быть запущенно вручную. Чтобы выполнить преобразование, необходимо включить режим обслуживания и запустить в терминале команду «occ db:convert-filecache-bigint». Дополнительные сведения приведены на соответствующей странице документации.

 

Вводим сервер в режим обслуживания и выполняем преобразование

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --on

sudo -u www-data php /usr/share/nginx/nextcloud/occ db:convert-filecache-bigint

 

Появится сообщение

 

Nextcloud is in maintenance mode - no apps have been loaded

Following columns will be updated:

mounts.storage_id

mounts.root_id

mounts.mount_id

This can take up to hours, depending on the number of files in your instance!

Continue with the conversion (y/n)? [n]

 

Вводим «y»

 

И выводим из режима обслуживания

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --off

 

9. Убираем предупреждение о 4-х байтовых символах

 

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

Чтобы иметь возможность обрабатывать 4-байтовые символы (например, смайлики) без проблем в именах файлов или комментариях, рекомендуется включить 4-байтовую поддержку в MySQL. Для получения более подробной информации обратитесь к документации.

 

Так как первоначально Nextcloud я ставил на базе MariaDB, то по ссылке выше для возможности обработки ошибки я не заметил продолжение про MariaDB, а сразу стал применять шаги для MySQL. Не надо так. Поэтому распишу по шагам, что и как надо делать.

 

ВНИМАНИЕ!!! Убедитесь, что MariaDB версии выше 10.2. У меня была версия 15.1

 

Убедитесь, что на вашем сервере MySQL установлены следующие параметры InnoDB в файле:

 

sudo nano /etc/mysql/mariadb.cnf

 

---------------------------------------------

[mysqld]

innodb_large_prefix=true

innodb_file_format=barracuda

innodb_file_per_table=1

---------------------------------------------

 

и если их нет, то вставьте в конец файла.

 

Перезапустите сервер MariaDB

 

sudo systemctl restart mariadb

 

Выясните был ли изменён формат файла на Barracuda

 

sudo mariadb

SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nextcloud%";

 

Если формат файла — «barracuda» для каждой отдельной таблицы, то ничего особенного не остается делать. Продолжайте с инструкциями для MySQL. Во время тестирования формат файла всех таблиц был “Antelope”.

 

Таблицы должны быть перенесены в “barracuda” вручную, одна за другой. Однако команды SQL можно легко создавать:

 

USE INFORMATION_SCHEMA;

SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "nextcloud";

 

Скопируйте появившийся ответ и уберите в нем символ «|». После этого вставляйте текст в консоль mariadb

 

После всего проделанного формат файла должен поменяться на Barracuda. Проверим.

 

SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nextcloud%";

exit;

 

 

10. Инструкции для MySQL

 

Вводим в режим обслуживания.

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --on

sudo mariadb

ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

exit;

sudo -u www-data php /usr/share/nginx/nextcloud/occ config:system:set mysql.utf8mb4 --type boolean --value="true"

 

Должен быть такой результат

 

Nextcloud is in maintenance mode - no apps have been loaded

System config value mysql.utf8mb4 set to boolean true

 

Запускаем конвертацию

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:repair

 

Отключаем режим обслуживания.

 

sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --off

 

Вот и всё готово.

 

11. Настройка обратного прокси для доступа

 

Для доступа к файлам, используя обратный прокси, особых настроек делать не надо, достаточно в директиве proxy_pass указать IP сервера с Nextcloud. Однако, если вы используете клиент Nextcloud, то он при авторизации запустит окно браузера с IP сервера Nextcloud, а не его доменным именем. Чтобы это исправить, делаем следующее:

 

Для примера IP обратного прокси — 192.168.0.1, IP Nextcloud-сервера — 192.168.0.2

 

В файле nextcloud/config/config.php

 

---------------------------------------------

'trusted_domains' =>

array (

0 => '192.168.0.2',

1 => '192.168.0.1',

),

---------------------------------------------

 

---------------------------------------------

'overwritehost' => 'domain.name.example.org',

'overwriteprotocol' => 'https',

'overwritewebroot' => '',

'overwritecondaddr' => '^192\.168\.0\.1$',

'overwrite.cli.url' => 'https://domain.name.example.org',

---------------------------------------------

 

---------------------------------------------

'trusted_proxies' =>

array (

   0 => '192.168.0.1',

),

---------------------------------------------