Nextcloud — это набор приложений для создания своего облачного хранилища, можно конечно купить подписку где-нибудь на яндекс диске или гугл диске, но я сторонник того чтобы все держать на своих серверах.
Исходные данные:
Система Debian 11
Хранилище файлов будет находиться /mnt/cloud/
Доменное имя cloud0.angald.ru
Версия Nextcloud 23.0.3
Итак поехали:
1. Подготовка системы
На свежеустановленной системе для начала правим репозитории.
1 |
apt edit-sources |
1 2 3 4 5 6 7 8 9 10 |
#Debian 11 (Bullseye) deb http://deb.debian.org/debian bullseye main contrib non-free deb-src http://deb.debian.org/debian bullseye main contrib non-free deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free deb http://deb.debian.org/debian bullseye-updates main contrib non-free deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free |
1 |
apt update |
2. Apache, база данных mariadb и прочие системные утилиты.
1 |
apt install apache2 libapache2-mod-php mariadb-server php-xml php-cli php-cgi php-mysql php-mbstring php-gd php-curl php-zip php-intl php-bcmath php-gmp php-imagick unzip imagemagick python3-certbot-apache -y |
3. Настройка mariadb
Настраиваем пароль root для SQL и убираем анонимных пользователей
1 |
mysql_secure_installation |
Подключаемся к SQL и создаем базу и пользователя
1 |
mysql -u root -p |
Создаем базу данных nextcloud
1 |
CREATE DATABASE nextcloud; |
Создаем пользователя nextclouduser и устанавливаем пароль password
1 |
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password'; |
Даем права на базу данных нашему пользователю
1 |
GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost'; |
Сбрасываем привилегии и выходим
1 2 |
flush privileges; exit |
4. Скачивание и подготовка Nextcloud
Далее идем на сайт и скачиваем последнюю версию
1 |
wget https://download.nextcloud.com/server/releases/nextcloud-23.0.3.zip |
Распаковываем скачанный архив
1 |
unzip nextcloud-*.zip |
Далее переносим файлы и даем необходимый права
1 |
cp -r nextcloud /var/www/cloud |
1 |
chown -R www-data:www-data /var/www/cloud |
Также не забываем создать папку для данных и дать права
1 |
mkdir /mnt/cloud |
1 |
chown -R www-data:www-data /mnt/cloud/ |
5. Настройка Apache
Теперь переходим к настройке apache2. Для начала отключим сайт по умолчанию и удалим стандартные файлы конфигурации.
1 |
a2dissite 000-default.conf |
1 |
rm /etc/apache2/sites-available/* |
1 |
rm -rf /var/www/html/ |
Теперь создаем конфигурацию для nextcloud
1 |
nano /etc/apache2/sites-available/cloud.conf |
1 2 3 4 5 6 7 8 9 10 11 12 |
<VirtualHost *:80> DocumentRoot /var/www/cloud/ ServerName cloud0.angald.ru <Directory /var/www/cloud/> Require all granted AllowOverride All Options FollowSymLinks MultiViews <IfModule mod_dav.c> Dav off </IfModule> </Directory> </VirtualHost> |
Активируем сайт
1 |
a2ensite cloud.conf |
Включаем модули
1 |
a2enmod rewrite |
Перезапускаем apache и заходим на наш сайт в браузере
1 |
systemctl restart apache2 |
При входе будет встречать окно, заполняем согласно вышеуказанных учетных данных что мы создавали и нажимаем установить
6. Настройка Nextcloud
Установили, но это только пол дела. Теперь идем в раздел настоек в раздел Общие сведения и смотрим что там пишут.
Начнем решать проблемы по порядку:
Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ.
Открываем файл конфигурации php
1 |
nano /etc/php/7.4/apache2/php.ini |
Ищем секцию memory_limit и меняем там значение на 512M
Перезапускаем apache и смотрим что ошибка ушла
1 |
systemctl restart apache2.service |
Используется небезопасное соединение по протоколу HTTP
Запускаем certbot который мы поставили еще в самом начале
1 |
certbot --apache |
Он спросит вашу электронную почту, также соглашаемся с лицензией, по поводу рассылки решайте самостоятельно. Нас интересует секция с выбором домена.
1 2 3 4 5 6 |
Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: cloud0.angald.ru - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): |
Выбираем наш домен и ждем окончания процедуры получения сертификата. Чтобы вручную не обновлять сертификат пропишем задание в cron
1 |
crontab -e |
Добавляем строчку
1 |
55 23 15 * * certbot renew |
Сохраняемся и можно уже не переживать по поводу сертификата. Но теперь при входе вы скорее всего получите нечто это
Пугаться не стоит нужно лишь прописать наш домен в конфиге nextcloud
1 |
nano /var/www/cloud/config/config.php |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php $CONFIG = array ( 'instanceid' => 'ocafbkqzya9m', 'passwordsalt' => '6suoiGyW89AJWNbcn2Xiq5Pi4+9wqr', 'secret' => 'LZbKkujWODBxqe7uPyEPvP19v2+neEwzkvizcxHvzdOSj8db', 'trusted_domains' => array ( 0 => '172.16.0.45', ), 'datadirectory' => '/mnt/cloud', 'dbtype' => 'mysql', 'version' => '23.0.3.2', 'overwrite.cli.url' => 'http://172.16.0.45', 'dbname' => 'nextcloud', 'dbhost' => 'localhost', 'dbport' => '', 'dbtableprefix' => 'oc_', 'mysql.utf8mb4' => true, 'dbuser' => 'nextclouduser', 'dbpassword' => 'password', 'installed' => true, ); |
Нас интересует секция
1 |
0 => '172.16.0.45', |
Меняем на
1 |
0 => 'cloud0.angald.ru', |
Также можно сразу добавить в конфиг
1 |
'default_phone_region' => 'RU', |
Этой правкой мы закроем ошибку Не указан регион размещения этого сервера Nextcloud
По итогу у нас должно получиться нечто такое
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $CONFIG = array ( 'instanceid' => 'ocafbkqzya9m', 'passwordsalt' => '6suoiGyW89AJWNbcn2Xiq5Pi4+9wqr', 'secret' => 'LZbKkujWODBxqe7uPyEPvP19v2+neEwzkvizcxHvzdOSj8db', 'trusted_domains' => array ( 0 => 'cloud0.angald.ru', ), 'datadirectory' => '/mnt/cloud', 'dbtype' => 'mysql', 'version' => '23.0.3.2', 'overwrite.cli.url' => 'http://172.16.0.45', 'dbname' => 'nextcloud', 'dbhost' => 'localhost', 'dbport' => '', 'dbtableprefix' => 'oc_', 'mysql.utf8mb4' => true, 'dbuser' => 'nextclouduser', 'dbpassword' => 'password', 'installed' => true, 'default_phone_region' => 'RU', ); |
Теперь можно спокойно заходить на наш сайт по https
Смотрим опять ошибки в и видим следующую картину
У нас добавилась еще одна проблема да кеширование мы еще не настроили, Разберемся для начала с Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «15552000». Открываем конфигурацию https
1 |
nano /etc/apache2/sites-enabled/cloud-le-ssl.conf |
И добавляем секцию
1 2 3 |
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule> |
Должно получиться вот так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<IfModule mod_ssl.c> <VirtualHost *:443> DocumentRoot /var/www/cloud/ ServerName cloud0.angald.ru <Directory /var/www/cloud/> Require all granted AllowOverride All Options FollowSymLinks MultiViews <IfModule mod_dav.c> Dav off </IfModule> </Directory> <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule> SSLCertificateFile /etc/letsencrypt/live/cloud0.angald.ru/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/cloud0.angald.ru/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> |
Включаем модуль apache2
1 |
a2enmod headers |
Перезапускаем веб сервер
1 |
systemctl restart apache2 |
Осталось настроить систему кеширования, для начала ставим необходимые пакеты
1 |
apt install php-apcu redis-server php-redis -y |
Правим конфиг nextcloud
1 |
nano /var/www/cloud/config/config.php |
Добавляем секцию
1 2 3 4 5 6 7 8 |
'memcache.local' => '\\OC\\Memcache\\APCu', 'memcache.distributed' => '\\OC\\Memcache\\Redis', 'redis' => array ( 'host' => '127.0.0.1', 'port' => 6379, ), 'memcache.locking' => '\\OC\\Memcache\\Redis', |
Должно получиться вот так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php $CONFIG = array ( 'instanceid' => 'ocafbkqzya9m', 'passwordsalt' => '6suoiGyW89AJWNbcn2Xiq5Pi4+9wqr', 'secret' => 'LZbKkujWODBxqe7uPyEPvP19v2+neEwzkvizcxHvzdOSj8db', 'trusted_domains' => array ( 0 => 'cloud0.angald.ru', ), 'datadirectory' => '/mnt/cloud', 'dbtype' => 'mysql', 'version' => '23.0.3.2', 'overwrite.cli.url' => 'http://172.16.0.45', 'dbname' => 'nextcloud', 'dbhost' => 'localhost', 'dbport' => '', 'dbtableprefix' => 'oc_', 'mysql.utf8mb4' => true, 'dbuser' => 'nextclouduser', 'dbpassword' => 'password', 'installed' => true, 'default_phone_region' => 'RU', 'memcache.local' => '\\OC\\Memcache\\APCu', 'memcache.distributed' => '\\OC\\Memcache\\Redis', 'redis' => array ( 'host' => '127.0.0.1', 'port' => 6379, ), 'memcache.locking' => '\\OC\\Memcache\\Redis', ); |
Теперь нужно включить apc
Добавляем в конфиг
1 |
apc.enable_cli=1 |
1 |
nano /etc/php/7.4/cli/php.ini |
Перезапускаем систему и проверяем еще раз ошибки в nextcloud. С настройкой почты думаю разберетесь сами, благо там ничего сложного нет.
7. Настройка Cron для Nextcloud
У меня настроено так уже много лет и вполне себе нормально работает. Переключаем в «Основных параметрах» на cron
Далее правим cron от пользователя www-data и добавляем туда команду для запуска задания каждые 5 минут.
1 |
crontab -e -u www-data |
1 |
*/5 * * * * php -f /var/www/cloud/cron.php |
Теперь фоновые задания будет выполнять cron каждые 5 минут. Установка и настройка nextcloud не такая уж сложная, но множество нюансов иногда отпугивают новичков. Всем добра и мира )))