Привет, Хабр. У меня тут такая история случилась: накопился массив фотографий с путешествий, всяких документов, семейных архивов и учебных материалов по курсам — всего где-то 300 гигов. Всё важное, ценное, и, конечно, не хотелось бы всё это потерять.

В результате своего мини-исследования понял, что многие покупают физические серверы с дисками и на них устраивают хранилища, например, Nextcloud. Звучит удобно: можно настроить синхронизацию со всех устройств, не надо переживать за безопасность, потому что на сервере уже есть защита, и я полностью управляю своими данными. Одно «но» — для меня это дороговато. Получается, на средний вариант такого сервера и пары дисков, чтобы настроить рейд-массив, мне нужно 30 000–40 000 руб. первоначальных инвестиций. Опытные люди советуют еще делать резервные копии, значит, нужен внешний носитель — это еще тысяч 10 руб.

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

Nextcloud — платформа для создания собственного облачного хранилища дома или на работе. Судя по статьям в том числе здесь на Хабре, ее чаще устанавливают на компе или сервере.

А есть другой вариант: развернуть виртуальную машину в облаке, ��одключить S3-хранилище и установить на нем Nextcloud. Работать с хранилищем можно будет так же через интерфейс или мобильное приложение.

Отличие этого варианта в том, что оно не требует больших денежных вложений: хранилище размером до 15 ГБ будет стоить примерно 146 руб. в месяц, на мои 300 ГБ — примерно 650 рублей в месяц, от ТБ и выше — примерно 1 700 руб. в месяц.

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

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

Что будем делать и что нам понадобится

Какие сервисы будут нужны:

  • Виртуальная машина с free tier — бесплатная ВМ заданной конфигурации. Настройки поменять не получится, но ее ресурсов хватит для хранилища файлов Nextcloud.

  • Публичный IP-адрес для доступа к хранилищу через интернет — 146 рублей в месяц.

  • Объектное хранилище с free tier — бесплатные 15 ГБ в стандартном S3-хранилище каждый месяц. Если потребуется больше места, то хранилище будет платное.

  • Бесплатный сервис nip.io для получения публичного доменного имени и сертификата. Вы также можете использовать собственное зарегистрированное доменное имя и SSL-сертификат для организации доступа.

  • Nextcloud — бесплатное ПО с открытым исходным кодом на GitHub

Что будем делать:

  1. Развернем ресурсы в облаке.

  2. Настроим группу безопасности.

  3. Установим и настроим Nextcloud.

  4. Настроим доменное имя.

  5. Загрузим файлы в хранилище через Nextcloud.

  6. Проверим отображение файлов в Object Storage.

Что сделать перед началом работы:

  1. Зарегистрироваться в личном кабинете Cloud.ru. Если вы уже зарегистрированы, войдите под своей учетной записью.

  2. Получить ключи доступа Key ID и Key Secret.

Шаг 1. Разворачиваем ресурсы в облаке

На этом шаге создадим бесплатную виртуальную машину в сервисе Evolution Compute и бакет в S3-хранилище в сервисе Evolution Object Storage.

Создадим бесплатную виртуальную машину со следующими параметрами:

  1. В поле Название указы��аем название виртуальной машины, например, nextcloud-server.

  2. На вкладке Публичные выбираем образ Ubuntu 22.04.

  3. Назначаем публичный IP-адрес виртуальной машине —опцию Подключить публичный IP оставляем включенной. Для виртуальной машины будет арендован и назначен прямой публичный IP.

  4. В поле Логин указываем логин пользователя виртуальной машины, например, user1.

  5. Выбираем метод аутентификации — пароль.

  6. В поле Имя хоста указываем уникальное имя устройства, по которому можно идентифицировать виртуальную машину в сети, например, nextcloud-server.

Создадим бакет в S3-хранилище со следующими параметрами:

  1. В поле Название указываем название бакета в формате {name}-nextcloud-data, например, ivan-nextcloud-data.

  2. В поле Доменное имя указываем название домена в формате {name}-nextcloud-data, например, ivan-nextcloud-data.

  3. Выбираем Класс хранения по умолчанию — стандартный.

  4. Опционально указываем значение в поле Максимальный размер бакета.

  5. Выбираем из списка созданный бакет и сохраняем ID тенанта.

Проверим, что в личном кабинете:

  1. На странице сервиса Evolution Compute:
    – отображается виртуальная машина nextcloud-server;
    – статус виртуальной машины — Запущена;
    – виртуальной машине назначен публичный IP-адрес.

  2. На странице сервиса Evolution Object Storage отображается бакет {name}-nextcloud-data.

Шаг 2. Настраиваем группу безопасности

Группы безопасности позволяют контролировать входящий и исходящий трафик для создаваемых ресурсов. Мы настроим правила фильтрации трафика — разрешим весь входящий трафик по порту 443 (HTTPS) и весь исходящий трафик. 

Создадим новую группу безопасности со следующими параметрами:

  1. Выбираем Зону доступности, в которой необходимо разместить группу безопасности. Указываем ту же зону доступности, что выбрана для виртуальной машины nextcloud-server.

  2. Указываем Название группы безопасности, например, nextcloud-server.

  3. Добавляем правила входящего и исходящего трафика.

Правила входящего трафика:

Правило 1:
a. Протокол — TCP
b. Порт — 443
c. Тип источника — IP-адрес
d. Источник — 0.0.0.0/0

Правило 2
a. Протокол — TCP
b. Порт — 80
c. Тип источника — IP-адрес
d. Источник — 0.0.0.0/0

Правила исходящего трафика:

a. Протокол — любой
b. Порт — оставьте пустым
c. Тип адресата — IP-адрес
d. Адресат — 0.0.0.0/0

4. Назначаем созданную группу безопасности виртуальной машине nextcloud-server. Если в группе безопасности присутствуют другие виртуальные машины, исключаем их из группы.

Проверим, что в личном кабинете на странице сервиса Evolution Compute в разделе Сетевые параметры отображается группа безопасности nextcloud-server.

../_images/img__nextcloud__security-groups.png
../_images/img__nextcloud__security-groups.png

Шаг 3. Устанавливаем и настраиваем Nextcloud

Для настройки виртуальной машины будем использовать серийную консоль в браузере.

  1. Подключаемся к виртуальной машине nextcloud-server через серийную консоль.

  2. Обновляем индекс пакетов операционной системы и устанавливаем обновления пакетов:

sudo apt update -y
sudo apt upgrade -y

3. Устанавливаем пакет Nextcloud:

sudo snap install nextcloud

4. Выделяем объем памяти для Nextcloud:

sudo snap set nextcloud php.memory-limit=2048M

5. Включаем компрессию HTTP:

sudo snap set nextcloud http.compression=true

6. Создаем пользователя: указываем username и password:

sudo nextcloud.manual-install username password

7. Дожидаемся, когда появится надпись «Nextcloud was sucessfully installed».

Для настройки объектного хранилища:

  1. Подключаемся к виртуальной машине nextcloud-server через серийную консоль.

  2. Выполняем построчно команды для настройки хранения данных в объектном хранилище. Заменяем {ID тенанта}, {Key ID} и {Key Secret} на значения, полученные ранее.

sudo nextcloud.occ config:system:set objectstore class --value="\\OC\\Files\\ObjectStore\\S3"
sudo nextcloud.occ config:system:set objectstore arguments bucket --value="{name}-nextcloud-data"
sudo nextcloud.occ config:system:set objectstore arguments key --value="{ID тенанта}:{Key ID}"
sudo nextcloud.occ config:system:set objectstore arguments secret --value="{Key Secret}"
sudo nextcloud.occ config:system:set objectstore arguments hostname --value="s3.cloud.ru"
sudo nextcloud.occ config:system:set objectstore arguments port --value="443"
sudo nextcloud.occ config:system:set objectstore arguments use_ssl --value=true
sudo nextcloud.occ config:system:set objectstore arguments region --value="ru-central-1"

Для проверки корректности настройки выполняем команду:

snap changes nextcloud

В выводе команды будет информация об установке Nextcloud и изменении его конфигурации.

Шаг 4. Настраиваем доменное имя

Для создания доменного имени и SSL-сертификата используем сервис nip.io. Или можно взять собственный домен и SSL-сертификат.

1. Подготавливаем доменное имя вида {Публичный IP-адрес виртуальной машины nextcloud-server}.nip.io, например 1.1.1.1.nip.io.

2. Настраиваем доверенное доменное имя:

sudo nextcloud.occ config:system:set trusted_domains 1 --value={Публичный IP-адрес виртуальной машины nextcloud-server}.nip.io

Вывод команды

3. Настраиваем SSL-сертификат:

sudo nextcloud.enable-https lets-encrypt

a. Нажимаем y в ответ на вопрос «Have you met these requirements?»
b. Пишем свою почту.
c. Указываем домен вида {Публичный IP-адрес виртуальной машины nextcloud-server}.nip.io, например, 1.1.1.1.nip.io

Вывод команды

4. Пишем в браузере адрес {Публичный IP-адрес виртуальной машины nextcloud-server}.nip.io, например 1.1.1.1.nip.io.

Откроется страница авторизации Nextcloud.

Шаг 5. Загружаем файлы в хранилище через Nextcloud

Для проверки работы системы загрузим файл через браузер:

  1. Открываем в браузере {Публичный IP-адрес виртуальной машины nextcloud-server}.nip.io, например, 1.1.1.1.nip.io.

  2. Входим, используя username и password, который задали на шаге 3.

  3. Переходим в раздел Все файлы и загружаем любой файл.

  4. Проверяем, что файл появился в Nextcloud.

Для работы с Nextcloud через мобильный телефон:

  1. Скачиваем приложение Nextcloud.

  2. Нажимаем Войти и в качестве адреса сервера указываем {Публичный IP-адрес виртуальной машины nextcloud-server}.nip.io, например, 1.1.1.1.nip.io.

  3. В приложении отобразится загруженный через веб-интерфейс файл.

С загруженными через браузер и мобильный телефон файлами можно работать с любого удобного устройства.

Шаг 6. Проверяем отображение файлов в объектном хранилище

Проверим, что в качестве хранилища для файлов используется S3:

  1. В личном кабинете переходим на страницу сервиса Evolution Object Storage.

  2. Выбираем бакет, созданный на шаге 1.

В бакете будут служебные и загруженные файлы. Реальные имена файлов при этом заменены на служебные.

Результат

Вот и все, мы настроили и запустили собственный сервер в облаке для работы и обмена файлами на базе Nextcloud, а потом проверили его работу в браузере и на мобильном устройстве.

Если говорить про безопасность размещения в облаке файлов, которые могут содержать персональные данные, то здесь все ок. Главное, чтобы у облачного провайдера были необходимые сертификаты: Tier III и 152-ФЗ.

В общем все в облаке удобно и доступно. За сервер стоимостью 40 000+ руб., без учета электричества и интернета, я могу 5 лет сидеть в облаке со своими 300 ГБ. Но если бы у меня данных было больше, например, 1,5 ТБ, то облако было бы выгодным только первые два года. В общем на большие данные наверно стоит рассмотреть все-таки другой вариант хранилища. 

А вы где храните ваши фото, документы и другие файлы? Что можно рассмотреть, кроме Nextcloud?