Установка и настройка NextCloud на Rocky Linux 8

Данная инструкция протестирована для установки NextCloud версий 2x (Hub 1-4), а также Rocky Linux 8 / CentOS 8. В качестве веб-сервера нами будет использоваться связка NGINX + MariaDB + php-fpm. Мы будем выполнять чистую установку на сервер (без docker).

Подготовка сервера

1. Системные требования

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

  • MariaDB версий 10.3/10.4/10.5/10.6.
  • Nginx с php-fpm.
  • PHP 8.1.

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

2. Правильное время.

Устанавливаем утилиту chrony:

dnf install chrony

Запускаем ее службу:

systemctl enable chronyd —now

Выставляем нужный часовой пояс:

timedatectl set-timezone Europe/Moscow

* в данном примере московское время. Другие зоны также можно найти по пути /usr/share/zoneinfo .

3. Настройка брандмауэра.

Выполняется следующими командами:

firewall-cmd —permanent —add-service={http,https}

firewall-cmd —reload

4. Отключение SELinux.

Для отключения SELinux вводим две команды:

setenforce 0

sed -i «s/SELINUX=enforcing/SELINUX=disabled/» /etc/selinux/config

* первая команда отключает SELinux до перезагрузки, вторая — навсегда.
* подробнее об отключении SELinux . Подробнее о настройке SELinux .

Настройка сервера баз данных

В качестве СУБД используем MariaDB.

Устанавливаем:

dnf install mariadb-server

* обратите внимание, чтобы устанавливалась одна из поддерживаемых версий СУБД. Если же в репозитории системы версия более новая или старая, используйте инструкцию Установка MariaDB-server на Rocky Linux или Ubuntu — раздел Подключение актуального репозитория .

Разрешаем автозапуск и стартуем сервис:

systemctl enable mariadb —now

Задаем пароль для суперпользователя mysql:

mysqladmin -u root password

Подключаемся к MariaDB, создаем базу данных и пользователя:

mysql -uroot -p

> CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

> GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY ‘nextcloud’;

> quit

* данными командами мы создали базу данных nextcloud , затем с таким же названием мы создали пользователя и задали ему пароль nextcloud .

Установка и настройка PHP + PHP-FPM

PHP

По умолчанию, из репозитория Rocky Linux и CentOS 8 может устанавливаться не та версия пакета php. Мы можем посмотреть ее командой:

dnf list available | egrep ^php.x86_64

а) Если версия не соответствует требуемой (на момент обновления инструкции это была 8.1), вводим команды:

dnf module disable php

dnf module enable php:8.1

* мы настроим репозиторий для установки php версии 8.1.

Для установки PHP вводим команду:

dnf install php php-fpm php-pdo php-zip php-dom php-intl php-gd php-mysqli php-mbstring php-json php-process php-bcmath php-gmp php-opcache php-process

PHP-FPM

Сам пакет php-fpm мы установили на предыдущем шаге. Поэтому на данном этапе необходимо его настроить.

Открываем конфигурационный файл:

vi /etc/php-fpm.d/www.conf

Находим опцию listen. Проверяем ее значение:

listen = /run/php-fpm/www.sock

Разрешаем автозапуск php-fpm и запускаем его:

systemctl enable php-fpm —now

Установка и настройка веб-сервера

Мы рассмотрим два варианта установки веб-сервера: NGINX и Apache. Установить нужно что-то одно.

NGINX

Nextcloud можно развернуть на NGINX или Apache. В данной инструкции будем использовать первый.

Устанавливаем веб-сервер:

dnf install nginx

Для правильной работы nextcloud запросы должны идти по https. Для этого создаем виртуальный домен и настраиваем его для работы с облачным сервисом в NGINX:

vi /etc/nginx/conf.d/nextcloud.conf

server {
listen 80;
server_name nextcloud.remontka.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
server_name nextcloud.remontka.com;

ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;

root /var/www/nextcloud;

add_header Strict-Transport-Security «max-age=31536000; includeSubDomains» always;
client_max_body_size 10G;
fastcgi_buffers 64 4K;

rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

index index.php;
error_page 403 = /core/templates/403.php;
error_page 404 = /core/templates/404.php;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location ~ ^/(data|config|.ht|db_structure.xml|README) {
deny all;
}

location / {
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}

location ~ ^(.+?.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS on;
fastcgi_pass unix:/run/php-fpm/www.sock;
}

location ~* ^.+.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires modified +30d;
access_log off;
}
}

