Используемые термины: Nextcloud , NGINX , Ubuntu .
Рассмотренные примеры подойдут для Linux Ubuntu версий 18, 20 и 22.
Подготовка системы
Настройка сервера баз данных
Установка и настройка веб-сервера
Установка Nextcloud
Тюнинг системы после установки
Работа с пользователями из командной строки
Подключение папки как сетевой диск
На Windows
В Linux
Дополнительные настройки
Решение возможных проблем
Читайте также
Подготовка системы
Выполним предварительную настройку, прежде чем начать развертывание Nextcloud.
1. Обновляем списки пакетов.
Актуализируем списки пакетов в репозиториях, чтобы установки проходили без ошибок:
apt update
При желании, мы также можем обновить пакеты:
apt upgrade
2. Синхронизируем время.
Устанавливаем утилиту chrony:
apt install chrony
Выставляем нужный часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере московское время.
Разрешаем запуск демона chrony:
systemctl enable chrony
3. Настройка брандмауэра.
По умолчанию в системах на базе Deb нет запрещающих правил в брандмауэре и нам ничего не нужно делать дополнительно. Но если в вашем случае настроен и используется брандмауэр на сервере, необходимо открыть порты 80 и 443.
Выполняем команды:
iptables -I INPUT -p tcp —dport 80 -j ACCEPT
iptables -I INPUT -p tcp —dport 443 -j ACCEPT
Сохраним правила с помощью netfilter-persistent:
apt install iptables-persistent
netfilter-persistent save
Настройка сервера баз данных
В качестве СУБД используем MariaDB.
Устанавливаем:
apt install mariadb-server
Разрешаем автозапуск и стартуем сервис:
systemctl enable mariadb
systemctl start mariadb
Задаем пароль для суперпользователя 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’;
> q
Установка и настройка веб-сервера
PHP
Перед тем, как устанавливать php, стоит изучить системные требования Nextcloud . Для корректной работы нужно установить рекомендуемую версию PHP.
На момент последнего обновления инструкции, рекомендовалось установить PHP версии 8.1. Для дальнейшего удобства работы, мы сохраним ее в переменную:
export PHP_VER=8.1
Посмотреть, какая версия будет установлена из репозитория системы можно командой:
apt search —names-only ‘^php[.0-9]{3}$’
а) Если она соответствует рекомендации Nextcloud, вводим команду для установки PHP, PHP-FPM и необходимых расширений:
apt install php php-fpm php-common php-zip php-xml php-intl php-gd php-mysql php-mbstring php-curl php-imagick
б) Если рекомендованной PHP версии в репозитории нет, переходим к инструкции Установка разных версий PHP на Linux Ubuntu . А для установки расширений используем команду:
apt install php${PHP_VER}-fpm php${PHP_VER}-common php${PHP_VER}-zip php${PHP_VER}-xml php${PHP_VER}-intl php${PHP_VER}-gd php${PHP_VER}-mysql php${PHP_VER}-mbstring php${PHP_VER}-curl php${PHP_VER}-imagick php${PHP_VER}-gmp php${PHP_VER}-bcmath libmagickcore-6.q16-6-extra
* где PHP_VER — ранее определенная нами переменная с рекомендованной версией PHP.
Установка php завершена и можно перейти к ее настройке.
Настраиваем php-fpm:
vi /etc/php/${PHP_VER}/fpm/pool.d/www.conf
* путь к данной папке зависит от установленной версии php. В данном примере это 8.1 (задана через переменную PHP_VER ).
Снимаем комментарии со следующей строки:
env[PATH] = /usr/local/bin:/usr/bin:/bin
Настраиваем php.ini:
vi /etc/php/${PHP_VER}/fpm/php.ini
opcache.enable_cli=1
opcache.interned_strings_buffer=32
opcache.revalidate_freq=1
Разрешаем автозапуск php-fpm и перезапускаем его:
systemctl enable php${PHP_VER}-fpm
systemctl restart php${PHP_VER}-fpm
NGINX
Nextcloud можно развернуть на NGINX или Apache. В данной инструкции будем использовать первый.
Устанавливаем веб-сервер:
apt install nginx
Создаем виртуальный домен и настраиваем его для работы с облачным сервисом:
vi /etc/nginx/sites-enabled/nextcloud.conf
server {
listen 80;
listen 443 ssl;
server_name nextcloud.remontka.com;
if ($scheme = ‘http’) {
return 301 https://$host$request_uri;
}
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 ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location = /.well-known/webfinger { return 301 /index.php/.well-known/webfinger; }
location = /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; }
location ^~ /.well-known{ return 301 /index.php/$uri; }
try_files $uri $uri/ =404;
}
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 ^(/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/php8.1-fpm.sock;
}
location ~* ^.+.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires modified +30d;
access_log off;
}
}
* где:
- nextcloud.remontka.com — домен, на котором будет работать сервис;
- /etc/nginx/ssl — каталог, в котором будут храниться сертификаты;
- /var/www/nextcloud — каталог с порталом.
- fastcgi_pass — обработчик скриптов. В нашем примере используется php-fpm. Обратите внимание, что путь до сокетного файла будет зависить от версии PHP.
Создаем каталог для хранения сертификатов и переходим в него:
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 .
В нашем примере мы запустили nextcloud с использованием самоподписанного сертификата. Для продуктивной среды рекомендуется использовать купленный сертификат или бесплатный от Let’s Encrypt .
После установки php мог установиться и запуститься apache. Отключаем его:
systemctl stop apache2
systemctl disable apache2
Проверяем конфигурацию nginx и перезапускаем сервис:
nginx -t
systemctl restart nginx
Разрешаем автозапуск:
systemctl enable nginx
Установка Nextcloud
Устанавливаем пакет unzip:
apt install unzip
На странице nextcloud можно ознакомиться с возможными вариантами загрузки портала. Мы же возьмем последнюю версию.
Переходим во временную папку и скачиваем исходник:
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
Распаковываем скачанный архив:
unzip latest.zip
И переносим содержимое архива в каталог /var/www :
mv nextcloud /var/www
Задаем права доступа:
chown -R www-data:www-data /var/www/nextcloud
Открываем браузер и переходим по адресу https://nextcloud.remontka.com , где nextcloud.remontka.com — адрес облачного сервиса.
Задаем логин и пароль для администратора. В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим в качестве логина, пароля и базы nextcloud .
Завершаем установку.
Оптимизируем работу базы данных:
sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
Тюнинг после установки
Для корректной работы системы выполним дополнительную настройку. После входа в nextcloud под администратором, переходим в настройки для пользователя:
В разделе «Параметры сервера» переходим в Основные сведения :
В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем:
Рассмотрим процесс решения некоторых из них.
1. Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ
Открываем на редактирование файл:
vi /etc/php/${PHP_VER}/fpm/php.ini
Меняем настройку для memory_limit:
memory_limit = 512M
Перезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpm
2. В системе не установлены рекомендуемые модули PHP
Данная ошибка устраняется в зависимости от списка модулей, которых не хватает системе. Чаще всего, подходит команда:
dnf install php-<название модуля>
Например:
apt install php-gmp php-bcmath
После перезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpm
3. Не настроена система кеширования
Для решения проблемы мы должны установить и настроить одно из средств кэширования:
- APCu
- Redis
- Memcached
Мы рассмотрим два последних варианта.
Redis
Устанавливаем сам Redis Server и модуль php:
apt install redis-server php-redis
* в случае установки сервера Redis на отдельный сервер, необходимо выполнить на сервере Nextcloud только установку php-redis .
Если версия PHP не нативная для системы, то команда будет такой:
apt install redis-server php${PHP_VER}-redis
Перезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpm
Открываем конфигурационный файл для nextcloud:
vi /var/www/nextcloud/config/config.php
И добавим:
‘memcache.local’ => ‘\OC\Memcache\Redis’,
‘memcache.distributed’ => ‘\OC\Memcache\Redis’,
‘memcache.locking’ => ‘\OC\Memcache\Redis’,
‘redis’ =>
array (
‘host’ => ‘localhost’,
‘port’ => 6379,
),
Готово.
Memcached
Выполняем установку модуля для php и сам сервис memcached:
apt install memcached php-memcached
Если версия PHP не нативная для системы, то команда будет такой:
apt install memcached php${PHP_VER}-memcached
После разрешаем его автозапуск:
systemctl enable memcached
Перезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpm
После этого открываем конфигурационный файл для nextcloud:
vi /var/www/nextcloud/config/config.php
И добавим:
…
‘memcache.local’ => ‘\OC\Memcache\Memcached’,
‘memcache.distributed’ => ‘\OC\Memcache\Memcached’,
‘memcached_servers’ =>
array (
0 =>
array (
0 => ‘localhost’,
1 => 11211,
),
),
…
4. Не указан регион размещения этого сервера Nextcloud
Для решения проблемы открываем конфигурационный файл nextcloud:
vi /var/www/nextcloud/config/config.php
Добавляем:
…
‘default_phone_region’ => ‘RU’,
Работа с пользователями из UNIX-Shell
В состав nextcloud входит php-скрипт occ, с помощью которого можно управлять сервисом из командной строки Linux.
Добавление пользователя
Создать нового пользователя можно командой:
sudo -u www-data php /var/www/nextcloud/occ user:add admin
* где admin — имя учетной записи.
Сброс пароля
При необходимости сбросить пароль пользователя, можно воспользоваться командой:
sudo -u www-data php /var/www/nextcloud/occ user:resetpassword admin
* где admin — учетная запись пользователя, чей пароль хотим сбросить.
Подключение папки nextcloud по webdav
Мы можем подключить пользовательские данные nextcloud в качестве сетевого диска или раздела. Рассмотрим процесс для Windows и Linux.
Windows
Для начала необходимо включить службу «Веб-клиент». Для этого открываем от администратора командную строку и вводим команды:
sc config webclient start= auto
net start webclient
* первая команда включит автозапуск службы; вторая — запустит ее.
После открываем командную строку от пользователя и создаем сетевой диск командой:
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.
Ограничение на копирование файла с webdav
В Windows при попытке скопировать большой файл с папки webdav, мы можем получить ошибку «Ошибка 0x800700DF: Размер файла превышает установленное ограничение, сохранение файла невозможно.»:
Для решения проблемы необходимо на клиенте разрешить больший объем для загрузки файлов. Это делается в реестре — ветка HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWebClientParameters , параметр FileSizeLimitInBytes . Для примера, если задать значение 4294967295 (максимально возможное), то мы получим ограничение в 4 Гб.
Также можно воспользоваться командой:
reg add «HKLMSYSTEMCurrentControlSetServicesWebClientParameters» /v FileSizeLimitInBytes /t REG_DWORD /d 4294967295 /f
* команду нужно запускать в консоли, запущенной от администратора. В данном примере мы задаем также ограничение в 4 Гб.
Linux
Установим клиент davfs2. Действия будут немного различаться в зависимости от дистрибутива Linux.
а) Ubuntu / Debian:
apt install davfs2
б) CentOS / Red Hat:
yum install davfs2
Теперь мы можем примонтировать
mount -t davfs -o noexec https://nextcloud.remontka.com/remote.php/webdav /mnt
* в данном примере мы запустим команду на монтирование раздела по webdav в каталог /mnt . Обращение выполняется на наш сервер nextcloud.remontka.com .
После ввода команды, система попросит нас ввести логин и пароль от учетной записи Nextcloud:
Username: user
…
Password:
После каталог будет примонтирован.
Для постоянного монтирования серез fstab, открываем файл:
vi /etc/fstab
Добавляем строчку:
https://nextcloud.remontka.com/remote.php/webdav/ /mnt davfs user,rw,_netdev 0 0
После открываем файл:
vi /etc/davfs2/secrets
И добавляем строку:
/mnt user password
* где /mnt — предполагаемый каталог, куда мы будем монтировать данные; user и password — логин и пароль от учетной записи в Nextcloud.
Монтируем каталог командой:
mount -a
Дополнительные настройки
Рассмотрим некоторые дополнительные настройки в Nextcloud.
Защита от брут-форс атак
Данная возможность позволяет блокировать подключения от IP-адресов, с которых было совершено слишком много неудачных попыток войти в систему. Рассмотрим возможность изменения числа неудачных попыток или отключения возможности.
Число попыток
Текущее значени для числа попыток ввода пароля можно посмотреть командой:
sudo -u www-data php /var/www/nextcloud/occ config:system:get brute-force-attempts
Если она вернет пустое значение, значит используется значение по умолчанию — 10.
Чтобы его изменить, открываем конфигурационный файл:
vi /var/www/nextcloud/config/config.php
Добавляем:
‘brute-force-attempts’ => 50,
* в данном примере мы разрешили ввести неправильно пароль 50 раз, после чего будет активирована защита.
Отключение
Если по какой-либо причине нам не нужна эта функция и мы хотим ее отключить, открываем конфигурационный файл:
vi /var/www/nextcloud/config/config.php
Добавляем строку:
‘auth.bruteforce.protection.enabled’ => false,
Готово.
Возможные проблемы
Превышено количество запросов
На странице аутентификации мы можем увидеть сообщение об ошибке Превышено количество запросов . При этом, мы не можев войти в систему.
Причина: в Nextcloud встроена система безопасноти, которая считает количество неудачных попыток входа в систему. Если для определенного адреса данное количество превысило допустимую норму, то облако будет блокировать вход в систему на некоторое время для защиты от взлома.
Решение: данные о неудачных попытках подключиться к Nextcloud хранятся в базе данных, таблице oc_bruteforce_attempts.
В нашем примере мы использовали базу MySQL. Подключимся к ней:
mysql -uroot -p
Выберем для работы базу nextcloud:
> use nextcloud
Вывести список всех неудачных попыток можно командой:
> SELECT * FROM oc_bruteforce_attempts;
На его основе можно попробовать сделать выводы, откуда приходят попытки выторизоваться и под каким пользователем идут попытки входа в систему. Это могут быть целенаправленные попытки взломать систему, или у пользователя может быть изменен пароль, а приложение, установленное на компьютер делает попытки подключения со старыми аутентификационными данными.
Чтобы быстро решить проблему, мы можем почистить таблицу командой:
> truncate oc_bruteforce_attempts;
Или можно удалить конкретный адрес:
> DELETE FROM oc_bruteforce_attempts WHERE ip = ‘1.2.3.4’;
Читайте также
Эти статьи также могут быть полезны:
1. Установка и настройка локального сервера Collabora и его связка с Nextcloud/Owncloud