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

Обновлено Обновлено: Опубликовано Опубликовано:

Nextcloud — облачный сервис для организации доступа к данным. Это веб-приложение и для своей работы требует настроенного веб-сервера. В данной инструкции мы рассмотрим процесс настройки сервиса в связке в Apache. Если нам понадобится NGINX, переходим к инструкции Установка и настройка Nextcloud + NGINX на Ubuntu.

Подготовка к установке

Прежде чем перейти к установке и настройке компонентов nextcloud, выполним предварительные действия.

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

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

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

  1. Дистрибутиву и версии операционной системы.
  2. СУБД.
  3. Вариантам веб-сервера.
  4. Версии PHP.

Мы можем выбрать из вариантов версий и компонентов, но разработчики рекомендуют остановить свой выбор на конкретных пунктах, которые они выделили полужирным и сделали отметку (recommended). На момент обновления данной инструкции актуальная версия Nextcloud была 26 с рекомендованными требованиями:

  • Ubuntu 22.04 LTS.
  • MySQL 8.0+ or MariaDB 10.2/10.3/10.4/10.5/10.6.
  • Apache 2.4.
  • PHP 8.2.

Именно эти компоненты и будут использоваться в данной инструкции.

Настройка времени

Чтобы мы могли видеть правильную метку времени создания и изменения файлов, необходимо, чтобы время было корректным на сервере.

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

apt install chrony

... и запускаем ее:

systemctl enable chrony

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

timedatectl set-timezone Europe/Moscow

* в данном примере московское время.

Брандмауэр

По умолчанию в Ubuntu не требуется открывать порты, так как брандмауэр разрешает все. Но если в вашем случае действует запрещающая политика, открываем веб-порты 80 и 443:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

iptables -I INPUT -p tcp --dport 443 -j ACCEPT

Для сохранения правил используем iptables-persistent:

apt install iptables-persistent

netfilter-persistent save

Сервер баз данных

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

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

apt install mariadb-server-10.6

* обратите внимание, что мы устанавливаем конкретную версию (10.6). Дело в том, что в репозитории MariaDB может быть версия свежее той, что требуется для Nextcloud. В результате мы получим ошибку, когда перейдем к установке портала. Поэтому мы берем саму последнюю версию из системных требований и подставляем ее при установке.

Если во время установки нужной версии mariadb система вернет ошибку:

Для пакета «mariadb-server-10.6» не найден кандидат на установку

... необходимо подключить репозиторий. Для этого прочитайте раздел Подключение актуального репозитория инструкции Установка MariaDB-server на Rocky Linux или Ubuntu.

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

mysql

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

Создаем пользователя и даем ему привилелении на созданную базу: 

> CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'nextcloud'; 

> GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost;

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

> quit

Веб-сервер + PHP

Как было сказано выше, для Nextcloud необходим веб-сервер. Само приложение написано на языке PHP и также требуется одноименный интерпретатор.

Apache

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

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

apt install apache2

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

vi /etc/apache2/sites-enabled/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 ssl/cert.pem
    SSLCertificateKeyFile 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 — каталог с порталом. В него мы распакуем исходники.

Разрешаем модули:

a2enmod ssl rewrite headers env dir mime

* где:

  • ssl — поддержка шифрования.
  • rewrite — модуль, позволяющий выполнять перенаправления на уровне apache.
  • headers — позволяет менять заголовки при http-ответах.
  • env — управление системными переменными, которые используются другими модулями Apache.
  • dir — для поиска скрипта по умолчанию и отображения файлов в каталоге.
  • mime — назначает метаданные при ответах.

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

mkdir /etc/apache2/ssl

cd /etc/apache2/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 restart apache2

PHP

На момент последнего обновления инструкции, рекомендовалось установить PHP версии 8.2. Для дальнейшего удобства работы, мы сохраним ее в переменную:

export PHP_VER=8.2

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

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 libapache2-mod-fcgid php-gmp php-bcmath libmagickcore-6.q16-6-extra

б) Если рекомендованной PHP версии в репозитории нет, переходим к инструкции Установка разных версий PHP на Linux Ubuntu. Устанавливаем PHP нужной версии, а после расширения:

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 libapache2-mod-fcgid php${PHP_VER}-gmp php${PHP_VER}-bcmath libmagickcore-6.q16-6-extra

После установки PHP и расширений, выполним несколько настроек.

Разрешаем в Apache модули для fcgi и php-fpm:

a2enmod proxy_fcgi setenvif

a2enconf php${PHP_VER}-fpm

Настраиваем php.ini:

vi /etc/php/${PHP_VER}/fpm/php.ini

opcache.enable_cli=1
...
opcache.interned_strings_buffer=32
...
opcache.revalidate_freq=1
...
memory_limit = 512M

* где ${PHP_VER} в пути в файлу — версия установленного PHP.

Посмотреть версию PHP можно командой:

php -v

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

systemctl restart apache2 php${PHP_VER}-fpm

Установка Nextcloud

Устанавливаем дополнительные пакеты:

apt install wget unzip

