Тюнинг 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',
),
---------------------------------------------