{{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//