Собственное облачное хранилище Nextcloud на Raspberry Pi 3

Raspberry Pi 3. Создание собственного облачного хранилища Nextcloud

Дата Автор Dmitry17 комментариев 6 561 просмотров

В продолжение цикла статей о практическом применении Raspberry Pi я публикую статью о создании персонального облачного хранилища на базе этого микрокомпьютера.

Это самая объемная и сложная статья из всего цикла публикаций о Raspberry Pi и Arduino на текущий момент. Мне пришлось потратить целый день на то, чтобы вникнуть в процесс установки и настройки персонального облака на базе Nextcloud, поскольку большинство имеющихся на просторах сети инструкций написано с ошибками.

Но результат того стоил. Облако заработало, а процесс его запуска был описан в этой статье, и при повторении приведенных тут инструкций запустить свое собственное облако удастся примерно за 30-60 минут.

Почему вам нужно собственное «облако»

Мы живем в странное время. С одной стороны, люди сейчас стали придавать большое значение безопасности личной информации. Wikileaks постоянно обнародует все новые и новые сведения о том, как правительства шпионят за своими гражданами. Появляются мессенджеры, главным достоинством которых является непробиваемое шифрование и полная приватность пользовательских переписок. Google и разработчики популярных браузеров в добровольно-принудительном порядке заставляют владельцев сайтов переходить с HTTP на защищенный HTTPS протокол.

А с другой стороны, те же самые люди почему-то абсолютно безалаберно относятся к такой вещи, как безопасность своих файлов, доверяя их хранение сторонним облачным сервисам типа Dropbox, Яндекс.Диск, OneDrive, iCloud. И их совершенно не беспокоит, что их данные находятся в чужих руках без каких-либо гарантий сохранности.

Можно ли доверять публичным облачным сервисам? Я просто перечислю несколько фактов:

  • Dropbox подвергался взлому и массовому хищению пользовательских данных;
  • Evernote подвергался взлому с получением доступа к пользовательским паролям и некоторой части хранившейся в сервисе информации;
  • Megaupload, некогда один из самых популярных в мире сервисов для загрузки и хранения файлов, закрылся после рейда ФБР, а хранившаяся информация была безвозвратно утрачена;
  • Apple iCloud подвергался взлому минимум дважды, и оба раза в открытый доступ попало множество личных фотографий голливудских звезд. Последняя атака на iCloud была проведена совсем недавно, после чего в сеть утекли приватные фото Эммы Уотсон и еще нескольких популярных актрис;
  • Wunderlist, один из самых популярных облачных менеджеров задач, в 2016 году «падал» по вине разработчиков, в результате чего сотни тысяч пользователей более чем на двое суток утратили доступ к своим данным;

Так стоит ли вверять свои приватные данные в руки компаний, которые исправно берут абонентскую плату за всякие премиальные функции и дополнительное дисковое пространство для хранения, но при этом ничего вам не гарантируют и не несут перед вами абсолютно никакой ответственности?

По-моему, ответ очевиден.

И если когда-то полноценной альтернативы публичным «облакам» не было вообще, то теперь она есть.

Эта альтернатива — облачные решения Owncloud и отпочковавшийся от него Nextcloud. Это надежные и не первый день существующие системы, использующиеся как в корпоративной среде, так и частными лицами. Они позволяют развернуть свое личное «облако» на своем собственном «железе», не теряя физического доступа к своей информации и не становясь заложником компании, осуществляющей управление «облаком».

Owncloud и Nextcloud зарабатывают на развертывании и поддержке своих решений в корпоративной среде с большим числом пользователей. Для частных лиц пользование системами полностью бесплатно (если не считать разовой покупки мобильного приложения за 75 рублей для пользователей iOS, что сущие мелочи). Нет никаких премиум-функций. Никакой абонентской платы. Никакого дополнительного дискового пространства за деньги. Вы разворачиваете систему на собственном сервере, и единственным ограничением является объем ваших жестких дисков.

А самое приятное — в качестве сервера для Owncloud/Nextcloud может выступать Raspberry Pi. Таким образом, пожизненное владение собственным облаком обойдется в стоимость покупки этого одноплатного компьютера.

Особых различий между Owncloud и Nextcloud нет. Но Nextcloud основан выходцем из компании Owncloud, развивается более активно и более перспективен для обычного (не корпоративного) пользователя, поэтому в данной статье будет рассматриваться именно это облачное решение.

Что умеет Nextcloud