* где remontka.com — домен, на котором будет работать сервис; nextcloud.remontka.com — имя сервера, на котором будет работать nextcloud; /etc/nginx/ssl — каталог, в котором будут храниться сертификаты; /var/www/nextcloud — каталог с порталом.

Создаем каталог для хранения сертификатов и переходим в него:

mkdir /etc/nginx/ssl

cd /etc/nginx/ssl

Генерируем сертификат:

openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=nextcloud.remontka.com/CN=nextcloud»

* данная команда создаст сертификат на 4 года для URL nextcloud.remontka.com или nextcloud .
* в данном примере мы, всего лишь, создали самоподписанный сертификат, который не будет приниматься браузером и нужно будет пропускать предупреждение. Данный метод подходит для тестирования, а для продуктивной среды стоит купить сертификат или получить его бесплатно от Let’s Encrypt .

Проверяем конфигурацию nginx, разрешаем его автозапуск и перезапускаем сервис:

nginx -t

systemctl enable nginx —now

Apache

Устанавливаем веб-сервер:

yum install httpd

Создаем виртуальный домен и настраиваем его для работы с облачным сервисом:

vi /etc/httpd/conf.d/nextcloud.conf

<VirtualHost *:80>
Define root_domain nextcloud.remontka.com
ServerName ${root_domain}
Redirect / https://${root_domain}/
</VirtualHost>

<VirtualHost *:443>
Define root_domain nextcloud.remontka.com
Define root_path /var/www/nextcloud

ServerName ${root_domain}
DocumentRoot ${root_path}

SSLEngine on
SSLCertificateFile /etc/httpd/ssl/cert.pem
SSLCertificateKeyFile /etc/httpd/ssl/cert.key

<IfModule mod_headers.c>
Header always set Strict-Transport-Security «max-age=15552000; includeSubDomains; preload»
</IfModule>
<Directory ${root_path}>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

* где:

  • nextcloud.remontka.com — домен, на котором будет работать сервис.
  • ssl/cert.pem — открытый сертификат. Его мы создадим ниже по инструкции.
  • ssl/cert.key — путь до ключа закрытого сертификата. Его мы создадим ниже по инструкции.
  • /var/www/nextcloud — каталог с порталом. В него мы распакуем исходники.

Устанавливаем модулm SSL:

yum install mod_ssl

Создаем каталог для хранения сертификатов и переходим в него:

mkdir /etc/httpd/ssl

cd /etc/httpd/ssl

Генерируем сертификат:

openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=nextcloud.remontka.com/CN=nextcloud»

* данная команда создаст сертификат на 4 года для URL nextcloud.remontka.com или nextcloud .

Для первичного запуска Nextcloud достаточно самоподписанного сертификата. Однако, для продуктивной среду лучше его купить или запросить бесплатный у Let’s Encrypt .

Проверяем конфигурацию apache:

apachectl configtest

… если видим:


Syntax OK

* мы увидим предупреждение Warning: DocumentRoot [/var/www/nextcloud] does not exist . Оно означает, что каталога /var/www/nextcloud не существует. Игнорируем — мы созданим его позже.

Разрешаем автозапуск апача и перезапускаем сервис:

systemctl enable httpd

systemctl restart httpd

Установка Nextcloud

Для загрузки и распаковки архива на нужны следующие пакеты:

dnf install wget unzip

Переходим во временную папку:

cd /tmp

Заходим на сайт nextcloud и копируем ссылку на скачивание последней версии программы:

Копируем ссылку для скачивания последней версии сервера Nextcloud

Скачиваем исходник для установки:

wget https://download.nextcloud.com/server/releases/latest-20.zip

Распаковываем скачанный архив:

unzip latest-*.zip -d /var/www

Задаем права доступа:

chown -R apache:apache /var/www/nextcloud

Открываем браузер и переходим по адресу https://nextcloud.remontka.com , где nextcloud.remontka.com — наш адрес облачного сервиса, который мы создали в NGINX. Если мы используем самоподписанный сертификат, браузер выдаст предупреждение безопасности — игнорируем его и переходим на страницу.

* так как мы настроили виртуальный домен, важно обратиться к серверу, именно, по имени. Таким образом, настроенный узел (в моем случае, nextcloud.remontka.com) должен разрешаться в DNS или быть внесен в локальный файл hosts.

Прописываем логин и пароль администратора, которые хотим использовать для входа, кликаем по Хранилище и база данных :

Создаем пользователя и переходим к настройке хранилища для nextcloud

Переключаемся на MySQL/MariaDB, вводим в качестве логина, пароля и базы nextcloud :

Задаем настройки для подключения к базе данных

Завершаем установку, при желании, оставим галочку для установки рекомендованных приложений:

Завершаем установку Nextcloud

После установки мы окажемся в системе.

Проверка безопасности и параметров

Для корректной работы системы выполним дополнительную настройку системы. После входа в nextcloud под администратором, переходим в настройки для пользователя:

Переходим в настройку Nextcloud

В разделе «Параметры сервера» переходим в Основные сведения :

Переходим к общим сведениям

В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем:

В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем

Рассмотрим процесс решения некоторых из них.

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

Открываем файл php.ini. При нашей установке, это:

vi /etc/php-fpm.d/www.conf

Снимаем комментарий с параметра PATH:

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

Перезапускаем php-fpm:

systemctl restart php-fpm

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

Открываем на редактирование файл:

vi /etc/php.ini

Меняем настройку для memory_limit:

memory_limit = 512M

Перезапускаем php-fpm:

systemctl restart php-fpm

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

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

sudo -u apache php /var/www/nextcloud/occ db:add-missing-indices

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

Выполним команду для преобразования в тип big int:

sudo -u apache php /var/www/nextcloud/occ db:convert-filecache-bigint

На запрос Continue with the conversion отвечаем утвердительно:

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

5. В системе не установлены рекомендуемые модули PHP

Данная ошибка устраняется в зависимости от списка модулей, которых не хватает системе. Чаще всего, подходит команда:

dnf install php-<название модуля>

Установка некоторых модулей может вызвать затрудение. Рассмотрим их установку подробнее.

imagick

Например, imagick в Rocky Linux или CentOS 8 устанавливается по инструкции ниже.

Установим ImageMagick:

dnf install ImageMagick ImageMagick-devel

После устанавливаем пакеты, необходимые для сборки imagick:

dnf install php-devel php-pear make

Собираем imagick:

pecl install imagick

Создаем файл с расширением php:

vi /etc/php.d/20-imagick.ini

extension=imagick.so

Перезапускаем php-fpm или apache:

systemctl restart php-fpm

systemctl restart httpd

sodium

Выполняем команды:

yum install epel-release

yum install php-cli libsodium php-pear php-devel libsodium-devel make

pecl channel-update pecl.php.net

pecl install libsodium

vi /etc/php.d/20-sodium.ini

extension=sodium.so

Перезапускаем php-fpm или apache:

systemctl restart php-fpm

systemctl restart httpd

6. Не загружен модуль OPcache

Устанавливаем модуль opcache командой:

dnf install php-opcache

Открываем конфигурационный файл:

vi /etc/php.d/10-opcache.ini

Редактируем следующее:


opcache.max_accelerated_files=10000

opcache.save_comments=1

opcache.revalidate_freq=1

Перезапускаем php-fpm:

systemctl restart php-fpm

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

Для решения проблемы мы должны установить и настроить одно из средств кэширования:

  • APCu
  • Redis
  • Memcached

Мы рассмотрим последний вариант. Для этого выполняем установку модуля по инструкции Установка и настройка memcached на CentOS .

После этого открываем конфигурационный файл для nextcloud:

vi /var/www/nextcloud/config/config.php

И добавим:


‘memcache.local’ => ‘\OC\Memcache\APCu’,
‘memcache.distributed’ => ‘\OC\Memcache\Memcached’,
‘memcached_servers’ =>
array (
0 =>
array (
0 => ‘localhost’,
1 => 11211,
),
),

Устанавливаем пакет:

yum install php-apcu

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

Выполняем конфигурирование в несколько этапов.

Настройка СУБД

Заходим в оболочку mysql:

mysql -uroot -p

Смотрим значение для переменной innodb_file_format:

> show variables like ‘innodb_file_format’;

Если видим значение «Antelope», меняем его на Barracuda:

> SET GLOBAL innodb_file_format=Barracuda;

Выходим из оболочки:

> quit

Настройка Nextcloud

Переводим Nextcloud в режим обслуживания:

sudo -u apache php /var/www/nextcloud/occ maintenance:mode —on

Перезагружаем mariadb (если на первом шаге нам пришлось менять значение для переменной innodb_file_format):

systemctl restart mariadb

Редактирование базы данных

Снова подключаемся к консоли управления СУБД:

mysql -uroot -p

Меняем кодировку для базы данных:

> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

* где nextcloud — имя созданной нами базы данных.

Выходим из mariadb:

> quit

Также задаем новую кодировку для nextcloud

sudo -u apache php /var/www/nextcloud/occ config:system:set mysql.utf8mb4 —type boolean —value=»true»

Преобразуем все таблицы в базе:

sudo -u apache php /var/www/nextcloud/occ maintenance:repair

Завершаем режим обслужавания:

sudo -u apache php /var/www/nextcloud/occ maintenance:mode —off

Установка и настройка клиента

Для синхронизации файлов установим и настроим клиента. Nextcloud поддерживает установку на Windows, Linux, Mac, iOS и Android.

Переходим на страницу загрузки Nextcloud и скачиваем нужный клиент. После устанавливаем его, отвечая на все вопросы мастера по умолчанию. Для установки клиента на телефон, пользуемся Google Play или Apple App Store.

Запускаем клиентское приложение и переходим к настройке, кликнув по Войти :

Переходим к настройке подключения клиента к серверу

На следующей странице вводим адрес нашего сервера и кликаем по Далее :

Настройка подключения к серверу nextcloud

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

Работа с пользователями из UNIX-Shell

В состав nextcloud входит php-скрипт occ, с помощью которого можно управлять сервисом из командной строки Linux.

Добавление пользователя

Создать нового пользователя можно командой:

sudo -u apache php /var/www/nextcloud/occ user:add admin

* где admin — имя учетной записи.

Сброс пароля

При необходимости сбросить пароль пользователя, можно воспользоваться командой:

sudo -u apache php /var/www/nextcloud/occ user:resetpassword admin

* где admin — учетная запись пользователя, чей пароль хотим сбросить.

Установка приложений

Расширить функциональные возможности программы Nextcloud можно с помощью дополнительных приложений. Для их установки нам нужны права администратора. Кликаем по иконке пользователя — Приложения :

Переходим к приложениям Nextcloud

Слева можно увидеть категории, по которым разбиты приложения:

Приложения Nextcloud разбиты на категории

Для установки нужного приложения просто кликаем под его описанием Скачать и включить .

Настройка почтового сервера

Для отправки уведомлений и возможности отправлять письма с nextcloud необходимо прописать сервер отправки почты. Для этого переходим в настройки и в разделе «Параметры сервера» переходим в Основные параметры :

Переходим к настройкам основных параметров сервера

Для раздела «Почтовый сервер» заполняем поля сервера отправки:

Заполняем поля для настройки почтового сервера

* в данном примере мы указали такие настройки:

  • Способ отправки: сервер smtp с шифрованием через STARTTLS .
  • Отправка будет выполняться от почтового адреса nextcloud@remontka.com .
  • Требуется аутентификация на сервере отправки.
  • Адрес сервера: имя сервера или его IP-адрес, а также порт для подключения по протоколу smtp.
  • При установке галочки о необходимости авторизации, также необходимо указать пользователя и пароль для проверки подлинности.

* в вашем случае настройки могут быть принципиально другими. Их можно уточнить у поставщика почтовых услуг.

После внесения настроек кликаем по Отправить сообщение — если все сделано правильно, мы увидим сообщение «Письмо отправлено».

Отправляем тестовое сообщение

Подключение nextcloud как сетевой диск

Мы можем подключить пользовательские данные nextcloud в качестве сетевого диска. Рассмотрим процесс для Windows.

Для начала необходимо включить службу «Веб-клиент». Для этого открываем от администратора командную строку и вводим команды:

sc config webclient start= auto

net start webclient

* первая команда включит автозапуск службы; вторая — запустит ее.

В серверных операционных системах, по-умолчанию, нет службы Веб-клиент и мы получим ошибку:

[SC] OpenService: ошибка: 1060:

Указанная служба не установлена.

Для решения проблемы открываем PowerShell и вводим команду:

Install-WindowsFeature WebDAV-Redirector

