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


Данная инструкция протестирована для установки NextCloud версий 2x (Hub 1-4), а также Rocky Linux 8 / CentOS 8. В качестве веб-сервера нами будет использоваться связка NGINX + MariaDB + php-fpm. Мы будем выполнять чистую установку на сервер (без docker).
Подготовка системы
Установка и настройка MariaDB
Установка и настройка PHP + PHP-FPM
Установка и настройка NGINX
Установка Nextcloud
Тюнинг программы после установки
Настройка клиентского приложения
Работа с пользователями из командной строки
Установка дополнительных приложений
Настройка сервера отправки уведомлений
Подключение nextcloud в качестве сетевого диска
Выполнение заданий на cron
Включение лога
Читайте также
Подготовка сервера
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.dmosk.ru;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name nextcloud.dmosk.ru;
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;
}
}
* где dmosk.ru — домен, на котором будет работать сервис; nextcloud.dmosk.ru — имя сервера, на котором будет работать 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.dmosk.ru/CN=nextcloud"
* данная команда создаст сертификат на 4 года для URL nextcloud.dmosk.ru или 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.dmosk.ru
ServerName ${root_domain}
Redirect / https://${root_domain}/
</VirtualHost>
<VirtualHost *:443>
Define root_domain nextcloud.dmosk.ru
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.dmosk.ru — домен, на котором будет работать сервис.
- 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.dmosk.ru/CN=nextcloud"
* данная команда создаст сертификат на 4 года для URL nextcloud.dmosk.ru или 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 и копируем ссылку на скачивание последней версии программы:
Скачиваем исходник для установки:
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.dmosk.ru, где nextcloud.dmosk.ru — наш адрес облачного сервиса, который мы создали в NGINX. Если мы используем самоподписанный сертификат, браузер выдаст предупреждение безопасности — игнорируем его и переходим на страницу.
* так как мы настроили виртуальный домен, важно обратиться к серверу, именно, по имени. Таким образом, настроенный узел (в моем случае, nextcloud.dmosk.ru) должен разрешаться в DNS или быть внесен в локальный файл hosts.
Прописываем логин и пароль администратора, которые хотим использовать для входа, кликаем по Хранилище и база данных:
Переключаемся на MySQL/MariaDB, вводим в качестве логина, пароля и базы 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.
Запускаем клиентское приложение и переходим к настройке, кликнув по Войти:
На следующей странице вводим адрес нашего сервера и кликаем по Далее:
Нас перекинет на веб страницу для авторизации — вводим логин и пароль для пользователя. После успешной авторизации можно использовать клиент для синхронизации с файлов с нашим облаком.
Работа с пользователями из 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 необходимо прописать сервер отправки почты. Для этого переходим в настройки и в разделе «Параметры сервера» переходим в Основные параметры:
Для раздела «Почтовый сервер» заполняем поля сервера отправки:
* в данном примере мы указали такие настройки:
- Способ отправки: сервер smtp с шифрованием через STARTTLS.
- Отправка будет выполняться от почтового адреса nextcloud@dmosk.ru.
- Требуется аутентификация на сервере отправки.
- Адрес сервера: имя сервера или его 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.dmosk.ru/remote.php/webdav /user:admin password
* где N — буква сетевого диска; nextcloud.dmosk.ru — адрес нашего сервера; admin — учетная запись, которая была создана при установке системы; password — пароль от пользователя admin.
Ошибка 0x800700DF
В Windows при попытке скопировать большой файл с сетевого диска webdav, мы можем получить ошибку Ошибка 0x800700DF: Размер файла превышает установленное ограничение, сохранение файла невозможно:
Проблема заключается в ограничении со стороны операционной системы Windows. Максимально разрешенный объем составляет, примерно, 50 мб. Для его увеличения необходимо внести изменения в реестре — ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters, параметр FileSizeLimitInBytes. Максимально разрешенное значение 4294967295 (около 4 Гб).
Также можно воспользоваться командой:
reg add "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v FileSizeLimitInBytes /t REG_DWORD /d 4294967295 /f
* команду нужно запускать в консоли, запущенной от администратора.
Для применения настройки необходимо перезапустить службу «Веб-клиент» или компьютер.
Выполнение фоновых заданий в cron
После установки Nextcloud фоновые задания выполняются с помощью AJAX при посещении страниц пользователем. Это не позволит выполнять задачи планировщика при отсутствии активности.
Для решения проблемы переходим в настройки:
Кликаем по Основные параметры:
В разделе «Фоновые задания» выбираем Cron:
Идем в консполь,устанавливаем cron:
yum install cron
Cоздаем задание от пользователя www-data:
crontab -e -uapache
* * * * * /usr/bin/php /var/www/nextcloud/cron.php
Настройка логирования
Нам может понадобиться включить лог для диагностики и решения проблем. Для этого открываем конфигурационный файл:
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.