где:

  • wget — для загрузки файлов.
  • unzip — для распаковки архива.

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

cd /tmp

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

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

* при необходимости скачать другую версию Nextcloud, переходим по ссылке download.nextcloud.com/server/releases.

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

unzip latest.zip

* если мы загрузили не последнюю версию nextcloud, то имя файла будет другим.

И переносим содержимое архива в каталог /var/www:

mv nextcloud /var/www

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

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

Открываем браузер и переходим по адресу https://nextcloud.dmosk.ru, где nextcloud.dmosk.ru — адрес облачного сервиса, который мы прописали в настройках apache.

Задаем логин и пароль для администратора. В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим в качестве логина, пароля и базы nextcloud.

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

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

Оптимизируем работу базы данных:

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

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

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

Добавляем:

...
'default_phone_region' => 'RU',

Настройка кэширования

В общих сведениях настроек nextcloud мы получим предупреждение, если не настроим кэширование.

Сначала устанавливаем memcached и php-apcu:

apt install memcached php-memcached php-apcu

Если мы устанавливали не нативную версию PHP, то наша команда будет:

apt install memcached php${PHP_VER}-memcached php${PHP_VER}-apcu

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached

systemctl start memcached

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

systemctl restart apache2

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

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

Добавляем:

...
  'filelocking.enabled' => true,
  'memcache.locking' => '\\OC\\Memcache\\Memcached',
  'memcache.local' => '\OC\Memcache\Memcached',
  'memcache.distributed' => '\OC\Memcache\Memcached',
  'memcached_servers' => [
     [ '127.0.0.1', 11211 ],
  ],
...

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

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

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

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

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

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

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

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

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

apt install cron

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

crontab -e -uwww-data

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

Тюнинг после установки

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

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

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

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

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

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

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

1. Не указан регион размещения этого сервера Nextcloud

Для решения проблемы открываем конфигурационный файл nextcloud:

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

Добавляем:

...
'default_phone_region' => 'RU',

Загрузка больших объемов

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

vi /etc/php/${PHP_VER}/fpm/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 apache2

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

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

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

Некоторые полезные приложения

В данном разделе рассмотрим некоторые приложения, которые могут оказаться полезными и расширят возможности Nextcloud.

1. Офисные пакеты

У нас есть возможность редактировать офисные документы (на подобие doc и xls) онлайн, не мешая нескольким сотрудникам работать с одними и теми же файлами одновременно. Для расширения функциональной возможности используются специальные приложения. Наиболее распространенные:

1. Collabora Office.

2. OnlyOffice.

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

2. Антивирус

Для защиты данных от вирусов можно использовать приложение «Antivirus for files». Его работа основана на антивирусе ClamAV. Сначала в систему нужно установить его:

apt install clamav clamav-daemon

Так как обновления clamav заблокированы для российских IP-адресов, открываем файл:

vi /etc/clamav/freshclam.conf

Комментируем строки, которые начинаются на ##DatabaseMirror

##DatabaseMirror ...
##DatabaseMirror ...

Добавляем строку:

PrivateMirror https://packages.microsoft.com/clamav/

Останавливаем службу clamav-freshclam:

systemctl stop clamav-freshclam

Удаляем старую информацию об обновлениях:

rm -f /var/lib/clamav/freshclam.dat

Запускаем обновление:

freshclam

Ждем обновления, после перезапускаем службы clamav-freshclam и clamav-daemon:

systemctl restart clamav-freshclam clamav-daemon

Само приложение Antivirus for files можно установить из командной строки:

sudo -u www-data php /var/www/nextcloud/occ app:install files_antivirus

Теперь переходим в веб-интерфейс Nextcloud и в параметрах сервера кликаем по Безопасность:

Переходим в настройках в раздел Безопасность

В разделе «Антивирус для Файлов» выставляем необходимые настройки:

Настраиваем антивирус для Nextcloud

* в моем примере проверка выполняется при обращении к службе clamav. Также мы предпочли сразу удалять зараженный файл (на выбор также предлагается просто записывать событие в журнал).

Работа с пользователями из 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 встроена система безопасноти, которая считает количество неудачных попыток входа в систему. Если для определенного адреса данное количество превысило допустимую норму, то облако будет блокировать вход в систему на некоторое время для защиты от взлома.

Решение: данные о неудачных попытках подключиться к Nextcloud хранятся в базе данных, таблице oc_bruteforce_attempts.

В нашем примере мы использовали базу MySQL. Подключимся к ней:

mysql -uroot -p

Выберем для работы базу nextcloud:

> use nextcloud

Вывести список всех неудачных попыток можно командой:

> select * from oc_bruteforce_attempts;

На его основе можно попробовать сделать выводы, откуда приходят попытки выторизоваться и под каким пользователем идут попытки входа в систему. Это могут быть целенаправленные попытки взломать систему, или у пользователя может быть изменен пароль, а приложение, установленное на компьютер делает попытки подключения со старыми аутентификационными данными.

Чтобы быстро решить проблему, мы можем почистить таблицу командой:

> truncate oc_bruteforce_attempts;

# Ubuntu # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет