Создание домашнего облачного хранилища Nextcloud на базе Raspberry Pi 5

Эта статья о создании личного облачного хранилища на базе этого микрокомпьютера.

Nextcloud — надежная система, использующаяся как в корпоративной среде, так и частными лицами. Она позволяет развернуть свое личное облако на своем собственном железе, не теряя физического доступа к своей информации и не становясь заложником компании, осуществляющей управление облаком. Сразу хочу отметить — я не программист и не кулхацкер. Все написаное тут было найдено в гугле и воплощено на практике. Но это работает, и работает стабильно, что мне, собственно говоря, и надо. Итак…

Что умеет Nextcloud:

Доступ через веб-интерфейс

— Клиентские приложения под Windows, Linux, Mac OS, Android, iOS, Windows 10 Mobile
— «Календарь» и «Контакты» с поддержкой синхронизации по протоколу CalDAV/CardDAV
— Поддержка протокола WebDAV для доступа к хранящимся в облаке файлам
— Возможность шифрования хранящейся информации
— Встроенный аудиоплеер, видеоплеер, просмотрщики текстовых и PDF-файлов
— Галерея и просмотр изображения
— Интернет радио
— Фотосервис Memories
— Dicom просмотрщик через web интерфейс — ценно для врачей!
— Возможность добавления тегов и комментариев к файлам
— Онлайн-редактор Nextcloud office
— Корзина, хранящая в себе удаленные файлы с возможностью их восстановления в течение некоторого времени
— Возможность расшаривания общего доступа к файлам и папкам
— Возможность работы как на сервере в интернете, так и в локальной сети без доступа к интернету вообще

Для развертывания своего собственного облака на базе Raspberry Pi понадобится: Raspberry Pi 5, желательно с оперативкой 8 ГБ и внешний жесткий диск с SATA 3 интерфейсом.

На Raspberry необходимо установить OS Raspian 64 бит, при помощи установщика с официального сайта. Микрокомпьютер должен иметь нормальное питание мощностью 5А и проводное подключение к интернету, IP адрес «малины» должен быть статическим.

Если Вы хотите иметь подключение к облаку через интернет — нужно:

— белый IP адрес,

— на роутере нужно настроить переадресацию: от внешний_белый_IP_адрес_роутера:443 на внутренний_IP_RaspberryPi:443 (443 — это порт)

Также надо будет настроить в Apache2 и Nextcloud протокол SSL.

С учетом объемов современного мультимедийного контента, жесткий диск лучше приобрести достаточно большого объема. Я например приобрел диск 2 ТБ.

Подключение и монтирование НDD.

Сначала подключаем жесткий диск к компьютеру с Windows и форматируем его в NTFS.

Если в Вашей OS Raspbian нет поддержки NTFS «из коробки», нужно установить соответствующий пакет.

После этого можно приступить непосредственно к монтированию HDD.

Подключите диск в USB порт Raspberry. Настроим монтирование USB HDD через fstab — конфигурационный файл, в котором описывается каждое из подключенных к компьютеру устройств хранения информации. Структура записей fstab выглядит так:

# <file system>   <dir>   <type>   <options>   <dump>   <pass>

   

/dev/cdrom   /mnt/cd   iso9660    ro,user,noauto,unhide 0 0

Найдем нужное нам значение <file system> для жесткого диска

ls -l /dev/disk/by-uuid

мы увидим:

Строка с /sda2 (или sda1) — наш жесткий диск. А написанное сине-зеленым шрифтом — это номер диска, который нам нужен, это наше будущее значение UUID. Если не уверены в номере — выключите малину, отключите диск, запустите систему, опять вводите ls -l /dev/disk/by-uuid, смотрите, какой диск пропал, затем подключайтесь заново и находите правильный номер.

Теперь создадим точку монтирования:

sudo mkdir /mnt/data2

смонтированный жесткий диск будет доступен по пути /mnt/data2 (можете указать свой путь). Путь /mnt/data2 — это наше будущее значение <dir> в структуре записи fstab

Теперь мы должны открыть в терминале файл fstab для редактирования

sudo nano /etc/fstab

Нужно добавить в таблицу новую строку:

UUID=4A9CD3139CD2F901 /mnt/data2 ntfs nofail,uid=www-data,gid=www-data,dmask=0007 0 0

Набор символов после UUID= нужно вставить свой, путь /mnt/data2 — также вставляем свой, остальную часть строки нужно использовать в таком виде без изменений.

uid=www-data,gid=www-data — владелец и группа диска, в данном случае это будет www-data, т.е. пользовать диск будет сервер Apache2. Так будет проще.

Итак, если все сделали, то сохраняем исправленный файл fstab: нажимаем ctrl X, потом Y, потом Enter.

Потом, чтобы Вы могли открыть диск в проводнике — добавьте своего пользователя в группу пользователей www-data. Добавление пользователя в группу:

sudo adduser user www-data

(поменяйте user на своего пользователя).