Бегло перечислю основные функции облака Nextcloud:

  • Бесплатное облачное хранилище, объем которого зависит только от размера используемого накопителя информации
  • Доступ через веб-интерфейс
  • Клиентские приложения под Windows, Linux, Mac OS, Android, iOS, Windows 10 Mobile
  • «Календарь» и «Контакты» с поддержкой синхронизации по протоколу CalDAV/CardDAV
  • Поддержка протокола WebDAV для доступа к хранящимся в облаке файлам
  • Возможность шифрования хранящейся информации
  • Встроенный аудиоплеер, видеоплеер, просмотрщики текстовых и PDF-файлов
  • Галерея и просмотр изображения
  • Возможность добавления тегов и комментариев к файлам
  • Минималистичный редактор и органайзер заметок — аналог Simplenote
  • «Корзина», хранящая в себе удаленные файлы с возможностью их восстановления в течение некоторого времени
  • Возможность расшаривания общего доступа к файлам и папкам
  • Возможность работы как на сервере в интернете, так и в локальной сети без доступа к интернету вообще

Таким образом, Nextcloud позволяет взять в свои руки контроль и хранение своих файлов, своего календаря и своих контактов. Для полного комплекта не хватает только собственного менеджера задач. Вернее, он есть, но весьма примитивен и плохо адаптирован к работе с русским языком, поэтому можно сказать, что его нет. Но хочется верить, что в дальнейшем менеджер задач получит развитие, и пользуясь Nextcloud получится отказаться и от публичных облачных менеджеров задач.

Что нам понадобится

Для развертывания своего собственного облака на базе Raspberry Pi понадобится:

О том, как правильно подключить внешний жесткий диск к Raspberry Pi рассказано в этой статье, а об установке и настройке OS Raspbian можно прочитать в статье «Raspberry Pi 3. Обзор и начало работы».

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

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

Установка веб-сервера

Для Nextcloud требуется наличие работающего на «малине» веб-сервера.

Мой выбор — это Apache:

sudo apt-get install apache2

Хотя если вам удобнее, то можно использовать и Nginx. Но в этой статье, как и в статье про организацию электронной библиотеки на базе Raspberry Pi, я рассматриваю вариант именно с Apache.

Установка PHP 7

Для ускорения работы Nextcloud установим на Raspberry Pi PHP 7 — самую свежую версию интерпретатора PHP на данный момент.

По результатам многих тестов PHP 7 работает существенно быстрее PHP 5, но в официальных репозиториях Raspbian пакет с ним на данный момент отсутствует.

Поэтому добавим в Raspbian поддержку HTTPS-протокола (если она еще не установлена):

sudo apt-get install apt-transport-https lsb-release ca-certificates

И установим новый репозиторий:

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list

После чего обновим индекс пакетов:

sudo apt-get update

И установим PHP 7 со всеми необходимыми дополнениями:

sudo apt-get install php7.0 php7.0-curl php7.0-gd php7.0-json php7.0-mcrypt php7.0-mysql php7.0-opcache libapache2-mod-php7.0 php7.0-zip php7.0-dom php7.0-mbstring

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

php -v

Если установка PHP 7 выполнена корректно, то мы увидим примерно следующее:
Собственное облачное хранилище Nextcloud на Raspberry Pi 3

Теперь отключим PHP 5 (если ранее он был установлен) и включим интерпретатор PHP 7 в Apache:

sudo a2dismod php5
sudo a2enmod php7.0

Увеличение лимита загружаемых файлов в PHP

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

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

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

memory_limit = 128M
upload_max_filesize = 2M

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

memory_limit = 512M
upload_max_filesize = 512M

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

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

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

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

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

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

Собственное облачное хранилище Nextcloud на Raspberry Pi 3

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

sudo nano /etc/fstab

В котором нужно прописать следующие строки:

tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=30m 0 0

И перезагрузить Raspberry Pi для применения изменений:

sudo reboot

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

Собственное облачное хранилище Nextcloud на Raspberry Pi 3

Установка СУБД и создание базы данных

Nextcloud использует в своей работе базу данных. Тип используемой базы предоставляется выбирать пользователю.

Можно использовать SQLite — его достоинство заключается в том, что сама БД хранится в виде обычного файла, что облегчает возможность бэкапа.

Можно использовать MySQL, который работает в многопоточном режиме.

Можно использовать PostgreSQL, который является самой мощной из распространенных СУБД.

В теории MySQL лучше подходит для работы с Nextcloud именно благодаря своей многопоточности. На практике обычный пользователь скорее всего не заметит разницы между SQLite и MySQL. Использование же PostgreSQL для Nextcloud можно даже не рассматривать всерьез — это слишком навороченная СУБД для такой простой задачи, а при выполнении простых операций она будет работать медленнее, чем MySQL.

В этой статье я буду рассматривать работу с MySQL:

sudo apt-get install php7.0-mysql mysql-server

Во время установки сервера будет предложено ввести пароль для пользователя root:
Собственное облачное хранилище Nextcloud на Raspberry Pi 3

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

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

mysql -u root -p

Вводим пароль и попадаем в консольный интерфейс MySQL. В нем вводим следующие команды (команды вводятся построчно, после ввода каждой из них нажимается Enter):

CREATE DATABASE nextcloud;
CREATE USER nextcloud@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost;
FLUSH PRIVILEGES;
exit

Думаю из текста команд понятно, что в качестве ‘password’ задается пароль для доступа к БД.

Установка Nextcloud

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

Самую свежую стабильную версию Nextcloud и можно посмотреть здесь и подставить ссылку на ее скачивание в следующую инструкцию.

Итак, скачиваем и распаковываем архив с Nextcloud:

wget https://download.nextcloud.com/server/releases/nextcloud-11.0.2.zip
sudo mkdir /var/www/html/nextcloud
sudo mv nextcloud-11.0.2.zip /var/www/html/
cd /var/www/html/
sudo unzip -q nextcloud-11.0.2.zip

Теперь создадим папку для облачного хранилища и пропишем права доступа для пользователя www-data, под которым работает веб-сервер:

sudo mkdir -p /mnt/usbstorage/Nextcloud
sudo chown www-data:www-data /mnt/usbstorage/Nextcloud
sudo chmod 750 /mnt/usbstorage/Nextcloud
sudo chown 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 завершена.

Открываем интерфейс Nextcloud в браузере по адресу http://ip-адрес-raspberry-pi/nextcloud/. Если все сделано правильно, то появится экран, на котором нужно создать нового пользователя и указать каталог с данными:

Собственное облачное хранилище Nextcloud на Raspberry Pi 3

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

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

Собственное облачное хранилище Nextcloud на Raspberry Pi 3

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

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

Собственное облачное хранилище Nextcloud на Raspberry Pi 3

Интерфейс облачного хранилища:

Собственное облачное хранилище Nextcloud на Raspberry Pi 3

Встроенный календарь:

Собственное облачное хранилище Nextcloud на Raspberry Pi 3

И список контактов (пока пустой):

Собственное облачное хранилище Nextcloud на Raspberry Pi 3

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

Дополнительная информация

Официальные руководства Nextcloud

Можно ли сделать облако на Raspberry Pi доступным из интернета?

По инструкции из этой статьи у нас получилось облако, доступное внутри локальной сети по внутреннему IP-адресу этой локальной сети. Можно ли сделать его доступным с любого устройства через интернет?

Да, разумеется.

Для этого нужно победить динамический IP-адрес провайдера путем использования Dynamic DNS, пробросить порты на роутере для доступа непосредственно к «малине», зарегистрировать доменное имя и оформить на него SSL-сертификат для создания защищенного HTTPS-соединения.

А также задуматься о безопасности своего «облака», ведь любой объект с доступом по интернету является потенциально уязвимым. Ваше персональное облако будет менее уязвимо, чем публичный сервис, уже хотя бы потому что про него никто не знает, но тем не менее, риск остается.

Я не расписываю подробно момент с выводом доступа к приватному облаку на Nextcloud в интернет как раз потому что не обладаю достаточными познаниями в области защиты интернет-серверов. Но общие сведения я написал выше, кому очень надо — тот сможет найти подробности на других сайтах.

Как сделать бэкап (дамп) БД MySQL

Сделать бэкап базы данных Nextcloud можно при помощи консольной команды:

mysqldump -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p ПАРОЛЬ ИМЯ_БАЗЫ_ДАННЫХ > /путь/к/файлу/dump.sql

А восстановить эту БД из бэкапа в дальнейшем можно при помощи следующей команды:

mysql -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p ПАРОЛЬ ИМЯ_БАЗЫ_ДАННЫХ < /путь/к/файлу/dump.sql

Дальнейшее совершенствование личного облака

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

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

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

Однако, некоторые мысли по совершенствованию облака присутствуют уже сейчас. Для того, чтобы сделать его еще лучше, нужно:

  • настроить автоматический бэкап всех хранящихся в облаке файлов
  • настроить автоматический бэкап БД MySQL
  • зашифровать подключенный к Raspberry Pi жесткий диск целиком, дабы обезопасить информацию в случае попадания самого устройства в чужие руки

Пока у меня нет идей как сделать это, но когда они появятся — я напишу продолжение этой статьи.

Заключение

Вот так одноплатный компьютер, продаваемый за скромные $40, обрастает все новыми и новыми функциями. К функциям качалки торрентов, медиасервера и электронной библиотеки добавилось еще и персональное облако, обеспечивающее куда большую приватность, чем любой общедоступный облачный сервис.

На этом возможности Raspberry Pi не ограничиваются. В следующих статьях будут описаны другие варианты применения этого микрокомпьютера.

Raspberry Pi 3B (английская сборка)в интернет-магазине GearBest Raspberry Pi 3B (китайская сборка)в интернет-магазине GearBest

Понравилась статья? Выразите благодарность автору переводом любой суммы на ваше усмотрение :)

17 комментария на «Raspberry Pi 3. Создание собственного облачного хранилища Nextcloud»

  1. Поставил Nextcloud, но папку разместил на внешнем HDD с NTFS. И теперь при попытке входа пишет «Каталог данных (/mnt/usbdisk/Nextcloud) доступен для чтения другим пользователям. Измените права доступа на 0770, чтобы другие пользователи не могли получить список файлов этого каталога.»
    Но как я не пытался поменять — все равно остается 777. Как-то можно обойти эту проверку?

    • Вспомнил, тоже было такое.
      Надо в fstab прописать опции nofail,permissions к монтируемому диску. А потом или сам Nextcloud права доступа поставит какие ему надо или удастся вручную изменить на те, что он просит. По умолчанию (без опции permissions) линукс-системы почему-то не могут выставлять права доступа на ntfs-разделах.

      • Дописал в /etc/fstab в строку параметр, теперь эта строка выглядит так
        UUID=BAF23627548FCE73F92A /mnt/usbdisk ntfs nofail,permissions,uid=pi,gid=pi 0 0
        Но всё равно не могу поменять пермишины. Так и висит 777, ни через mc, ни через chmod на 770 не меняется.

        • Должно как-то меняться. У меня папка Nextcloud находится на внешнем NTFS-диске, тоже возникала эта проблема, но в итоге решилась вроде бы как раз прописыванием параметра permissions и перезагрузкой.

          Еще могу предположить, что надо:
          1) установить пакет ntfs-3g, если он не предустановлен в Raspbian по умолчанию (точно не помню этот момент)
          2) поменять владельца папки Nextcloud на www-data (chown -R www-data:www-data /mnt/usbdisk/Nextcloud)

  2. Добрый день!
    Возникла проблема при регистрации.
    «Правила файла .htaccess не выполняются. Возможно, каталог данных и файлы свободно доступны из интернета»
    Подскажите пожалуйста способы решения данной проблемы.

  3. Проблему исправил путем изменения прав командой сообщением выше «2) поменять владельца папки Nextcloud на www-data (chown -R www-data:www-data /mnt/usbdisk/Nextcloud)»

  4. Но появилась другая проблема: Ошибка при попытке создать пользователя admin: Не удалось подключиться к базе данных: В драйвере возникло исключение: SQLSTATE [HY000] [1045] Отказано в доступе для пользователя ‘nexcloud’ @ ‘localhost’ (using) password: yes

    • Я бы предположил, что во время создания БД неверно был задан один из основных параметров. Или опечатка в пароле (скорее всего), или опечатка в слове ‘localhost’, или пропущена строчка «GRANT ALL PRIVILEGES ….».

      Попробуйте создать новую базу данных (например, с именем nextcloud2), и при старте Некстклауда подключаться уже к ней.

  5. Вот Вы пишете, /tmp в RAM, это правильно в вашем случае (512 Мб лимит на загрузку), но этого сегодня мало. Хочется по 8 Гб иметь возможность заливать

  6. Ну и вообще пишут, что для современных SD карт можно взять 1000 циклов перезаписи за время жизни. Контроллер карты распределяет записываемые данные равномерно по всем доступным ячейкам. Т.е. целесообразно брать карточки побольше (32 Гб) чтобы они подольше жили. Тогда можно залить 8 гиговый файл 4000 раз :) А ваш 512-меговый 64 000 раз. Если Вы будете заливать по 1 такому файлу в день, карты хватит на 175 лет. Если заливать по 8 гиг в сутки, на 11 лет.

    • Понятно :).
      Не знал, что ресурс карточки измеряется в циклах перезаписи всего объема. Я думал, что есть просто некий лимит (достаточно большой) операций чтения-записи и все.

    • Добрый день.
      Я просто не знал о существовании такого пакета на момент знакомства с Raspberry Pi, а дальше уже привычным стало описывать установку его составляющих по отдельности.

      Ну и в данном случае был выбран PHP 7 из-за более высокой скорости работы, а в состав LAMP наверное входит PHP 5.6, так что все равно пришлось бы доустанавливать его отдельно.

      • Понял.
        Еще вопрос, если есть возможность посмотреть (проверить), какие данные позволяет забекапить клиент Nextcloud для IOS?
        В частности меня интересует автоматический бекап фото с телефонов по воздуху.

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

    Я ввожу данные жму «Завершить установку». Он говорит что пользователь уже используется
    Смотрел в phpmyadmin пользователь создан.
    Почему не открывается приветственное окно с предложением загрузить мобильные и десктопные клиенты, а пишет ОШИБКА имя пользователя уже используется?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *