Идея иметь собственное домашнее облако у меня была давно. Рассматривал варианты NAS на основе бесплатных дистрибутивов типа FreeNAS, NAS4Free, OpenMediaVault и пр. Но хотелось, чтобы был мобильный клиент, простой и красивый webUI. Раньше как-то баловался с разными решениями и понравился проект ownCloud. Но на текущий момент у него платное мобильное приложение. Сейчас стоит около 30 рублей, но хотелось иметь что-то более бесплатное. Вспомнил про хороший форк ownCloud — Nextcloud. Мобильное приложение бесплатное (+ для есть и дополнительные приложения) и есть декстопные клиенты (Win, Mac, Linux). Сам Nextcloud имеет множество настроек, интеграций, а также возможность установки расширений (приложений).
Распространяется Nextcloud несколькими вариантами:
Архив серверного приложения для web-сервера;
Web-инсталлер;
«Образами» для VirtualBox, Docker и Snap-пакет.
Я решил реализовать схему на VirtualBox, с подключением общей папки, как хранилища.
Предусловие: На сервере должен быть установлен VirtualBox (далее — VB) и VirtualBox Extension Pack (далее — VBEP).
Импорт виртуальной машины
1. Скачиваем образ виртуальной машины — Nextcloud-VM.ova.
Другие варианты образов представлены на сайте Hansson IT.
2. Двойным кликом запускаем скаченный образ, после чего откроется импорт VirtualBox.
В настройках можно указать для создаваемой виртуальной машины (далее — ВМ) Имя, Описание и Папку. Характеристики «железа» уменьшать не стоит, иначе при установке Nextcloud могут появиться ошибки о недостаточности ресурсов. Все настройки ВМ, в т.ч. общие папки, лучше настраивать после завершения установки Nextcloud.
3. После нажимаем «Импорт» и ждём завершения создания нашей ВМ.
4. После успешного импорта, ВМ отобразиться в списке ВМ VB.
Первоначальная настройка Nextcloud
Образ ВМ основан на Ubuntu Server 20.04.1 LTS в котором предустановлены скрипты разворачивания Nextcloud.
1. Запускаем ВМ.
2. После запуска ВМ появляется приглашение авторизации. По умолчанию пользователь (админ) сервера — ncadmin, с паролем nextcloud.
Смена пароля будет предложена после завершения конфигурации Nextcloud.
3. Авторизовываемся на сервере.
4. После авторизации появляется приветственное сообщение первого запуска с прделожением запустить скрипт установки. Для запуска необходимо ввести пароль пользователя ncadmin.
Вводим пароль, нажимаем Enter и запускается процесс установки Nextcloud.
5. После проверки конфигурации ВМ будет отображено сообщение о выборе варианта хранения данных. В образе ВМ подключено 2 жестких диска (динамические по 40 Гб):
disk1 — диск с ОС, файловая система ext4.
disk2 — диск с файловой системой ZFS.
По умолчанию предлагается хранить данные на втором диске. Я собираюсь хранить данные в сетевой папке (на отдельном физическом жестком диске), поэтому использовать второй диск я не буду.
Ознакомившись с сообщением, нажимаем «Ок».
6. Открывается окно выбора жесткого диска для хранения.
Стрелками встаем на позицию «1 Disk», активируем её пробелом.
Клавишей «Tab» переходим к блоку кнопок, выбираем «Ok» и нажимаем «Enter».
7. На следующем шаге открывается окно выбора DNS сервера:
Quad9
Cloudflare
Local — локальный сервер (по DHCP)
Я предпочитаю использовать Cloudflare. Выбираю его и нажимаю «Ok».
8. Следующее окно — сообщение о выборе зеркала обновлений.
Ознакомившись с сообщением, нажимаем «Ок».
9. Следующее сообщение информирует о текущем сервере обновлений — http://archive.ubuntu.com/ubuntu.
Ознакомившись с сообщением, нажимаем «Ок».
10. В следующем окне предлагается найти лучшее зеркало — будет произведен тест доступности и скорости соединения нескольких зеркал, после чего, необходимо выбрать понравившееся.
Я решил остаться на стандартном, хотя по тестам есть зеркала и получше (выше скорость, меньше пинг, шире канал). Поэтому на этом шаге выбираю «No» и нажимаю «Enter».
После чего начнется установка Nextcloud (+PostgreSQL, PHP, Apache).
11. По завершению установки будет предложено изменить пароль ncadmin
Нажимаем любую клавишу. Вводим новый пароль, нажимаем «Enter», подтверждаем новый пароль ещё раз и нажимаем «Enter».
12. После смены пароля появляется сообщение что текущий админ в Nextcloud — ncadmin. И его нужно заменить на нашего.
Нажимаем любую клавишу. Вводим имя пользователя, нажимаем «Enter», вводим пароль, нажимаем «Enter», подтверждаем пароль ещё раз и нажимаем «Enter».
13. Далее появляется окно с выбором местоположения
Выбираем «Europe», и нажимаем «Ok».
14. В следующем окне необходимо выбрать город. Выбираем необходимый и нажимаем «Ok».
15. Т.к. на шаге 7 я выбрал сторонний DNS-сервер, появляется следующее сообщение о том, что существует обновленная версия файла '/etc/sysemd/resolved.conf' и нужно принять решение что делать:
Y или I — установить обновленную (основную действующую) версию;
N или O — оставить текущую установленную версию;
D — показать изменения между версиями;
Z — запустить shell
Список изменений файла:
Если сохраняем ранее выбранные настройки DNS, вводим «N» и нажимаем «Enter», если необходимо вернуться к стандартным настройкам — вводим «Y» и нажимаю «Enter».
После обновления файла ВМ будет перезагружена.
16. После перезагрузки ВМ необходимо авторизоваться (на этом этапе можно пользоваться PuTTY). После авторизации будет приветственное окно, которое сообщит, что мы все установили и это окно можно отключить удалив файл /home/ncadmin/welcome.sh (иначе оно будет постоянно появляться).
Нажимаем «Ok». — Nextcloud установлен.
Настройка ВМ
Для работы расширений VB установим соответствующий пакет sudo apt install virtualbox-guest-utils
После установки выключим ВМ для её настройки — sudo shutdown -h now
После того, как ВМ будет выключена, в VB зайдем в настройки.
1. Можно включить двунаправленный буфер обмена (но лучше пользоваться PuTTY)
2. Я уменьшил оперативную память до 1024 Гб и отключил гибкий диск
3. Установил использование одного ядра процессора
4. Создал общую папку (folder): указал путь и включил авто-подключение
Сохраняем настройки и запускаем ВМ.
Изменение папки хранения данных
Основной гайд для этого блока взял отсюда — https://enk2x.ru/2019/09/21/datanew/
После запуска ВМ, авторизуемся.
1. Проверяем наличие общей папки
cd /media
ls
Должно отобразиться наименование «sf_folder» (на гостевой машине у общей папки префикс «sf_»), где «folder» — имя общей папки на хост машине.
2. Включаем в группу «vboxsf» (группа-владелец общей папки) пользователей ncadmin и www-data (пользователь Apache).
sudo usermod -aG vboxsf ncadmin
sudo usermod -aG vboxsf www-data
После включения в группу перезагружаем ВМ
sudo shutdown -r now
3. После перезагрузки авторизуемся и переводим приложение nextcloud в режим обслуживания
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
Папка nextcloud расположена в корне папки www, а не внутри html
4. Копируем файлы настроек и пользовательские файлы в общую папку
sudo cp -R /mnt/ncdata /media/sf_folder
5. Убеждаемся что всё скопировано
cd /media/sf_folder/ncdata
ls
Так же можно проверить на хост машине в общей папке
6. Изменяем путь к папке данных в конфиг-файле
sudo nano /var/www/nextcloud/config/config.php
Откроется файл config.php, где для параметра 'datadirectory' необходимо изменить значение '/mnt/ncdata' на '/media/sf_folder/ncdata' (где «folder» — имя общей папки)
После внесения изменений нажимаем Ctrl+X, на вопрос о сохранении изменений вводим «y» и нажимаем «Enter».
7. Выключаем режим обслуживания
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
Результат
Проверим работоспособность.
1. Авторизуемся на сервере Nextcloud через web-интерфейс под пользователей admin и добавим картинку в папку Photos
2. Проверим наличие файла в общей папке на хост-машине
3. Проверим наличие файла в мобильном приложении.
В результате мы получили облачный сервер на виртуальной машине с внешним хранилищем, к которому можно получить прямой доступ посредством файлового менеджера.
4. Обратный порядок копирования
Если мы сначала вручную закидываем файлы в общую папку (без использования приложения), то в приложении они не будут видны. Для того, чтобы они отобразились, нужно пересканировать папки командой
sudo -u www-data php /var/www/nwxtcloud/occ files:scan —all
После сканирования, добавленный файлы отобразятся в приложении.
UPD (18.01.2021): исправлена логическая ошибка в п.15 (комментарий @KYuri)