На этом процесс монтирования можно считать завершенным и остается только перезагрузить систему:

sudo reboot

Если Вы все сделали правильно, то система перезапустится. Ошибки в редактировании файла ftab могут привести к тому, что Raspbian перестанет загружаться до конца, выдавая в процессе сообщение об ошибке — придется переустанавливать систему и начинать все заново.

Подготовка к установке

Для развертывания Nextcloud необходимо поднять на «малине» веб-сервер, интерпретатор PHP и СУБД с базой данных для облачного хранилища + некоторые манипуляции с системой для оптимизации ее работы (номер PHP может отличаться — 8.3 и т.д.).

sudo apt update

sudo apt upgrade

sudo apt install apache2

sudo apt install php8.2 php8.2-gd php8.2-sqlite3 php8.2-curl php8.2-zip php8.2-xml php8.2-mbstring php8.2-mysql php8.2-bz2 php8.2-intl php8.2-smbclient php8.2-imap php8.2-gmp php8.2-bcmath libapache2-mod-php8.2 php8.2-imagick

sudo service apache2 restart

Проверить версию работающего интерпретатора можно при помощи консольной команды:

php -v

Если установка PHP 8 выполнена корректно, то мы увидим примерно следующее:

PHP 8.2.18 (cli) (built: Apr 11 2024 22:07:45) (NTS)

Copyright (c) The PHP Group

Zend Engine v4.2.18, Copyright (c) Zend Technologies

with Zend OPcache v8.2.18, Copyright (c), by Zend Technologies

Можно включить интерпретатор PHP 8.2 в Apache:

sudo a2enmod php8.2

Теперь увеличим стандартные лимиты загрузки файлов в PHP. Это делается через редактирование файла настроек php.ini:

sudo nano /etc/php/7.0/apache2/php.ini

В нем нужно найти строки:

memory_limit = 128M

upload_max_filesize = 2M

И заменить их на:

memory_limit = 1024M

upload_max_filesize = 1024M

После чего перезагрузить веб-сервер для применения изменений.

sudo service apache2 restart

Перенос /tmp на RAM-диск

Теперь сделаем так, чтобы содержимое папки /tmp писалось не на системный раздел Raspbian, а в оперативную память, т.е. на RAM-диск.

Это нужно для того, чтобы снизить износ microSD-карточки от многочисленных операций по созданию и изменению файлов.

Дело в том, что /tmp выступает временным хранилищем при загрузке файлов через PHP. Т.е. каждый раз, когда мы загружаем что-то в свое облако, эти файлы будут записываться в /tmp и уже оттуда перемещаться в Nextcloud-хранилище на подключенном к «малине» жестком диске. Зачем нагружать microSD кучей бессмысленных операций чтения-записи, если эти операции могут спокойно совершаться в оперативной памяти?

RAM-диск в Raspbian и других Linux-системах присутствует по умолчанию и прописан в качестве файловой системы tmpfs.

Перенос папки /tmp на tmpfs осуществляется путем правки fstab:

sudo nano /etc/fstab

Путем сложных поисков мной были скорфигурированы вот такие строки:

tmpfs /tmp tmpfs rw,nosuid,nodev,mode=0777,noatime,nodiratime 0 0
tmpfs /var/tmp tmpfs rw,nosuid,nodev,mode=0777,noatime,nodiratime 0 0

Перезагружаем Raspberry Pi для применения изменений:

sudo reboot

Можно проверить, примонтировалась ли папка /tmp на RAM-диск выполнением команды «df»:

Файловая система  1K-блоков Использовано   Доступно Использовано% Cмонтировано в

tmpfs                524288        15808     508480            4% /tmp

tmpfs                 30720            0      30720            0% /var/tmp

Установка MySQL на Raspberry Pi

sudo apt install mariadb-server php-mysql

Программное обеспечение сервера MySQL установлено на Raspberry Pi, нам нужно будет защитить его, установив пароль для root и пользователя. По умолчанию MySQL устанавливается без какого-либо пароля. Выполните следующую команду, чтобы начать процесс защиты MySQL

sudo mysql_secure_installation

Для более безопасной установки вам следует отвечать « Y» на все запросы, когда вас попросят ответить Y или N. Эти запросы удалят функции, которые позволяют кому-либо упростить доступ к серверу. Обязательно запишите пароль, который вы установили во время этого процесса, поскольку нам нужно будет использовать его для доступа к серверу MySQL и создания баз данных и пользователей для Nextcloud.

Во время установки сервера будет предложено ввести пароль для пользователя root:

Вводим пароль и запоминаем его, в дальнейшем он понадобится.

Существует два разных способа выхода из командной строки MYSQL. Первый из них — это «quit» или «exit» в интерфейс MySQL, другой способ выйти из командной строки MYSQL — нажать CTRL+ D.

Прежде чем мы приступим к созданию пользователя и базы данных MySQL на нашем Raspberry Pi, мы должны снова войти в инструмент командной строки MySQL

sudo mysql -u root -p

Вводим пароль root. Как и в большинстве случаев ввода пароля в Linux, текст не будет отображаться по мере ввода.

Теперь создадим базу данных nextcloud:

CREATE DATABASE nextcloud;

Cоздадим пользователя MySQL

CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password';

nextcloud — новый пользователь, в качестве ‘password’ задается пароль для доступа к БД

Создав пользователя, мы можем продолжить и предоставить ему все привилегии, чтобы он мог взаимодействовать с базой данных.

GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost;

FLUSH PRIVILEGES;


exit

Установка Nextcloud

Перейдем в наш каталог html с помощью следующей команды изменения каталога

cd /var/www/html/

Скачаем последнюю версию облака:

sudo wget https://download.nextcloud.com/server/releases/latest.tar.bz2

Разархивируем

sudo tar -xvf latest.tar.bz2

Другой вариант:

sudo wget https://download.nextcloud.com/server/releases/latest.zip

sudo 
mkdir /var/www/html/nextcloud


sudo mv latest.zip /var/www/html/

cd /var/www/html/


sudo unzip -q latest.zip

Создаем папку для облачного хранилища и назначаем права всем папкам:

sudo mkdir -p /mnt/data2/Nextcloud




sudo chown www-data:www-data /mnt/data2/Nextcloud




sudo chmod 750 /var/www/html/nextcloud/



sudo chown -R www-data:www-data /var/www/html/nextcloud/

И на всякий случай:

sudo chown www-data:www-data /var/www/html/nextcloud/config


sudo chown www-data:www-data /var/www/html/nextcloud/apps

На этом подготовка к запуску Nextcloud завершена.

Настройка Apache для Nextcloud

Нужно разобраться с файлом .htaccess для Nextcloud. Поскольку мы установили Nextcloud в каталог Apache2 по умолчанию /var/www/html, нам нужно будет изменить некоторые настройки в Apache2, чтобы .htaccess файл мог переопределять настройки.

Создадим файл, в котором будут храниться изменения конфигурации Nextcloud

sudo nano /etc/apache2/sites-available/nextcloud.conf

В файле создаем следующее:

Alias /nextcloud "/var/www/html/nextcloud/"




<Directory /var/www/html/nextcloud/>



Require all granted
Allow
Override All


Options FollowSymLinks MultiViews




<IfModule mod_dav.c>
Dav off

</IfModule>




</Directory>

Эти изменения позволят Apache2 читать и использовать .htaccess файлы в каталоге Nextcloud. Сохраняем файл. Затем в терминале «включаем» сайт Nextcloud:

sudo a2ensite nextcloud.conf

Перезапускаем апач:

sudo service apache2 restart

Теперь всякий раз, когда кто-то заходит на IP-адрес_вашего_Pi/nextcloud», он будет встречен его интерфейсом.

Запуск Nextcloud

Для начала перейдите на http://ip-адрес-raspberry-pi/nextcloud/

Если все сделано правильно, то появится экран, на котором нужно создать нового пользователя и указать каталог с данными:

Имя пользователя и пароль может быть любым, а каталог указываем тот, что создавали, и к которому прописывали права доступа пользователя www-data консольными командами чуть выше по тексту. В данном примере он располагается на внешнем жестком диске /mnt/data2/Nextcloud

Чуть ниже будет предложено ввести данные для доступа к БД:

Вводим те данные, что указали при создании БД MySQL и жмем «Завершить установку».

Открывается приветственное окно с предложением загрузить мобильные и десктопные клиенты:

На этом установка Nextcloud окончательно завершена, облачный сервис работает, можно устанавливать клиенты на свой компьютер и мобильные устройства и спокойно пользоваться облаком из локальной сети.

Для доступа через интернет есть ряд дополнительных, обязательных условий:

  • наличие сертификатов SSL на сайте малины для доступа по протоколу https. Это можно сделать платно (купить доменное имя, сертификат на домен и привязать их к вашему Ip адресу), а можно бесплатно;
  • наличие белого (статического) внешнего IP адреса у вашего доступа в интернет;
  • правильная настройка роутера.

Да, и еще…

Вам предстоит долгая мучительная увлекательная настройка Nextcloud. Кеширование, индексирование файлов, расписание cron, добавление дополнительных модулей — мессенджер Talk, фотомодуль Memories, музыка, радио, контакты, календарь, пароли, общие папки, офисный онлайн-редактор и т.д.

Зато когда все будет настроено и Вы увидите, что все работает, это даст массу положительных эмоций Вам и всем, кто будет пользоваться Вашим Личным Облаком.

Ссылки:

https://pimylifeup.com/raspberry-pi-nextcloud-server

https://dmitrysnotes.ru/raspberry-pi-3-sozdanie-sobstvennogo-oblachnogo-xranilishha-nextcloud

https://wiki.calculate-linux.org/ru/working_with_nextcloud

https://apps.nextcloud.com/

https://memories.gallery/config/

Your email address will not be published. Required fields are marked *

*