Данная статья расскажет, как при наличии собственного сервера на базе Debian или Ubuntu развернуть собственное облачное хранилище.
Подготовка к установке
Установку будем производить на Ubuntu 23. Для начала установим необходимые пакеты: веб-сервер Apache, базу данных MariaDB и различные модули для PHP:
sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-imagick php-zip unzip php-ldap php-imagick imagemagick
Сейчас мы установили пакеты для базовой инсталляции Nextcloud. Если вы будете устанавливать дополнительные приложения (аддоны), то для них могут потребоваться дополнительные пакеты. Перед установкой приложений читайте их требования и устанавливайте пакеты при необходимости.
Nextcloud хранит большинство своих настроек в базе данных. Поэтому создадим БД и пользователя, а Nextcloud после первого запуска уже сам создаст нужные ему таблицы, индексы и представления. Чтобы подключиться к нашему локальному серверу, воспользуемся простой консольной утилитой mysql.
sudo mysql
Теперь создадим пользователя и БД. Введите следующие команды, но обязательно поменяйте пароль на более сложный. Также можно указать другое имя пользователя и БД при необходимости.
CREATE USER 'nextcloud_user'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud_user'@'localhost';
FLUSH PRIVILEGES;
MariaDB настроена, выходим из командной строки SQL:
quit;
Установка и настройка Nextcloud
Теперь мы готовы к установке Nextcloud. Скачиваем самую последнюю версию и распаковываем ее:
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
Затем переместим распакованное приложение директорию /var/www:
sudo cp -r nextcloud /var/www
И сменим владельца каталога, чтобы Apache мог корректно обрабатывать все вложенные файлы:
sudo chown -R www-data:www-data /var/www/nextcloud
Настройка веб-сервера Apache
Теперь необходимо настроить Apache. Для начала создадим файл /etc/apache2/sites-available/nextcloud.conf с настройками виртуального хоста.
В качестве доменного имени мы будем использовать cloud.my-domain.com, а вам необходимо указать свой домен:
<VirtualHost *:80>
DocumentRoot /var/www/nextcloud/
ServerName cloud.my-domain.com
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
Чтобы Apache начал использовать этот файл конфигурации, выполните в консоли команду:
a2ensite nextcloud.conf
Далее активируем несколько модулей Apache, которые необходимы Nextcloud для корректной работы:
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
Настроим PHP
Открываем файл конфигурации PHP /etc/php/version/apache2/php.ini, ищем параметр memory_limit и меняем его значение на 512M. Тут же найдите параметр upload_max_filesize и задайте максимальный размер загружаемого в облако файла.
Перезапустим Apache, чтобы применить все выполненные настройки:
service apache2 restart
Получение TLS-сертификата
Nextcloud уже готов к работе, но сейчас сейчас он работает по протоколу HTTP и не шифрует трафик. Чтобы повысить защиту сервера, выпустим и установим бесплатный TLS-сертификат от сервиса Let’s Encrypt. Для начала установим утилиту certbot, которая автоматически выпускает и обновляет TLS-сертификаты.
sudo apt-get install certbot python-certbot-apache
Запросим сертификат с помощью команды (не забудьте в параметре указать свое доменное имя):
sudo certbot --apache -d cloud.my-domain.com
Далее Certbot попросит ввести адрес электронной почты и согласиться с условиями использования. На этот адрес будут приходить письма с информацией об окончании срока сертификата. Сертификаты Let’s Encrypt действуют 90 дней. Чтобы обновить сертификат автоматически, добавьте cron-задание или systemd-таймер, который будет запускать следующую команду:
sudo certbot renew --quiet
Если вы пускаете ваше облако через реверсивный прокси по 80 порту, то пропишите в файл конфигурации /var/www/nextcloud/conf/conf.php новый параметр сразу после предыдущего:
'overwriteprotocol' => 'https',
В противном случае облако будет генерировать ссылки на http, даже если вы обращаетесь по https. Так же при использовании реверсивного прокси рекомендую установить из каталога приложений Brute-force settings и добавить в исключения IP-адрес вашего реверс-прокси, чтобы облако не ругалось на подозрительно большие запросы с этого адреса.
Инициализация облака Nextcloud и начальный интерфейс
Откроем в браузере страницу https://cloud.my-domain.com и увидим окно первоначальной настройки Nextcloud. Создадим учетную запись администратора, а также укажите название БД, пользователя и пароль, которые мы заводили на этапе настройки MariaDB. При необходимости также можете поменять каталог, где будут размещаться пользовательские данные.
Далее появится окно входа, в котором нужно ввести логин и пароль только что созданного пользователя. После первоначальной настройки мы попадем в основной интерфейс Nextcloud. Тут для примера уже загружено несколько ознакомительных файлов и активированы базовые приложения, вроде синхронизации файлов, просмотра фотографий, ведение заметок и другие.
Nextcloud установлен и готов к работе. Осталось скорректировать его настройки.
Настраиваем Cron
Переходим в веб-интерфейс администрирования и в разделе “Основные параметры” включаем фоновые задания в режим Cron.
Далее в консоли на сервере открываем crontab от имени пользователя www-data:
sudo crontab -u www-data -e
И добавляем строку в конце:
*/5 * * * * php -f /var/www/nextcloud/cron.php
Не забываем оставить пустую строку ниже, иначе crontab не сохранит изменения, сославшишь на ошибку.
Устраним предупреждение “Server has no maintenance window start time configured”.
Откроем файл конфигурации /var/www/nextcloud/conf/conf.php и пропишем новый параметр сразу после предыдущего:
'maintenance_window_start' => 1,
Чтобы устранить предупреждtние “Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «15552000» секунд” добавим следующее в файл .htaccess в корне Nextcloud:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
Настроим авторизацию через LDAP
Включаем из каталога приложений модуль LDAP user and group backend, установим библиотеку php-LDAP:
Далее переходим в веб-интерфейсе администрирования в настройки сервера и выбираем слева “LDAP/AD интеграция”.
В открывшемся окне, на вкладке Сервер добавляем имя сервера (можно задать просто имя домена). После нажимаем кнопку “Определить порт” — мы должны увидеть порт для подключения к каталогу (как правило, 389 или 636). Ниже вводим данные для учетной записи, которая была нами подготовлена ранее – после кликаем по “Сохранить учетные данные” и “Продолжить”:
Для базы поиска пользователей и групп можно просто кликнуть по Определить базу поиска DN — тогда будет определен корень домена. Или можно ввести самому конкретное подразделение. Нажимаем Проверить базу поиска DN, eсли наши настройки верны, мы должны увидеть фразу «Конфигурация в порядке»:
Нажимаем “Продолжить” — мы должны перейти на вкладку Пользователи. На данной вкладке можно ничего не трогать, или настроить дополнительные фильтры. После кликаем по кнопке Проверить настройки и пересчитать пользователей. В нижней части мы должны увидеть Конфигурация в порядке. Кликаем по “Продолжить”. Мы окажемся на странице Учетные данные, здесь можем задать поле, которое будем использовать в качестве логина. Ниже мы можем проверить учетную запись, введя ее в специальное поле и нажав “Проверить настройки”. На последней вкладке можно задать фильтры для групп или оставить по умолчанию.
Интеграция настроена. Пользователи будут загружаться из каталога LDAP, но их идентификаторы будут отображаться в виде UID — это произвольные набор цифр и букв и его использовать не удобно. Чтобы изменить атрибут для имени nextcloud, кликаем по ссылке “Эксперт”:
Задает атрибут из LDAP, который мы будем использовать для внутреннего имени системы, в нашем случаем укажем sAMAccountName, так как он характерен для логина в Active Directory.
Чтобы посмотреть список пользователей, кликаем по изображению аккаунта и выбираем “Пользователи”, система должна подгрузить пользователей из LDAP.
Настраиваем автоматическую очистку корзин пользователей
В файл конфигурации /var/www/nextcloud/conf/conf.php прописываем еще один новый параметр:
'trashbin_retention_obligation' => 'auto',
Доступные значения:
- auto — значение по умолчанию. В этом случае данные хранятся в корзине в течение 30 дней и автоматически удаляются в любое время если требуется пространство. Но если свободного места достаточно, данные не удаляются
- D, auto — Данные хранятся в корзине в течении D+ дней и удаляются в случае отсутствия свободного места
- auto, D — автоматически удаляются данные при отсутствии сводобного места и гарантированно если они старше D дней
- D1, D2 — данные хранятся не менее D1 дней и удаляются, когда хранятся более D2 дней.
- disabled — автоматическая очистка отключена, файлы будут хранится до тех пор пока пользователь сам их не удалит из корзины или полностью её не очистит.
Важно понимать , что свободное место определяется не местом на физическом или виртуальном диске, а квотой выделенной пользователю а уж потом свободным местом на диске.