{{description>Настраиваем собственное облачное хранилище с помощью Nextcloud. Полное руководство: установка, настройка, устранение ошибок, обслуживание.}} ====== Создаем собственное облачное хранилище ====== ===== Теория ===== Октябрь 2026 года - "черный" месяц для компании Яндекс. Напомню, что 8, 9 и 10 октября в результате атаки БПЛА были частично или полностью выведены из строя 3 ЦОДа компании. Работали с перебоями или не работали совсем почти все сервисы Яндекса. В том числе пострадал и Яндекс-диск. Это заставило меня задумался о том, чтобы сделать собственное облако на своем сервере. ===== Практика ===== ==== Установка Nextcloud ==== Начинаем с [[sw:win:s16:hyper_v|создания виртуальной машины]] и [[sw:lin:install_os|установки на нее linux]]. Я выделил 4 ядра процессора и 4 гигабайта оперативной памяти. Еще один момент: при установке ''Debian'' я выбрал русский язык. Не знаю как может завершится установка ''Nextcloud'', если выбрать язык по умолчанию (английский). Обратите особое внимание на разметку диска! Я пошел путем создания 20 гигабайтного виртуального диска с перспективой расширения до примерно 500 гигабайт, может и больше. Если Вы выберите такой же вариант, то **обязательно** ознакомьтесь со статьей о [[etc:diskresize|разметке и изменении размеров диска в linux]] перед установкой ОС! После успешной установки Debian нужно сменить имя хоста. Для этого выполним пару команд и внесем изменения. Изменяем имя хоста в файле ''hostname''. Для того открываем файл sudo nano /etc/hostname и пропишем: cloud {{:sw:lin:deb:cloud:00_cloud_hostname.jpg|Hostname}} Это же имя внесем в список хостов. Для этого нужно отредактировать файл ''hosts''. Открываем его для редактирования sudo nano /etc/hosts и тоже прописываем: cloud {{:sw:lin:deb:cloud:01_cloud_hosts.jpg|Hosts}} После этого нужно перезагрузить операционную систему. sudo systemctl reboot После перезагрузки проверяем, что имя хоста изменилось. Команда hostname -f должна вывести значение ''cloud''. {{:sw:lin:deb:cloud:02_cloud_after_first_reboot.jpg|Имя хоста}} Приступим к установке необходимых пакетов: sudo apt update && sudo apt upgrade -y sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql \ php-curl php-mbstring php-intl php-gmp php-xml php-imagick php-zip zip vim -y {{:sw:lin:deb:cloud:03_cloud_first_installing.jpg|Установка пакетов}} После установки пакетов, в том числе и моего любимого ''vim'', я удалю ''nano''. Это совершенно необязательная процедура. sudo apt autoremove --purge nano -y {{:sw:lin:deb:cloud:04_cloud_del_nano.jpg|Удаление nano}} Теперь нужно создать базу данных. Запустим процесс создания БД командой: sudo mysql И выполним несколько команд: Создаем пользователя ''ncadmin'' с паролем ''password'': CREATE USER 'ncadmin'@'localhost' IDENTIFIED BY 'password'; Создаем базу данных с именем ''nextcloud'', если таковой не существует: CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; Предоставляем пользователю ''ncadmin'' все возможные привилегии на все объекты со стороны базы данных ''nextcloud'': GRANT ALL PRIVILEGES ON nextcloud.* TO 'ncadmin'@'localhost'; Перечитываем таблицы привилегий и применяем внесенные изменения: FLUSH PRIVILEGES; Готово! quit; :!: Значения ''ncadmin'' ''password'' ''nextcloud'' указаны для примера. Можете изменить значения на свои, особенно настоятельно рекомендуется сделать это для ''password''! {{:sw:lin:deb:cloud:05_cloud_mysql_create_db.jpg|Создание базы данных}} База данных и пользователь для нее успешно созданы, приступаем с загрузке установщика ''Nextcloud''. wget https://download.nextcloud.com/server/releases/latest.zip {{:sw:lin:deb:cloud:07_cloud_wget_done.jpg|Загрузка Nextcloud}} Распакуем скачанный архив и удалим его после успешной распаковки: unzip latest.zip rm latest.zip Скопируем распакованное в директорию ''/var/www'': sudo cp -r nextcloud /var/www Сменим владельца скопированной директории и его содержимого на ''www-data'': sudo chown -R www-data:www-data /var/www/nextcloud После этого можно удалить ранее распакованную директорию (ту, что осталась у нас в домашнем каталоге) командой rm -R nextcloud/ {{:sw:lin:deb:cloud:08_cloud_copy_nextcloud.jpg|Распаковка и копирование nextcloud}} Теперь нужно поправить файл ''000-default.conf'' в директории ''/etc/apache2/sites-available''. Необходимо поменять строку ''DocumentRoot /var/www/__html__'' на ''DocumentRoot /var/www/__nextcloud__''. sudo vim /etc/apache2/sites-available/000-default.conf {{:sw:lin:deb:cloud:09_cloud_apache_default_edit.jpg|Правим Apache}} Перезапускаем сервис ''apache2'': sudo systemctl restart apache2.service Переходим по адресу ''http://192.168.11.19'' ((В Вашем случае IP-адрес может быть другим.)) в браузере, вводим необходимые данные и нажимаем ''Установить''. {{:sw:lin:deb:cloud:11_cloud_web_small.jpg|Web-установка}} Это окно говорит нам, что установка прошла завершена. {{:sw:lin:deb:cloud:13_cloud_web_done_small.jpg?600|Установка завершена}} В принципе на этом этапе уже можно начинать пользоваться облаком в локальной сети. Но мы же не остановимся на этом, нам хочется полноценное облако с блэкджеком и ... с доступом из сети Интернет. Для этого нужно настроить несколько параметров. Приступаем! Кстати, заодно и исправим вот эти две ошибки: {{:sw:lin:deb:cloud:26_cloud_web_https_htaccess_error.jpg|Две первых ошибки}} Для этого нужно исправить файл ''default-ssl.conf'' и включить модуль ''ssl'' для ''apache''. Отредактируем файл ''default-ssl.conf''. Откроем его для редактирования: sudo vim /etc/apache2/sites-available/default-ssl.conf и внесем следующее: DocumentRoot /var/www/nextcloud Require all granted AllowOverride All Options FollowSymLinks MultiViews Dav off Должно получится так: {{:sw:lin:deb:cloud:27_cloud_web_https_htaccess_error_fix.jpg|Файл default-ssl.conf}} После этого включаем модуль ''ssl'': sudo a2enmod ssl "Включаем" отредактированный файл ''default-ssl.conf'' (после этого можно будет переходить на наше облако по протоколу ''HTTPS''): sudo a2ensite default-ssl.conf Включим еще пару модулей: sudo a2enmod rewrite sudo a2enmod headers Отключаем переход по ''HTTP'': sudo a2dissite 000-default.conf и перезапускаем сервис ''apache'': sudo systemctl restart apache2 Теперь настроим облако так, чтобы можно было переходить на него из сети Интернет. ((На этом этапе мы имеем только самоподписанный сертификат, поэтому браузер будет предупреждать нас о том, что лучше не переходить на эту страницу. Исправить это можно установкой доверенного сертификата безопасности. Почитайте больше про пакет Let's Encrypt для Apache2!)) У меня заранее создана ''A-запись'' для домена ''cloud.nikkutuzov.ru''. Так что приступим к настройке. Напомню, что у меня [[sw:lin:nginx_certbot|проксирующий web-сервер на nginx]]! Переходим на виртуальную машину с ''nginx'' и создаем конфигурационный файл ''cloud.nikkutuzov.ru'': sudo nano /etc/nginx/sites-available/cloud.nikkutuzov.ru со следующим содержанием: server { listen 80; listen [::]:80; server_name cloud.nikkutuzov.ru; } После этого перезапускаем ''nginx'': sudo systemctl restart nginx.service Получим сертификат для нового домена ''cloud.nikkutuzov.ru'': sudo certbot --nginx -d cloud.nikkutuzov.ru После успешного завершения работы ''certbot'' нужно изменить созданный ранее файл ''cloud.nikkutuzov.ru'': sudo nano /etc/nginx/sites-enabled/cloud.nikkutuzov.ru и привести его в такой вид: server { server_name cloud.nikkutuzov.ru; listen [::]:443 ssl; # managed by Certbot listen 443 ssl; # managed by Certbot location / { proxy_pass https://192.168.11.19; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_connect_timeout 1800s; proxy_send_timeout 1800s; proxy_read_timeout 1800s; fastcgi_read_timeout 1800s; } ssl_certificate /etc/letsencrypt/live/cloud.nikkutuzov.ru/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/cloud.nikkutuzov.ru/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = cloud.nikkutuzov.ru) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name cloud.nikkutuzov.ru; return 404; # managed by Certbot } Вот так это выглядит у меня: {{:sw:lin:deb:cloud:28_cloud_nginx_conf_edit.jpg|Настройка nginx}} Перезапускаем ''nginx'': sudo systemctl restart nginx.service Теперь можно переходить в браузере уже по адресу ''https://cloud.nikkutuzov.ru''. Но тут же натыкаемся на вот такую ошибку: {{:sw:lin:deb:cloud:29_cloud_web_access_error.jpg|Ошибка}} Нужно ввести домен в доверенные. Открываем файл: sudo vim /var/www/nextcloud/config/config.php и добавляем новый доверенный домен: ((Лучше поменять его местами с нулевым или оставить только его.)) 1 => 'cloud.nikkutuzov.ru', {{:sw:lin:deb:cloud:30_cloud_web_access_error_fix.jpg|Доверенные домены}} На этом установка полностью завершена. Облако полноценно работает как в локальной сети, так и в сети Интренет по протоколу ''HTTPS''. Если Вы настраивали в точности как у меня (с обратным прокси), то настоятельно рекомендую на этом этапе ознакомится со статьей про [[etc:proxy_real_ip|передачу реального IP-адреса клиента]]. В противном случае Вы ,возможно, столкнетесь с недоступностью облака, если в него попытаются войти перебором логинов/паролей. Если же Вы настраиваете без обратного прокси или только для использования в локальной сети, то переходите к исправлениям ошибок. Об этом - ниже. ==== Устранение ошибок и предупреждений после установки ==== Первым делом нас встречают три ошибки базы данных: {{:sw:lin:deb:cloud:16_cloud_web_db_errors_big_alt.jpg?600|Ошибки БД}} Для их исправления нужно в файл ''50-server.cnf'' добавить несколько строк. Открываем файл для редактирования: sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf и добавляем в блок ''mariadbd'' три строки: innodb_log_file_size = 256M slow_query_log = ON long_query_time = 2 Должно получится так: {{:sw:lin:deb:cloud:20_cloud_web_db_errors_fix.jpg|Исправляем ошибки БД}} После этого нужно перезапустить ''mariadb.service'': sudo systemctl restart mariadb.service Следующие две ошибки исправляются в файле ''php.ini''. * Первая ошибка: {{:sw:lin:deb:cloud:21_cloud_web_php_memory_limit_error.jpg|Первая ошибка}} Открываем и редактируем этот файл: sudo vim /etc/php/8.4/apache2/php.ini находим ''memory_limit = 128M'' и меняем на: ''memory_limit = 1G''. Как-то так: {{:sw:lin:deb:cloud:22_cloud_web_php_memory_limit_error_fix.jpg|Исправление первой ошибки}} * Вторая ошибка: {{:sw:lin:deb:cloud:24_cloud_web_output_buf_error.jpg|Вторая ошибка}} находим ''output_buffering = 4096'' и меняем на: ''output_buffering = Off''. Вот так: {{:sw:lin:deb:cloud:25_cloud_web_output_buf_error_fix.jpg|Исправление второй ошибки}} После этого нужно перезапустить сервис ''apache'': sudo systemctl restart apache2.service Продолжим! Следующим этапом устраним проблемы с неработающим планировщиком ''Cron'' в ''Nextcloud''. Команда ''cron.php'' должна запускаться от имени пользователя веб-сервера каждые 5 минут. В нашем случае этим пользователем является ''www-data''. Запускаем ''crontab'' от него, то есть от имени ''www-data'': sudo crontab -u www-data -e и добавим строчку: */5 * * * * /usr/bin/php -f /var/www/nextcloud/cron.php Вот так это должно выглядеть: {{:sw:lin:deb:cloud:31_cloud_web_cron_edit.jpg|Задание для cron}} Под пользователем с правами администратора (сейчас речь уже идет про web-интерфейс), в нашем случае это ''admin'', переходим: ''Параметры сервера'' → ''Administration'' → ''Основные параметры'' и выбираем ''Cron(рекомендуется)''. Кстати, в моем случае выбор был автоматическим. {{:sw:lin:deb:cloud:32_cloud_web_cron_enable.jpg|Включаем Cron}} Еще одно предупреждение: {{:sw:lin:deb:cloud:33_cloud_web_opcache_warning.jpg|Предупреждение opcache.interned_strings_buffer}} Его можно исправить изменением значения параметра ''opcache.interned_strings_buffer'' в файле ''php.ini''. Открываем этот файл командой: sudo vim /etc/php/8.4/apache2/php.ini находим ''opcache.interned_strings_buffer=8'', раскомментируем (если он закомментирован) и меняем на ''opcache.interned_strings_buffer=32''. Вот так: {{:sw:lin:deb:cloud:34_cloud_web_opcache_warning_fix.jpg|Значение opcache.interned_strings_buffer}} После изменения значения ''opcache.interned_strings_buffer'' нужно перезапустить ''apache'': sudo systemctl restart apache2.service Вот это предупреждение исправляется изменением содержимого файла ''config.php''. {{:sw:lin:deb:cloud:35_cloud_web_window_warning.jpg|Окно обслуживания}} Открываем файл ''config.php'': sudo vim /var/www/nextcloud/config/config.php и добавляем строку: 'maintenance_window_start' => 1, :!: Примечание: значение указывается в часах (от ''0'' до ''23'' включительно) по ''Всемирному координированному времени (UTC)''. Тяжёлые задачи будут выполняться в течение ''четырех'' часов после указанного часа. Если вам всё равно, когда они запустятся, можно указать ''100''. {{:sw:lin:deb:cloud:36_cloud_web_window_warning_fix.jpg|Окно обслуживания - исправлено}} Это предупреждение устраняется установкой пакета ''imagemagick'': {{:sw:lin:deb:cloud:37_cloud_web_imagic_warning.jpg|Предупреждение про Imagemagick}} sudo apt install imagemagick -y Следующие два предупреждения исправляется в несколько этапов. {{:sw:lin:deb:cloud:45_cloud_web_Memcache_APCU_warning.jpg|Предупреждение APCu}} Сначала нужно установить пакет ''php-apcu'': sudo apt install php-apcu -y Затем включить модуль: sudo phpenmod -v 8.4 -s ALL apcu Добавить в файл ''config.php'': sudo vim /var/www/nextcloud/config/config.php следующую строку: 'memcache.local' => '\OC\Memcache\APCu', Вот так: {{:sw:lin:deb:cloud:38_cloud_web_apcu_warning_fix.jpg|Предупреждение APCu - исправлено}} И перезапустить после этого ''apache'': sudo systemctl restart apache2.service Это предупреждение исправляется добавлением одной строки во все тот же файл ''config.php'': {{:sw:lin:deb:cloud:39_cloud_web_phone_region_warning.jpg|Телефонный номер региона - предупреждение!}} Открываем: sudo vim /var/www/nextcloud/config/config.php Добавляем: 'default_phone_region' => 'RU', Например вот в это место: {{:sw:lin:deb:cloud:40_cloud_web_phone_region_warning_fix.jpg|Телефонный номер региона - исправлено}} Не забываем перезапустить ''apache'': sudo systemctl restart apache2.service Предупреждение о ''MIME'' {{:sw:lin:deb:cloud:43_cloud_web_mime_warning.jpg|}} убираем однократным выполнением следующей команды: sudo -u www-data php /var/www/nextcloud/occ maintenance:repair --include-expensive А вот это предупреждение мы устраним редактированием файла ''default-ssl.conf'' (если используется протокол ''HTTPS'') или ''000-default.conf'' (в случае использования протокола ''HTTP''). {{:sw:lin:deb:cloud:44_cloud_web_http_warning.jpg|Предупреждение HTTP}} В моем случае используется ''HTTPS'': sudo vim /etc/apache2/sites-available/default-ssl.conf Для обоих протоколов добавляемая строка будет одинаковой: Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" После внесения изменений необходимо перезапустить ''apache'': sudo systemctl restart apache2.service Установку считаю полностью завершенной. Можно начинать пользоваться собственным, независимым и просто классным облаком. В последнем обязательно убедитесь по мере использования ''Nextcloud''. Спасибо, что дочитали до конца. --- //[[nikkutuzov@nikkutuzov.ru|Николай Кутузов]] 2026-10-22 22:46//