Categories: Шпаргалки

Установка и настройка Nextcloud + NGINX на Ubuntu

Используемые термины: Nextcloud , NGINX , Ubuntu .

Рассмотренные примеры подойдут для Linux Ubuntu версий 18, 20 и 22.

Подготовка системы

Выполним предварительную настройку, прежде чем начать развертывание 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

2. Настройка интеграции Nextcloud с LDAP

3. Установка и настройка Nextcloud + Apache на Ubuntu

admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago