После установки 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
Добрый день.
у меня связка nginx реверс прокси и nginx на сервере.
Добавьте в статью еще про эти проблемы. Специфичны, но очень актуальны. Заголовки обратного прокси настроены неправильно, либо вы подключены к серверу Nextcloud через доверенный прокси. Если Nextcloud открыт не через доверенный прокси, то это проблема безопасности, которая может позволить атакующему подделать IP-адрес, определяемый сервером Nextcloud. Дополнительная информация содержится в документации.
Заголовок HTTP «X-Frame-Options» не настроен на значение «SAMEORIGIN». Это потенциальная проблема безопасности для устранения которой рекомендуется задать этот параметр.
Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «15552000» секунд. Для улучшения безопасности рекомендуется включить HSTS согласно нашим подсказкам по безопасности ↗.
Веб-сервер не настроен должным образом для разрешения «/.well-known/caldav». Дополнительная информация может быть найдена в нашей документации.
Веб-сервер не настроен должным образом для разрешения «/.well-known/carddav». Дополнительная информация может быть найдена в нашей документации.
За конфигами и доп. информацией, напишите мне на мыло. Спасибо.
Доброго времени суток!
В вебинтерфейсе недоступна функция расшаривания файлов. В мобильном и десктопном приложенияx эта функция работает. Возможно какое-то приложение лишнее установил… Есть идеи что это может быть?
Самая первая идея — попробовать с другого браузера (если чистка кеша не помогла). Ну а затем отключать недавно установленные приложения. Функция расшаривания встроенная и маловероятно, что её можно «сломать» установкой приложений. К тому же в приложениях всё работает, значит дело не в Nextcloud.
Спасибо вам, что откликнулись на мой вопрос!
Я пробовал другие браузеры с отключенными дополнениями, поочерёдное отключение приложений nextcloud и к сожалению это не дало результата. Зато я обнаружил, что функция расшаривания появляется, когда я в настройках аккаунта переключаю локализацию языка с русского на английский, т. е. в англоязычной версии меню расшаривания появляется и работает.
Значит бага текущей установки. В обсуждениях пишут, что помогает обновление Nextcloud, отключение adblock’а и прочее. На крайний случай можно переустановить Nextcloud с нуля, и вернуть данные из бэкапа. Тут много неясного
Мне надо поставить redis для исключения блокировки файлов, но понять не могу как он поможет. можете обьяснить?
Если кратко, то при операциях с файлами в облаке используется база данных, в которую вносятся записи о том, что, как и где редактируется, создаётся и т.п. Если, например, в момент создания большого файла в папке, саму папку захотят переименовать, то для длительной операции создания файла смена имени папки будет иметь печальный эффект. Чтобы этого не произошло в Nextcloud по-умолчанию применяется т.н. схема блокировки для исключения таких нестыковок. Т.е когда файл создаётся, смена имени папки непозволительна и должна быть совершена только после создания файла. Однако, такие операции довольно сильно нагружают саму БД, так как ей туда надо писать отложенные данные и прочее и прочее. Система кеширования memcached не совсем пригодна к использованию в данном сценарии, и поэтому на поле выходит Redis, который все необходимые данные по блокировкам хранит у себя и быстро их кеширует.
Вот если кратко 🙂
Инфа отсюда — https://docs.nextcloud.com/server/19/admin_manual/configuration_files/files_locking_transactional.html
Сегодня, 26.10.2020, получил уведомление о выходе обновления Nextcloud v.20.0.01. Обновился с версии v.20. Одновременно с обновлением было уведомление об отключении не поддерживаемых приложений: cheksum, Draw.io, Extract, GeoBlocker, Nextant, Ransomware recovery. После обновление «расшаривание файлов» в русскоязычной версии заработало, вышеуказанные приложения тоже работаю.
Ну как я и говорил, помогло обновление. 🙂 Возможно, во внутренней системе кеширования могло что-то «забуксовать».
P.S. Система комментирования неудобная что ли, если поглядеть, что ответ совсем в другой ветке?
Так вы же в первом своем посте про установку Некстклауда писали, что ставите mariadb. А теперь уже mysql. В чем соль? Разонравилась Мария?
Возможно, я некорректно описал, что происходило. В мануале от разрабов, у них сначала идут шаги для MySQL, а уже потом для MariaDB. Я на это благополучно забил, и получил кучу ошибок. Поэтому прежде надо читать всё, а потом уже делать 🙂
Поэтому здесь в тексте сначала идёт инструкция для подготовки базы MariaDB, а уже потом (если у вас каким-то случайным образом появился MySQL) идут шаги для, так сказать, общего случая, который применим и к MariaDB и к MySQL.
Сама админка Nextcloud пишет про MySQL в любом случае.
P.S. С базами данных я плотно не общаюсь, поэтому и разонравиться они мне не могут 🙂
Добрый день!
У меня не выходит из режима технического обслуживания.
при вводе команды
sudo -u www-data php /path/to/nextcloud/occ maintenance:mode —off
пишет
Could not open input file: /path/to/nextcloud/occ
Все настраивал по вашим гайдам.
/path/to/nextcloud/occ — это путь к установленному nextcloud’у, он может отличаться, но если смотреть по моим статьям, то путь такой — /usr/share/nginx/nextcloud/
P.S. И да, перед off стоят два дефиса
Спасибо. Действительно путь не тот был, как в шапке.
Но после действий про ТО, когда включаю его, то когда захожу на веб интерфейс пишет, что идет ТО.
А когда отключаю, то не могу подключится(ничего не происходит).
И если опять включу в true, то через какое-то время пишет, что идет ТО.
Не подскажите в чем может быть дело?
Спасибо Вам большое за ваш труд при написании циклов статей!
Подсказать не могу — причин может быть много. Тут только смотреть в логи nextcloud’а и веб-сервера.
Или снести всё и поставить заново 🙂
Или сделать бэкап и перенести на новую платформу\систему.
Спасибо огромное за Ваш цикл статей по Nextcloud!
Найти в рунете что-то подобное крайне сложно. Современные средства (apt) и доходчивые объяснения. Иногда думается «да нах*й столько блогов расплодилось», а когда приходится решать задачу и ответ находится не на каких-нибудь гигантах, вроде хабра или медиума, а только на таких скромных ресурсах, понимаешь, что сильно ошибался.
Очень приятно, что мои небольшие заметки ценятся и комментируются. Как ни удивительно, но действительно появляется желание писать и дальше 🙂
Сам пользуюсь nextcloud’ом как основным облаком и для бесплатного продукта он очень даже хорош.
Nextcloud крайне удобен для работы, раньше сидели всем офисом на OwnCloud. Но у последнего были проблемы в виде ежедневных зависаний.