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

или если хотим побыстрее

sed -i -e "s/memory_limit = 128M/memory_limit = 512M/g" /etc/php/7.2/fpm/php.ini
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

Режим шифрования

Задействован устаревший режим шифрования файлов на стороне сервера.

Рекомендуется отключить такое шифрование. Более подробные сведения содержатся в документации.

Как я понял, устаревший режим шифрования был введён в ранних версиях Nextcloud и впоследствии заменён на новый. Однако в хранилище могли остаться файлы со старым (legacy) типом шифрования.

В документации сказано, что найти эти файлы можно командой

occ encryption:scan:legacy-format

или более полный вариант

sudo -u www-data php /usr/share/nginx/nextcloud/occ encryption:scan:legacy-format

В процессе сканирования occ начнёт искать файлы со старым типом шифрования или если в базе такие файлы отсутствуют, выдаст предупреждение, «does not have a proper header«.

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

После этого в файле config.php можно отключить поддержку устаревшего формата шифрования, удалив строку

'encryption.legacy_format_support' => true,

или, выставив значение false вместо true

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

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

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

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

Таким образом, опция trusted_proxies исправляет проблему «Заголовки обратного прокси настроены неправильно, либо вы подключены к серверу Nextcloud через доверенный прокси«

Ещё одно уведомление

Заголовок HTTP «X-Frame-Options» не настроен на значение «SAMEORIGIN».

Это потенциальная проблема безопасности для устранения которой рекомендуется задать этот параметр.

Для этого добавьте в файл конфигурации nginx на стороне nextcloud следующее содержимое в секцию server

add_header X-Frame-Options "SAMEORIGIN";

Веб-сервер не настроен должным образом для разрешения «/.well-known/caldav». .

Дополнительная информация может быть найдена в нашей документации

В конфиге nextcloud в статье есть строки с настройкой доступа к этому пути. Для удобства повторю тут

 location = /.well-known/carddav {
         return 301 $scheme://$host/remote.php/dav;
     }

     location = /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
     }

Новый dashboard

Следующая опция для тех, кто обновился до 20 версии и при заходе на главную облака видит новый dashboard вместо знакомого списка файлов.

Исправляется просто добавлением в файл config.php следующей строки

'defaultapp' => 'files',

Устаревшее шифрование

Задействован устаревший режим шифрования файлов на стороне сервера.

Рекомендуется отключить такое шифрование. Более подробные сведения содержатся в документации

TBC

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

  1. джамшут

    Добрый день.

    у меня связка nginx реверс прокси и nginx на сервере.

    Добавьте в статью еще про эти проблемы. Специфичны, но очень актуальны. Заголовки обратного прокси настроены неправильно, либо вы подключены к серверу Nextcloud через доверенный прокси. Если Nextcloud открыт не через доверенный прокси, то это проблема безопасности, которая может позволить атакующему подделать IP-адрес, определяемый сервером Nextcloud. Дополнительная информация содержится в документации.
    Заголовок HTTP «X-Frame-Options» не настроен на значение «SAMEORIGIN». Это потенциальная проблема безопасности для устранения которой рекомендуется задать этот параметр.
    Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «15552000» секунд. Для улучшения безопасности рекомендуется включить HSTS согласно нашим подсказкам по безопасности ↗.

    Веб-сервер не настроен должным образом для разрешения «/.well-known/caldav». Дополнительная информация может быть найдена в нашей документации.
    Веб-сервер не настроен должным образом для разрешения «/.well-known/carddav». Дополнительная информация может быть найдена в нашей документации.

    За конфигами и доп. информацией, напишите мне на мыло. Спасибо.

  2. Кирилл

    Доброго времени суток!
    В вебинтерфейсе недоступна функция расшаривания файлов. В мобильном и десктопном приложенияx эта функция работает. Возможно какое-то приложение лишнее установил… Есть идеи что это может быть?

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

      Самая первая идея — попробовать с другого браузера (если чистка кеша не помогла). Ну а затем отключать недавно установленные приложения. Функция расшаривания встроенная и маловероятно, что её можно «сломать» установкой приложений. К тому же в приложениях всё работает, значит дело не в Nextcloud.

      1. Кирилл

        Спасибо вам, что откликнулись на мой вопрос!
        Я пробовал другие браузеры с отключенными дополнениями, поочерёдное отключение приложений nextcloud и к сожалению это не дало результата. Зато я обнаружил, что функция расшаривания появляется, когда я в настройках аккаунта переключаю локализацию языка с русского на английский, т. е. в англоязычной версии меню расшаривания появляется и работает.

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

          Значит бага текущей установки. В обсуждениях пишут, что помогает обновление Nextcloud, отключение adblock’а и прочее. На крайний случай можно переустановить Nextcloud с нуля, и вернуть данные из бэкапа. Тут много неясного

  3. иван

    Мне надо поставить redis для исключения блокировки файлов, но понять не могу как он поможет. можете обьяснить?

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

      Если кратко, то при операциях с файлами в облаке используется база данных, в которую вносятся записи о том, что, как и где редактируется, создаётся и т.п. Если, например, в момент создания большого файла в папке, саму папку захотят переименовать, то для длительной операции создания файла смена имени папки будет иметь печальный эффект. Чтобы этого не произошло в Nextcloud по-умолчанию применяется т.н. схема блокировки для исключения таких нестыковок. Т.е когда файл создаётся, смена имени папки непозволительна и должна быть совершена только после создания файла. Однако, такие операции довольно сильно нагружают саму БД, так как ей туда надо писать отложенные данные и прочее и прочее. Система кеширования memcached не совсем пригодна к использованию в данном сценарии, и поэтому на поле выходит Redis, который все необходимые данные по блокировкам хранит у себя и быстро их кеширует.
      Вот если кратко 🙂
      Инфа отсюда — https://docs.nextcloud.com/server/19/admin_manual/configuration_files/files_locking_transactional.html

      1. Кирилл

        Сегодня, 26.10.2020, получил уведомление о выходе обновления Nextcloud v.20.0.01. Обновился с версии v.20. Одновременно с обновлением было уведомление об отключении не поддерживаемых приложений: cheksum, Draw.io, Extract, GeoBlocker, Nextant, Ransomware recovery. После обновление «расшаривание файлов» в русскоязычной версии заработало, вышеуказанные приложения тоже работаю.

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

          Ну как я и говорил, помогло обновление. 🙂 Возможно, во внутренней системе кеширования могло что-то «забуксовать».
          P.S. Система комментирования неудобная что ли, если поглядеть, что ответ совсем в другой ветке?

  4. Мужчина

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

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

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

  5. Владимир

    Добрый день!
    У меня не выходит из режима технического обслуживания.
    при вводе команды
    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’а и веб-сервера.
          Или снести всё и поставить заново 🙂
          Или сделать бэкап и перенести на новую платформу\систему.

  6. Святослав

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

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

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

  7. Олег

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

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

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