Тюнинг Nextcloud [обновляемая]

После установки 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. Или можете после применения всех изменений перезапустить его один раз.

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

«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

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

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

«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

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

Некоторые индексы базы данных не были преобразованы в тип 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

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

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

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

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

sudo systemctl restart php7.2-fpm

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

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

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

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

Ставим 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',

Ставим 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.

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

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

Так как создание таких индексов может занять достаточно продолжительное время, оно должно быть запущено вручную. Для создания индексов необходимо запустить команду «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

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

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

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

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

P.S. Убедитесь, что 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;

Инструкции для 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

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

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

Для доступа к файлам, используя обратный прокси, особых настроек делать не надо, достаточно в директиве 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',
),

9 thoughts on “Тюнинг Nextcloud [обновляемая]

  1. Мужчина

    Так вы же в первом своем посте про установку Некстклауда писали, что ставите mariadb. А теперь уже mysql. В чем соль? Разонравилась Мария?

    1. DiDim Автор записи

      Возможно, я некорректно описал, что происходило. В мануале от разрабов, у них сначала идут шаги для MySQL, а уже потом для MariaDB. Я на это благополучно забил, и получил кучу ошибок. Поэтому прежде надо читать всё, а потом уже делать 🙂
      Поэтому здесь в тексте сначала идёт инструкция для подготовки базы MariaDB, а уже потом (если у вас каким-то случайным образом появился MySQL) идут шаги для, так сказать, общего случая, который применим и к MariaDB и к MySQL.
      Сама админка Nextcloud пишет про MySQL в любом случае.
      P.S. С базами данных я плотно не общаюсь, поэтому и разонравиться они мне не могут 🙂

  2. Владимир

    Добрый день!
    У меня не выходит из режима технического обслуживания.
    при вводе команды
    sudo -u www-data php /path/to/nextcloud/occ maintenance:mode —off
    пишет
    Could not open input file: /path/to/nextcloud/occ

    Все настраивал по вашим гайдам.

    1. DiDim Автор записи

      /path/to/nextcloud/occ — это путь к установленному nextcloud’у, он может отличаться, но если смотреть по моим статьям, то путь такой — /usr/share/nginx/nextcloud/
      P.S. И да, перед off стоят два дефиса

      1. Владимир

        Спасибо. Действительно путь не тот был, как в шапке.

        Но после действий про ТО, когда включаю его, то когда захожу на веб интерфейс пишет, что идет ТО.
        А когда отключаю, то не могу подключится(ничего не происходит).
        И если опять включу в true, то через какое-то время пишет, что идет ТО.

        Не подскажите в чем может быть дело?

        Спасибо Вам большое за ваш труд при написании циклов статей!

        1. DiDim Автор записи

          Подсказать не могу — причин может быть много. Тут только смотреть в логи nextcloud’а и веб-сервера.
          Или снести всё и поставить заново 🙂
          Или сделать бэкап и перенести на новую платформу\систему.

  3. Святослав

    Спасибо огромное за Ваш цикл статей по Nextcloud!
    Найти в рунете что-то подобное крайне сложно. Современные средства (apt) и доходчивые объяснения. Иногда думается «да нах*й столько блогов расплодилось», а когда приходится решать задачу и ответ находится не на каких-нибудь гигантах, вроде хабра или медиума, а только на таких скромных ресурсах, понимаешь, что сильно ошибался.

    1. DiDim Автор записи

      Очень приятно, что мои небольшие заметки ценятся и комментируются. Как ни удивительно, но действительно появляется желание писать и дальше 🙂
      Сам пользуюсь nextcloud’ом как основным облаком и для бесплатного продукта он очень даже хорош.

  4. Олег

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

Добавить комментарий

Ваш адрес email не будет опубликован.