После открываем командную строку от пользователя и создаем сетевой диск командой:

net use <Буква диска>: https://<путь до nextcloud>/remote.php/webdav /user:user password

Например, для нашей настройки:

net use N: https://nextcloud.remontka.com/remote.php/webdav /user:admin password

* где N — буква сетевого диска; nextcloud.remontka.com — адрес нашего сервера; admin — учетная запись, которая была создана при установке системы; password — пароль от пользователя admin.

Ошибка 0x800700DF

В Windows при попытке скопировать большой файл с сетевого диска webdav, мы можем получить ошибку Ошибка 0x800700DF: Размер файла превышает установленное ограничение, сохранение файла невозможно :

Ошибка при скачивании слишком большого файла

Проблема заключается в ограничении со стороны операционной системы Windows. Максимально разрешенный объем составляет, примерно, 50 мб. Для его увеличения необходимо внести изменения в реестре — ветка HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWebClientParameters , параметр FileSizeLimitInBytes . Максимально разрешенное значение 4294967295 (около 4 Гб).

Также можно воспользоваться командой:

reg add «HKLMSYSTEMCurrentControlSetServicesWebClientParameters» /v FileSizeLimitInBytes /t REG_DWORD /d 4294967295 /f

* команду нужно запускать в консоли, запущенной от администратора.

Для применения настройки необходимо перезапустить службу «Веб-клиент» или компьютер.

Выполнение фоновых заданий в cron

После установки Nextcloud фоновые задания выполняются с помощью AJAX при посещении страниц пользователем. Это не позволит выполнять задачи планировщика при отсутствии активности.

Для решения проблемы переходим в настройки:

Переходим в настройку Nextcloud

Кликаем по Основные параметры :

Переходим к основным параметрам в настройках Nextcloud

В разделе «Фоновые задания» выбираем Cron:

Настраиваем фоновые задания в Nextcloud

Идем в консполь,устанавливаем cron:

yum install cron

Cоздаем задание от пользователя www-data:

crontab -e -uapache

* * * * * /usr/bin/php /var/www/nextcloud/cron.php

Работа с большими файлами

При попытке загрузить или скачать файлы большого объема, мы можем столкнуться с проблемами. Рассмотрим процесс настройки сервера, чтобы этого избежать.

Загрузка на сервер (Upload)

Открываем конфигурационный файл PHP:

vi /etc/php.ini

Приводим следующие опции к виду:

upload_max_filesize = 512G

post_max_size = 512G

max_execution_time = 3600

max_input_time = 3600

output_buffering = 0

* где:

  • upload_max_filesize — максимально допустимый размер одного загружаемого файла;
  • post_max_size — максимальный объем отправляемых на сервер данных;
  • max_execution_time — максимальное время работы скрипта. В данном примере, если он не успеет отработать за 3600 секунд, PHP принудительно завершит его работу
  • max_input_time — время в секундах, за которое PHP должен разобрать входные данные GET и POST.
  • output_buffering — ограничение буферизации вывода для всех файлов. В нашем примере отключаем.

Перезапускаем апач:

systemctl restart php-fpm

Задаем новое значение фрагментации загружаемых файлов:

sudo -u apache php /var/www/nextcloud/occ config:app:set files max_chunk_size —value 536870912

* задано значение в 50 Мб.

Скачивание (Download)

Открываем конфигурационный файл nginx:

vi /etc/nginx/conf.d/nextcloud.conf

В раздел server необходимо добавить директиву proxy_max_temp_file_size :

server {

proxy_max_temp_file_size 10240m;

}

* в данном примере будет разрешено скачивать файлы объемом 10 Гб.

Применяем настройки:

nginx -t && nginx -s reload

Настройка логирования

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

vi /var/www/nextcloud/config/config.php

Добавим:


‘log_type’ => ‘file’,
‘logfile’ => ‘nextcloud.log’,
‘loglevel’ => 3,
‘logdateformat’ => ‘F d, Y H:i:s’,

Готово, увидеть лог можно командой:

tail -f /var/www/nextcloud/nextcloud.log

Читайте также

Другие статьи для реализации облачного диска:

1. Установка и настройка Nextcloud на Ubuntu .

2. Установка и настройка OwnCloud на CentOS .

3. Установка и настройка локального сервера Collabora и его связка с Nextcloud/Owncloud .

EnglishRussianUkrainian