Свое облачное хранилище на windows

Доброго времени суток! С уходом компаний я задался вопросом: «что делать, если прикроют мой любимый Google Drive?». Понятно, что есть аналоги – Яндекс.Диск и Облако Mail.ru, но оба бесплатно предоставляют только 8 гб дискового пространства, а дальше жесткая тарификация, в то время как Google дает 15 и стоит дешево. «А так, чтобы бесплатно?». Выяснилось, что существует [достаточно много open-source решений]() для домашнего и корпоративного использования. Одним из самых популярных и навороченных является система NextCloud, представляющая собой набор программ и модулей для развертывания своего полноценного облачного хранилища. NextCloud Server даже предлагается для скачивания во время установки Ubuntu Server.

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

Что полезного содержит эта статья.

  • Запуск NextCloud в докере на Windows и Linux.

  • Запуск NextCloud на домашнем компьютере. Проблемы, ограничения.

  • Запуск NextCloud для тестирования. Приобретение понимания, нужен ли этот продукт.

  • Анализ целесообразности развертывания облака дома.

  • Подробный разбор параметров контейнера NextCloud AIO.

  • VPN-тоннель домой с использованием сервиса Hamachi. Обход проблемы отсутствия белого ip.

  • Настройка reverse-proxy на базе Nginx, Apache или Caddy.

  • Запуск HTTPS-сервера на домашнем компьютере.

  • Получение SSL-сертификата с помощью сервиса letsencrypt.

  • Краткий разбор форматов SSL-сертификатов.

  • Настройка файервола в Windows.

Стэк.

Домашняя машина, на которой запущен NextCloud: Windows 10, Docker, образ NextCloud AIO, Hamachi-клиент для Windows, PuTTy.

Reverse-proxy-сервер: Ubuntu Server, certbot, Nginx, или Apache, или Caddy, консольный Hamachi-клиент для debian.

Ключевые слова.

NextCloud, NextCloud-AIO, reverse-proxy, Nginx, Apache, Certbot, Hamachi, localhost, Windows, Defender, SSL, HTTPS дома.

Содержание.

  • Целесообразность

  • Об образе NextCloud AIO

  • Этап 1. Настройка VPN

  • Этап 2. Получение SSL-сертификата

    • Покупка

    • Самописные сертификаты certbot

  • Этап 3. Настройка reverse-proxy

    • Apache

    • Nginx

    • Caddy

    • Тестирование

  • Этап 4. Запуск NextCloud AIO в Docker

    • Переменные окружения

    • Volumes

    • Порты

    • Пояснения к опциям docker run

    • Запуск

    • Первичная настройка

    • Не работает domaincheck

  • Этап 5. Фаервол

  • Инструменты Windows для диагностики сетевых интерфейсов

  • Заключение

Целесообразность.

Зададимся вопросом: а надо ли оно нам? Когда я приступал к настройке в первый раз, не зная особенностей этого программного комплекса, я бы однозначно ответил «да». Собственно, проблема стояла четко, и ее надо было преодолеть. У меня была техническая возможность и пометка в документации, что это развернуть NextCloud дома возможно. Но действительность оказалась, как всегда, скажем, другой. Сравним ожидание и реальность:

Ожидание:

  • Использование своего железа: большие объем диска и ОП, быстрый процессор.

  • Сервер установлен на той же машине, с которой осуществляется подключение loopback (localhost), следовательно, доступ к файлам мгновенный, как при использовании средств просмотра.

  • Быстрый доступ (до 100 Мбит/с) со всех устройств в квартире, находящихся в локальной Wi-Fi- или Ethernet-сети: ПК, ноутбука, планшета, смартфона, часов, холодильника – для всей семьи.

  • Быстрое добавление файлов и внесение изменений на диск с помощью домашнего компьютера, минуя сетевые операции, например, копирование с флэшки или переносного диска.

  • Доступ к файлам на ПК из любой точки мира с шифрованием.

  • Авторизация подключений путем добавления пользователей в сеть VPN.

  • Гибкая настройка доступа с помощью дополнительных модулей NextCloud для авторизации.

  • Клевые расширения: сервис авторизации через соцсети, аналоги Google Meets, Google-карт и Google-календаря, таск-трекеры и т.д. — все в одном месте —  прямо как у «корпорации добра».

  • OpenSource, а значит, поддержка на форумах, постоянные обновления.

  • Все бесплатно, исключая затрат на железо: нет платы за ПО и аренду диска в облаке.

  • Не надо настраивать файервол, т. к. vpn — это частная сеть.

Реальность:

  • Отсутствие дистрибутива сервера NextCloud под Windows. Придется разворачивать на VM или в Docker. Но есть Windows-клиент. Однако, основным является браузерный клиент, а он кроссплатформенный.

  • NextCloud обязывает завести домен несмотря на то, что часто достаточно было бы подключаться по VPN. Его нельзя запустить на localhost (127.0.0.1) или другом IP без домена.

  • SSL. В принципе на этом можно было бы закончить. В репозитории NextCloud прямым текстом говорится о том, что концепция этой утилиты состоит в работе только с прокси по HTTPS. К сожалению, обязательная привязка к SSL перечеркивает все преимущества, основанные на быстром доступе по следующим причинам:

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

    • Белый IP требует денежных вложений, чего изначально я пытался избежать. За внешний сервер даже самый слабый так же нужно платить аренду. Кроме того, согласно документации NextCloud’а не желательно, чтобы само облачное хранилище работало на том же хосте, на котором хранятся SSL-сертификаты, так что придется настраивать reverse-proxy. Я арендовал самый дешевый сервер: за 400 рублей в месяц, 1 ядро, 1 Гб, 32 Гб – супер-невыгодное предложение (об этом далее). Это уже дороже, чем подписка Google Drive (от 140 рублей за 30 Гб до 700 за 2 Тб). В идеале, стоило бы разместиться у друга или на выделенном сотрудникам сервере в офисе компании, в которой Вы работаете (обязательно проконсультируйтесь у сисадмина по устранению уязвимостей, связанных с работой VPN).

    • Сервер с 1 ГБ виртуальной ОЗУ тормозит (утилита top показывает загрузку 70-90%), и не может скомпилировать даже небольшой проект, а в режиме reverse-proxy с трудом способен обеспечить доступ 2-м клиентам одновременно, хотя значительную задержку вносят операции на моем HDD (чтение HDD происходит со скоростью около 30 Мбит/с).

    • Большая задержка по сети: трафик идет от клиента в датацентр, где развернут прокси, а оттуда ко мне домой, при этом пропускная способность датацентра, как водится, отличная, а ADSL-линия (старая технология доступа в интернет по телефонным проводам), протянутая ко мне провайдером, обеспечивает скорость входящих пакетов (на скачивание) всего 40 Мбит/с, и если я не ошибся в определении технологии, используемой провайдером, скорость исходящих пакетов (выгрузка в интернет, т.е. максимальная скорость доступа к моему «облаку») ограничена где-то 10 Мбит/с, когда обычная jpeg-картинка весит 4.2 Мб.

    • SSL-сертификат иногда выписывается при оплате домена, но в других случаях требует отдельной покупки. Однако его можно выписать себе самому. Самописные сертификаты не принимаются современными браузерами или принимаются ограниченно. Преимущество NextCloud состоит в том, что он умеет самостоятельно решать эту проблему, но только если не используется свой reverse-proxy.

  • Использование виртуальной машины накладывает ограничение на работу с облачным хранилищем напрямую через диск: все изменения в хостовой ФС NTFS должны быть проиндексированы (продублированы) в гостевой ФС Ext4. Хорошая новость состоит в том, что это не препятствие: перемещаем папку с ДЗ 30 Гб в папку NextCloud/data/<user>/files и создаем директорию с таким же названием через веб-клиент (в документации называется UI-client); однако иногда выскакивают предупреждения о невозможности выполнения операции особенно при удалении. На деле, мы всегда знаем, что ничего никуда не удаляется, а файлы просто перемещаются по диску в т. ч. в корзину.

  • Нужно не забыть настроить файервол как на домашнем компьютере, так и на reverse-proxy сервере.

  • Прежде чем приступать к настройке облака через веб-панель администратора, надо обязательно обеспечить доступ на сервер по порту 443. Этого требует NextCloud. Главная проблема при работе сервера на домашнем компьютере связана с этим. В Windows и Linux открыть для входящих соединений зарезервированные порты 0-1024 можно только лишь с правами администратора через настройки файервола. 443 порт может быть также заблокирован роутером. В Windows придется еще повозиться с политиками безопасности, в т. ч. групповыми. Прокси сервер и Docker тут кстати: можно настроить проброс портов и обойти эти трудности.

  • Когда я запустил сервер и установил клиент, я понял, что создатели NextCloud не предполагали использование их утилиты именно таким образом: клиент первым делом предлагает настроить синхронизацию с облаком, но ведь диск с файлами уже находится в этой же системе.

  • Установка программного комплекса NextCloud только для пользования в ЛВС нецелесообразна, т. к. локальная сеть — это изолированная система без возможности принимать входящие подключения, а значит, смысл облака теряется. В таких случаях требуется настроить шлюз с белым IP-адресом. Для работы чисто в ЛВС, возможно, достаточно настроить совместный доступ к папкам на диске NTFS и включить сервер RPC (стандартная возможность в Windows).

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

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

Если Вам важно наличие именно функций NextCloud’а, некоторые люди на форумах предлагают поднять локальный DNS-сервер. Я пытался сделать и это, но такое решение не избавляет от необходимости подтверждать SSL-сертификат и разворачивать reverse-proxy, зато добавляет еще одну задачу по конфигурированию DNS в ЛВС. Если Вы решитесь пойти этом путем, посмотрите на bind9.

Итак, поставим задачу.

Задача

Хостинг NextCloud в локальной сети на Windows. Берем образ NextCloud AIO (all-in-one – англ. все в одном) – образ со всеми необходимыми утилитами.

Ресурсы

Наша библия для этого гайда – документация в репозитории.

Есть и другие варианты установки (листать до DOWNLOAD SERVER).

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

Мне очень помог этот гайд на youtube. Автор подробно объясняет, как будет работать итоговая система с точки зрения сисадмина. Он прошел через все этапы, настройки, которые затрагиваются в этом гайде. Единственное, он не рассказывает, как он установил сам NextCloud Server на свою машину. Кроме того, он использует Apache вместо Nginx и OpenVPN вместо Hamachi, не затрагивает тему Docker-контейнера NextCloud AIO.

На youtube, я не нашел гайдов, как запустить Docker-образ NextCloud AOI на локальной машине. А жаль, ведь есть много камней вроде выбора портов. Все развертывают NextCloud на внешнем арендованном сервере. Тем не менее, эти гайды демонстрируют, как правильно настроенный сайт выглядит в браузере.

Если Вы не знакомы с Docker, то для этого гайда это не критично. Но я все же посоветую посмотреть какой-нибудь гайд по запуску сервера в docker-контейнере. Бегло ознакомится стоит также с docker-compose.

Об образе NextCloud AIO.

Чтобы понять, что и для чего делается дальше, нужно пояснить, что входит в поставку образа NextCloud AIO. Если запустить этот контейнер, как сказано в документации, получим несколько дополнительных:

Рис. 1. Контейнеры, порожденные nextcloud-aio-mastercontainer.

Рис. 1. Контейнеры, порожденные nextcloud-aio-mastercontainer.
  • nextcloud-aio-mastercontainer – главный контейнер, в который превращается с образ NextCloud AI при запуске.

  • nextcloud-aio – основное приложение и веб-клиент к нему.

  • nextcloud-aio-redis – кто бы мог подумать, редис.

  • nextcloud-aio-database – контейнер, обеспечивающий соединение с БД. После установки будет предложено подключить свою: postgres, mysql или создать sqlite.

  • nextcloud-aio-apache – контейнер, обеспечивающий подключение ssl-сертификатов. Работает как reverse-proxy. Принимает HTTPS-запросы на порту 443 и передает их HTTP-версию на обработку в контейнер с основным приложением. Также, генерирует ssl- сертификаты. Самое интересное, что внутри контейнера, который называется nextcloud-aio-apache используется еще и готовый reverse-proxy Caddy. Caddy позволяет запустить HTTPS-сервер с самописными сертификатами с помощью однострочного конфига. Внутри себя запускает утилиту certbot, о которая также затрагивается в этом гайде (этап 2). Функционал этого контейнера не используется целиком, если подключаем внешний прокси-сервер. В этом гайде расписано, как это работает в этапе 2 и этапе 3.

  • nextcloud-aio-domaincheck – в этом контейнере обрабатываются ACME DNS Challenge-запросы для подтверждения самописанных ssl-сертификатов, если не используется внешний прокси. См. этап 2 вариант 2.

  • nextcloud-aio-callabora и nextcloud-aio-talk – дополнительные модули NextCloud. Их будет предложено подключить по окончании настройки.

На reverse-proxy не стоит обращать внимания. Это «имя проекта» — имя директории, где лежит docker-compose.yml.

Этап 1. Настройка VPN.

VPN позволит принимать соединения на домашнем компьютере без приобретения белого ip-адреса у провайдера.

Буду использовать Hamachi. У него хороший десктоп-клиент на Windows и есть консольный на Linux. Можно использовать любой другой VPN: например, в этом гайде используется аналог —  OpenVPN.

Ставим клиент на Windows. Создаем сеть, даем ей имя и пароль.

Переходим в Настройки -> безопасность. Ставим: Шифрование – включено, Сжатие – любой. Переходим в Дополнительные -> Соединения с одноранговым узлом -> фильтрация трафика — разрешить все.

Рис. 2. Параметры Hamachi.

Рис. 2. Параметры Hamachi.

Фильтрация трафика – это по сути файервол. Hamachi добавит новую (виртуальную) сеть, которая для ОС аналогична полноценному сетевому интерфейсу, т.е. в компьютере как бы появится новая сетевая карта. Посмотреть на нее можно в панели управления: Панель управления -> Сеть и Интернет -> Центр управления сетями и общим доступом:

Рис. 3. Виртуальный интерфейс Hamachi в Панели управления Windows.

Рис. 3. Виртуальный интерфейс Hamachi в Панели управления Windows.

Также можно увидеть этот интерфейс, введя в консоль или powershell, запущенную от имени администратора (Win+X -> Windows PowerShell от имени администратора) команду ipconfig:

Рис. 4. Виртуальный интерфейс Hamachi в утилите ipconfig.

Рис. 4. Виртуальный интерфейс Hamachi в утилите ipconfig.

На этой сети может работать встроенный файервол Windows (Defender). Его настроим в конце. 

Перейдем на Ubuntu-сервер. Я для этого использую клиент PuTTy.

На reverse-proxy-сервере достаточно подключиться к нашей сети как клиент (показано для Debian/Ubuntu (Про установку в CentOS):

wget http://www.vpn.net/installers/logmein-hamachi_2.1.0.165-1_amd64.deb
sudo dpkg -i logmein-hamachi_2.1.0.165-1_amd64.deb
# подключение к сети > в графическом клиенте появится новый участник
hamachi join <network id> <password>
# включение автозагрузки сервиса 
sudo systemctl enable logmein-hamachi

Теперь можно проверить работу VPN-тоннеля. Либо на сервере, либо на домашнем ПК наберите ping <ip домашнего ПК или ip сервера, который выдал Hamachi>. Также это можно сделать в графическом клиенте Hamachi: ПКМ по участнику сети -> Проверить доступность.

Рис. 5. Сообщение утилиты ping, говорящее о наличии соединения.

Рис. 5. Сообщение утилиты ping, говорящее о наличии соединения.

Этап 2. Получение SSL-сертификата.

Если хотите использовать Caddy в качестве reverse-proxy, этот этап можно пропустить. Главное, чтобы Ваш сервер был доступен в интернете (имел белый ip), т. к. Caddy внутри себя использует certbot (см Этап 2. Вариант 2 ниже). Более того, при использовании образа NextCloud AIO на той же машине, где развернут сам NextCloud Вам не требуется его настраивать, т.к. он входит в образ.

Вариант 1. Покупка сертификата.

Покупаем сертификат. Получаем 2 файла: fullchain-сертификат и приватный ключ, переводим их в формат .pem. Тут и далее будем называть их fullchain.pem и privkey.pem. Для Apache еще нужен будетpublic.pem с публичным ключом.

Примечание. В основном встречаются 3 типа форматов ключей: .pem, .crt, .cer, .key. Расширение файла не имеет значения. Имеют значение блоки в них. Подробнее тут. Центр выдачи сертификатов, например, reg.ru, даст Вам 5 файлов следующего вида:

Публичный сертификат

——BEGIN CERTIFICATE——

<много букв и цифр>

——END CERTIFICATE——

Корневой сертификат
——BEGIN CERTIFICATE——

<много букв и цифр>

——END CERTIFICATE——

Промежуточный сертификат
——BEGIN CERTIFICATE——

<много букв и цифр>

——END CERTIFICATE——

Запрос на получение сертификата
——BEGIN CERTIFICATE REQUEST——

<много букв и цифр>

——END CERTIFICATE——

И приватный ключ

——BEGIN RSA PRIVATE KEY——

<много букв и цифр>

——END RSA PRIVATE KEY——

Из конечного, промежуточного, корневого сертификатов в обычном блокноте нужно собрать fullchain, а приватный ключ записать отдельно. Если используете Apache, вынесете также отдельно публичный сертификат в файл public.pem. Если чего-то для fullchain не хватает, вставляйте то, что есть, главное, чтобы был корневой или промежуточный.

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

Промежуточные сертификаты. Любые виды цепочек сертификатов. Тоже имеют право удостоверять (подписывать) другие сертификаты.

Сохраняем 2 файла в папку /certificates на сервере. В PuTTy вставка текста осуществляется через ПКМ.

Вариант 2. Генерация самописного сертификата с помощью сервиса letsencrypt и утилиты certbot.

apt update
apt install -y software-properties-common
apt update
apt install -y certbot
certbot certonly -d www.<Ваш домен>,<Ваш домен> --agree-tos –n
certbot certificates
certbot renew --dry-run

Первые 4 команды обновляют репозитории для скачивания и устанавливают утилиту certbot. Команда на пятой строке говорит сгенерировать или обновить сертификат (certbot certonly) для доменов <Ваше доменное имя> с доменом верхнего уровня www и без него (вводить домены через запятую) (-d www.<Ваш домен>,<Ваш домен>) в неинтерактивном режиме для пропуска всех вопросов (certbot -n), соглашаясь с лицензионным соглашением ACME DNS Challenge (certbot --agree-tos). Предпоследняя покажет, в какую директорию certbot записал сертификаты. Последняя команда просит автоматически обновлять сертификаты по их истечению. Сами по себе сертификаты действительны 3 месяца.

Возможно, Вам также пригодятся следующие флаги команды certbot:

-m <email> — сюда будут приходить уведомления о состоянии сертификата, например, напоминания о том, что его надо продлить.

--webroot <путь> — certbot положит сертификаты в эту папку. Удобно, если уже есть развернутый сервер.

ACME DNS Challenge – это специальный стандарт проверки доменов, которые использует letsencrypt. Это накладывает дополнительные ограничения. Например, эти сертификаты не будут работать на собственном DNS, ведь для их подтверждения на Ваш сервер будет приходить запрос от letsencrypt по url, начинающимся на _acme-challenge или .well-known/acme-challenge. Надо научить сервер правильно на него отвечать. Это для нашей задачи вообще не понадобится, но кому интересно, подробнее тут. В Nginx-конфиге, например, поддержку ACME через HTTP можно осуществить, добавив что-то вроде

location ~ .well-known/acme-challenge {
    allow all;
    root /usr/share/nginx/html;
} 

От выбора способа получения сертификата в нашем случае зависит не только положение ключей на диске (будем считать, что они лежат в /certificates). В случае с certbot’ом, если Вы используете Nginx, надо будет немного изменить конфиг (об этом в конфиге ниже).

Этап 3. Настройка reverse-proxy.

Образ NextCloud AIO поддерживает внешний reverse-proxy как опцию и требует, связать его и порт машины, где развернут контейнер Apache, входящий в поставку NextCloud AIO, а для этого надо указать переменную среды для контейнера APACHE_PORT с номером этого порта. В конфиге прокси-сервера требуется все внешние HTTPS-запросы перенаправлять на этот порт. Он может быть любым, но в документации используется 11000. Его и укажем. Итак, перенаправляем HTTP-запросы (порт 80) на HTTPS (443), а HTTPS 443 на HTTP11000. Таким образом, любой запрос в браузере к нашему домену, где явно не указан порт, будет приходить на порт 11000 машины, где развернут контейнер NextCloud AIO.

Вариант 1. Reverse-proxy на базе Apache

Наглядно процесс настройки показан в том ролике, на который я ссылался ранее. Конфиг ниже взят из него.

# файл apache.conf – конфиг, как в видеоролике

<VirtualHost *:80>
    ServerName www.<домен>
  
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>


<VirtualHost *:443>
    SSLEngine on
    RequestHeader set X-Forwaded-Proto "https"
    SSLCertificateFile /certificates /public.pem
    SSLCertificateKeyFile /certificates /privkey.key
    SSLCertificateChainFile /certificates /fullchain.crt
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
    SSLHonorCipherOrder on
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

    ServerName www.<домен>

    ProxyPreserveHost On
    ProxyPass / http://<ip домашнего компьютера в сети hamachi>:11000/
    ProxyPassReverse / http://<ip домашнего компьютера в сети hamachi >:11000/
</VirtualHost>

Можно попробовать альтернативный конфиг, представленный в документации.

Установим сам Apache и активируем конфиг.

apt update
apt install apache2

# Создаем или перемещаем конфигурационный файл в правильную директорию
mv <домен>.apache.conf /etc/apache2/sites-available/<домен>.conf

# Подключаем модули для работы с https в режиме проксирования
a2enmod proxy rewrite ssl headers proxy_http

# По умолчанию Apache уже имеет конфиг с базовым сайтом-пустышкой.
#Отключаем. И подключаем свой.
a2dissite 000-default.conf
a2ensite <домен>.apache.conf

# Проверка конфига
apachectl configtest

# Если выскочит предупреждение о том, что apache не знает имени сервера,
# выполним следующие 3 команды (необязательно):
chmod 777 /etc/apache2/apache2.conf
echo -e "$(cat /etc/apache2/apache2.conf)\nServerName <любое имя>" > /etc/apache2/apache2.conf
chmod 644 /etc/apache2/apache2.conf

# Обязательно перезапускаем apache
service apache2 restart  # или systemctl restart apache2

Развернуть Apache сервер для теста с NextCloud можно, например, в докере, воспользовавшись docker-compose.

# docker-compose-apache.yml
services:
  apache-reverse-proxy:
    image: php:7.4-apache
    restart: unless-stopped
    container_name: apache
    volumes:
      - ./certificates:/certificates
      - ./apache.conf:/etc/apache2/sites-available/apache.conf
    ports:
      - "80:80"
      - “443:443” 
      - "11000:11000"
    network_mode: 'host'
    tty: true
    command: bash -c "
      chmod 777 /etc/apache2/apache2.conf
      && echo -e \"$$(cat /etc/apache2/apache2.conf)\\nServerName www.sabernews.ru\" > /etc/apache2/apache2.conf
      && chmod 644 /etc/apache2/apache2.conf
      && a2enmod proxy rewrite ssl headers proxy_http
      && a2dissite 000-default.conf
      && a2ensite sabernews-nexcloud.apache.conf
      && service apache2 restart
      && apachectl configtest
      && apt update
      && apt install -y net-tools
      && tail -f /dev/null
      "

  nextcloud:
    image: nextcloud/all-in-one:latest
    restart: unless-stopped
    container_name: nextcloud-aio-mastercontainer
    ports:
      # про порты для nextcloud далее
      - "8080:8080"
      - "80:80"
      - "11000:11000"
      - "8443:8443"
    environment:
      - NEXTCLOUD_DATADIR=nextcloud_aio_nextcloud_datadir
    volumes:
      - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
      - //var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - apache-reverse-proxy

volumes:
  nextcloud_aio_mastercontainer:

Вариант 2. Reverse-proxy на базе Nginx

Лично я использовал сервер, на котором был запущен другой веб-сайт, работающий на Nginx, а значит порты 443 и 80 уже были заняты. Как уже отмечалось выше, NextCloud’у обязательно нужен 443 порт. Однако домены разные, а значит, надо просто дополнить конфиг Nginx следующими строчками, которые будут работать и как самостоятельный конфиг-файл:

# <домен>.nginx.conf
# -> нужно поместить в /etc/nginx/nginx.conf

http {

## reverse-proxy
  server {
    listen 80 default;
    server_name www.<домен>;
    access_log off;
    error_log off;
    return 301 https://$server_name$request_uri;
  }

  server {
    server_name www.<домен>;
    listen 443 http2 ssl;
    access_log  /root/reverse-proxy/access.log;

    ssl_certificate     /certificates/fullchain.pem;
    ssl_certificate_key /certificates/privkey.pem;
    # эти строчки требуются для правильной работы сертификатов сертбота
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY13305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";

    location / {
      add_header Cache-Control "public, must-revalidate";
      add_header Front-End-Https on;
      add_header Strict-Transport-Security "max-age=2592000; includeSubdomains";
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass http://<ip>:11000;    }
  }
#server ## reverse-proxy

} # http

В документации написано, что конфиг, представленный там, может не работать. Он действительно не работает из-за строчки proxy_set_header Host $host;, которая сохраняет заголовок Host HTTP, содержащий ip-адрес клиента. Это стандартное решение для прокси-серверов, иначе бекенд не сможет отличать клиентов по этому заголовку, если требуется. Однако в режиме reverse-proxy, когда прокси сервер перенаправляет через себя как запросы клиентов, так и ответы бекенда: и то, и то для прокси сервера является входящими сообщениями, которые подлежат обработке. Nginx опирается на Host, чтобы их различать. Если подменить хост, то это приводит к бесконечному перенаправлению запросов.

Запустим Nginx:

mv <домен>.nginx.conf /etc/nginx/nginx.conf
# тестируем конфиг
nginx –t
# Обязательно перезапускаем nginx
service nginx restart  # или systemctl restart nginx

Вариант 3. Caddy reverse-proxy

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

# Caddyfile

https://<домен>:443 {
    reverse_proxy <ip>:11000
}

Проверка работы

Остается протестировать. Я написал простой сервер на NodeJS для этого.  Для запуска Вам понадобится установить node.

// server.js
const http = require("http");

const host = '0.0.0.0';
const ports = [80, 443, 8443, 11000, 8080];

const servers = ports.map((port) => {
  try {
    return [http.createServer((req, res) => {
      console.log(`[${port}]`, req.url, '  |', req.headers['user-agent'].slice(0, 20), '|   ', req.headers['x-forwarded-for']);
      req.on('error', (err) => {
        console.error(err);
      });

      res.writeHead(200);
      res.end(`served by ${port}\n${req.headers["user-agent"]}\n`);
    }), port];
  }
  catch (err) {
    console.error(err);
  }
});


servers.forEach(([server, port]) => {
  try {
    server.listen(port, host, () => {
      console.log(`Server is running on ${host}:${port}`);
    });
  }
  catch (err) {
    console.error(err);
  }
});

Здесь запускается прослушка 5 портов (они перечислены в массиве на строке 5). Запустим на домашнем компьютере:

node server.js

Перейдем в браузер и вобьем: http://localhost:80, http://localhost:443  и т.д. – будет отображаться надпись с тем портом, на который мы подключились и Ваши текущие user-agent, и ip-адрес в заголовке Host. Обратите внимание, что протокол здесь только HTTP, и значка с замочком в браузере при таком подключении не появится.

Теперь заменим строку 4 const host = '0.0.0.0'; на  const host = '<ip-адрес ПК в сети Hamachi>'. Перезапустим: Ctrl+C и снова node server.js. Подключиться теперь можно только по портам 80 и 443, т.к. наш конфиг прокси сервера (любой из 3-х представленных выше) указывает ему перенаправлять запросы с порта 80 на порт на 443, а к запросам с порта 443 подключать сертификат и перенаправлять его на порт 11000 по протоколу HTTP, поэтому вбив <ip>:80, http://<ip>, <ip>:443 или https://<ip>(ip — это ip-reverse-proxy-сервера), или www.<домен>, увидим что-то вроде:

Рис. 6. Проверка прокси.

Рис. 6. Проверка прокси.

Хоть мы и не подключались явно к порту 11000, сервер принял запросы на нем, что отображено в ответе. Обратите внимание на замочек – установлено HTTPS-соединение.

Этап 4. Запуск NextCloud AIO в Docker.

Переменные окружения

У данного образа есть две основные опции, которые передаются как переменные окружения:

  • NEXTCLOUD_DATADIR – абсолютный путь до директории, а в случае с Windows, константная строка “nextcloud_aio_nextcloud_datadir” – это имя того docker-volume, в которой будут записаны все файлы пользователей и системные файлы, необходимые для функционирования NextCloud. Соответственно, надо будет предварительно создать этот volume.

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

    Обратите внимание на простые правила преобразования пути. Абсолютный путь в Windows C:\NextCloudData превращается в host_mnt/c/NextCloudData.

  • APACHE_PORT – переменная уже затрагивалась выше. Это номер порта, на который пересылает запросы Ваш reverse-proxy.

  • SKIP_DOMAIN_VALIDATION=true – выставить, если есть неразрешимые проблемы с тем, что NextCloud неправильно определяет домен, на котором запущен. Это будет понятно после первой настройки. В документации указано, что пользоваться этим надо только в крайнем случае, если Вы уверены, что всё остальное было сделано правильно. В этом гайде пользоваться этим флагом не нужно. Ниже приведены советы, что делать, если не получается запустить NextCloud.

Volumes

Есть 2 фиксированных имени вольюмов, которые нам понадобятся.

  • nextcloud_aio_nextcloud_datadir – директория, где будут содержаться все файлы в облаке NextCloud. См пояснения выше к переменной NEXTCLOUD_DATADIR.

  • nextcloud_aio_backupdir – директория, куда будут помещаться архивы с копиями состояния облака, если Вы захотите использовать эту функцию. История точно такая же как с nextcloud_aio_nextcloud_datadir: проверить, что путь существует, и соблюсти формат преобразования.

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

Порты контейнера

Контейнер на образе NextCloud AIO использует 3 порта, которые согласно документации, нужно указать при запуске контейнера:

  • 8080 порт используется для первичной настройки NextCloud. Там будет панель администратора.

  • 80 порт – единственный, который предназначается для взаимодействия с веб-приложением непосредственно. Соответственно, это протокол HTTP. Напомню, что все сторонние запросы  к системе переводятся на HTTPS нашим прокси и поступают на 11000 порт контейнеров, которые уже внутри, неявно для нас, переведут их на 80 порт на обработку приложением.

  • 8443 порт должен использоваться для обновления самописного сертификата. Лично я с этим не работал, и не могу ничего сказать.

Как говорилось выше, на домашней машине будет непросто открыть порт 80. Да это и не нужно, когда докер представляет нам простой механизм переадресации портов. Я просто использовал порт 9090 вместо 80. Также я подменил порт 8080 в мастер-контейнере на 9880, т.к. иногда использую порт 8080 моего ПК при разработке своих серверов, и подменил 8443 портом 9443 просто за компанию.

Другие порты, такие как 11000 (наш APACHE_PORT) и 3478, используемые дополнительными модулями, будут подключаться автоматически. При запуске master-контейнера, их не нужно привязывать явно. После запуска будет автоматически созданы контейнеры nextcloud-aio-domaincheck и nextcloud-aio-apache, которые свяжутся с портом APACHE_PORT, а после настройки системы в панели администратора, появятся и другие контейнеры, например, nextcloud-aio-talk, которые займут свои порты.

Опции Docker

Очень важно не передавать настоящий сетевой интерфейс операционной системы хостовой машины как внутренний сетевой интерфейс контейнера. Это делается с помощью передачи опции --net=host в команде docker run или network_mode: 'host' в docker-compose. Можно встретить некоторые гайды в интернете, которые предписывают делать именно так. Но это не соответствует документации! Единственное, когда это может быть оправдано, — запуск контейнера на выделенном Linux-сервере, когда докер применяется как IaC средство в задаче оркестрирования. В нашем же случае, контейнер просто не сможет открыть порты 80, 443, т.к. у него нет прав.

  • --sig-proxy=false – отключает проксирование сигналов ОС.

  • --name=<имя> — задает имя контейнеру

  • --restart=<always | no | unless-stopped> — регулирует, что делать в случае критической ошибки или иных случаях, когда контейнер может завершить работу. Соответственно: всегда, никогда и до тех пор, пока пользователь вручную пошлет SIGTERM/SIGBRK. Облако должно быть доступно всегда. Ставим always.

  • -e <имя>:<значение> – передача переменной окружения

  • -v (--volume) <директория хост>:<директория в ОС контейнера>, либо <имя volume> — передача volume или директорий хостовой машины в пользование контейнеру. Что передавать берем из документации: nextcloud_aio_mastercontainer:/mnt/docker-aio-config, //var/run/docker.sock:/var/run/docker.sock:ro.

  • -p (--port) <порт хост>:<порт в интерфейсе контейнера> — соединение порта сетевого интерфейса хостовой машины и сетевого интерфейса контейнера.

Запуск

Сначала надо создать volume’ы.На Windows nextcloud_aio_nextcloud_datadir обязательный, nextcloud_aio_backupdir — опциональный.

Тут последовательность из пробела и обратной кавычки ( ` ) используется для ввода многострочной команды.

В Unix-системах аналогом выступает пробел и обратный слэш ( \).

# Backup dir
docker volume create `
--driver local `
--name nextcloud_aio_backupdir `
-o device="/host_mnt/c/NextCloudBackups" `
-o type="none" `
-o o="bind"
# Datadir
docker volume create `
--driver local `
--name nextcloud_aio_nextcloud_datadir `
-o device="/host_mnt/c/NextCloudData" `
-o type="none" `
-o o="bind"

Запускаем контейнер ровно так, как предписывает документация, но подменяем порты:

docker run `
-e NEXTCLOUD_DATADIR="nextcloud_aio_nextcloud_datadir" `
-e APACHE_PORT=11000 `
--sig-proxy=false `
--name nextcloud-aio-mastercontainer `
--restart always `
-p 9090:80 `
-p 9880:8080 `
-p 9443:8443 `
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config `
--volume //var/run/docker.sock:/var/run/docker.sock:ro `
nextcloud/all-in-one:latest

Либо через docker-compose:

# docker-compose.yml

services:
  nextcloud:
    image: nextcloud/all-in-one:latest
    restart: "always"
    container_name: nextcloud-aio-mastercontainer
    environment:
      - NEXTCLOUD_DATADIR=nextcloud_aio_nextcloud_datadir
      - APACHE_PORT=11000
    volumes:
      - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
      - //var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - "9080:80"
      - "9090:8080"
      - "8443:8443"

volumes:
  nextcloud_aio_mastercontainer:
docker-compose up

После запуска панель docker станет выглядеть так:

Рис. 7. Контейнеры, запущенные nextcloud-aio-mastercontainer

Рис. 7. Контейнеры, запущенные nextcloud-aio-mastercontainer

Тут видно все то, о чем было написано выше: появились новые контейнеры, которые заняли нужные ими порты. Master-container появляется первым и занял порты 9090, 9880 и 9443.

Остается настроить само облако

Переходим в браузер. Нужно подключиться к 8080 порту контейнера, т.е. для нас это адрес, оканчивающийся на :9880. Какой ip вводить? Любой, чтобы не попасть на прокси, ведь тот не знает о том, что что-то нужно пересылать на порт 9880. Можно вбить localhost:9880, <ip в локальной сети домашнего маршрутизатора 192. …>:9880 или <ip ПК в сети Hamachi>:9880 – все эти адреса ведут на порт 9880 одной и той же машины. Подключаться нужно по HTTPS (обязательно вбейте https:// перед адресом и портом, потому что браузер скорее всего сам подставит http, и тогда появится Bad Request от Apache с просьбой перейти на HTTPS). Далее выскачет предупреждение, что соединение небезопасно, но мы ведь знаем, что все безопасно, верно ;). Нажимаем «все равно подключиться» (на разных браузерах эта кнопочка может называться по-разному и быть скрыта за другой кнопкой, например, в Opera надо сначала нажать “help me understand”).

В NextCloud всё сделано именно так, потому что все внешние соединения должны быть зашифрованы и поэтому осуществляются через прокси по HTTPS. Считается, что раз до контейнера доходят HTTP-сообщения, значит, они либо защищены протоколом ssl на уровень выше, либо у оператора есть прямой доступ к машине.

Скопируем и сохраним в блокнот мнемоническую фразу для восстановления системы.

Далее на следующей странице надо будет ввести домен, который пользователь вбивает в браузере, чтобы подключиться, т.е. тот, по которому он попадает на reverse-proxy. В нашем случае www.<домен>. Форма ниже, связанная с бекапом понадобится не сейчас, а во время восстановления бекапа.

Если все успешно, Вас пробросит дальше на страницу, где будет создана учетная запись администратора. Сохраняем куда-нибудь выданный нам пароль. Тут же можно установить некоторые дополнительные модули (их намного больше). Знайте, что каждый модуль – это отдельный докер-образ, а значит весит он много, и его контейнер строится долго. Запустите все контейнеры и дождитесь, когда индикаторы загорятся зеленым.

Скриншоты к вышеописанному процессу не прилагаю. Все есть в обилии на youtube.

Что делать, если проверка домена не выполняется?

Для начала, это значит, что NextCloud попробовал найти сам себя по запросу https://<домен, который Вы ввели на панели администратора> и не смог.

Проверьте, что на домене, который Вы приобрели, есть А-запись с правильным ip-адресом прокси-сервера. Если вы только что обновили эту запись, DNS-сервера провайдера распространяют её иерархически на магистральные роутеры, и на это может потребоваться время (по моим оценкам, до получаса). Можно,  например, воспользоваться командой windows powershell ping <домен>. В Widows она хороша тем, что вместо домена нам будет показан ip-адрес, ассоциированный, как считает домашний роутер, с введенным доменом. Другие утилиты, такие как tracert могут не помочь в случае с арендованными серверами или vpn — все зависит от того, какие запросы пропускает к себе в датацентр хостинг.

Также стоит проверить, что прокси сервер работает, доступен в сети по собственному ip-адресу и на нем запущен Apache/Nginx/Caddy. Не пренебрегайте тестированием конфигов. Узнать, работает ли сервер можно, вбив systemctl status <apache2 | nginx | caddy>.

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

Для остальных случаев есть флаг SKIP_DOMAIN_VALIDATION.

В конце есть список сетевых утилит Windows, которые могут помочь с отладкой сетевого маршрута.

Этап 5. Фаервол

Финальная часть – предотвращение несанкционированных попыток подключения к домашнему компьютеру и спама до состояния DDOS – настроим файервол.

В Linux – воспользуйтесь утилитами ufw или iptables.

Вбиваем в поиск системы «Защита от вирусов и угроз», или «Безопасность Windows», или «Defender», переходим в Брандмауэер -> дополнительные параметры ->правила для входящих подключений.

Рис. 8. Как перейти к детальным настройкам файервола.

Рис. 8. Как перейти к детальным настройкам файервола.

 Нажимаем справа «создать правило», выбираем фильтрацию по порту: специальные порты, 11000. Если накладываете какие-то другие опции фильтрации, помните, что Hamachi – это частная сеть в ОС Windows.

Если планируете использовать эту же сеть Hamachi для передачи еще какого-то трафика, обязательно откройте порт здесь. Правила Defender можно редактировать на лету.

Инструменты Windows для диагностики сетевых интерфейсов

Все перечисленные здесь утилиты работают в powershell и cmd. Лучше выполнять от имени администратора.

nslookup – получение ip по доменному имени на DNS-сервере, сведения о ближайшем DNS-сервере. Будьте внимательны, лично я столкнулся с тем, что nslookup кеширует свои ответы, и если, например, Вы меняете А-запись к своему домену, браузер может видеть изменения, а nslookup – нет. На этот случай есть команда ipconfig/flushdns, но мне она не помогала.

ipconfig/flushdns – сброс dns-кеша в ОС. Работает только в cmd.

Работу DNS можно сымитировать, добавив запись в системный файл C:\Windows\System32\drivers\etc\hosts.

netstat -na | findstr ":8080"  — просмотр установленных соединений. Просто netstat -na покажет все соединения.

ipconfig   — просмотр сетевых интерфейсов. Тут можно наблюдать сеть докера docker0 или WSL — она нужна, когда контейнер общается с сервером на хосте (почитайте про внешний адрес host.docker.internal).

Посмотреть, куда и как (редиректы, HTTP-заголовки) идут запросы в браузере можно через инструменты разработчика. Ctrl+Shift+I или ПКМ по пустому пространству в браузере -> network

Заключение

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

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

Если планируете использовать NextCloud ровно так, как описано в этом гайде, то главное не забыть поставить Docker и Homachi на автозапуск. Так будет достигнута неплохая отказоустойчивость.

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

Мы продолжаем идти к цифровому суверенитету и теперь настраиваем своё облачное хранилище на сервере. Вот как мы к этому пришли:

  • Что такое бэкап, зачем он нужен и как его делать
  • Как работает автоматизация в компьютере 
  • Защита важных файлов: автоматический бэкап за пять минут
  • Настраиваем сервер для своего облачного хранилища

Сегодня будет самая лёгкая часть — мы установим специальный софт, который будет работать точно так же, как Dropbox, только на нашем сервере. Он будет следить за изменениями в выбранных папках и сразу отправлять их на сервер. А если установить его на несколько компьютеров, то на каждом из них будут одинаково синхронизированные файлы. 

Что за Dropbox?

Dropbox — это сервис для резервного копирования и синхронизации файлов, аналогичный Google Drive и Яндекс-диску. Правильнее сказать, что это Google Drive и Яндекс-диск аналогичны «Дропбоксу», потому что он был раньше.

После отключения международных платёжных систем оплачивать Dropbox можно только через магазин App Store, привязав аккаунт к мобильному телефону. Стоит сервис недёшево: за 120 долларов в год вам дадут 2 Тб места на диске. Для сравнения: сейчас Яндекс-диск по акции стоит 999 ₽ за 3 Тб на два года.

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

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

Для реализации нам нужно три компонента:

  1. Свой облачный сервер на линуксе с большим диском. Его мы запускали в прошлой части нашей саги.
  2. Установленная на этот сервер программа Nextcloud.
  3. Клиентская программа на компьютере.

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

Свой сервер у нас уже есть, поэтому переходим к установке и проверке Nextcloud.

Запускаем Nextcloud на сервере

Когда мы оформляли и покупали облачный сервер, то ставили галочку на Nextcloud в списке предустановленного ПО. По идее, этого уже достаточно, чтобы сервер сам всё развернул внутри себя и запустил. Для проверки нужно зайти в браузере по IP-адресу сервера, и если всё в порядке, то мы увидим страницу входа в сервис. 

Вместо Dropbox: ваше собственное облачное хранилище файлов

Узнать IP-адрес своего сервера можно из письма, которое прислала техподдержка, или из панели управления:

Вместо Dropbox: ваше собственное облачное хранилище файлов

Вам может быть интересно:

Переустановка Nextcloud

Если вместо стартового экрана браузер показывает белый лист (именно белый, а не ошибку), нужно переустановить систему. Такое бывает, иногда при установке не подтягиваются сразу все сервисы.

Белый лист означает, что сервер всё-таки ответил, просто ответил «ничего». Если бы сервер не работал как таковой, мы бы получили ошибку в духе «Не могу дозвониться».

Чтобы переустановить систему на сервере, заходим в VMmanager — панель управления виртуальным контейнером. Адрес панели и логин с паролем можно найти в письме от сервиса или на вкладке «Инструкция»:

Вместо Dropbox: ваше собственное облачное хранилище файлов

В этой панели управления выбираем свой сервер и нажимаем «Переустановить». В новой вкладке проверяем, что выбрана свежая версия Ubuntu и в рецепте стоит Nextcloud, — если нет, то ставим это вручную и нажимаем ОК. На переустановку нужно минут 20, а во время процесса в графе «Состояние» будет мигать значок жёсткого диска.

Вместо Dropbox: ваше собственное облачное хранилище файлов

Заходим в облако

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

Вместо Dropbox: ваше собственное облачное хранилище файлов

Осваиваемся в веб-интерфейсе

Всё работает точно так же, как в остальных облачных хранилищах. Например, можно просто перетащить из проводника в браузер любой файл, и он сразу загрузится в открытую папку. Делиться файлами и папками тоже можно, как в «Дропбоксе» — щёлкаем правой кнопкой мыши по названию, выбираем «Поделиться» и настраиваем, если нужно, права доступа.

Вместо Dropbox: ваше собственное облачное хранилище файлов

Как-то медленно, да?

Если вы заказывали сервер для хранения файлов (как в нашей инструкции), то у вас там медленный одно- или двухъядерный процессор и чуть-чуть оперативной памяти. Из-за этого вы прямо физически ощутите, что Nextcloud на вашем сервере еле шевелится.

Добро пожаловать в мир цифрового суверенитета: хотите более мощный процессор — платите. Правда, конкретно с FirstVDS платить особо не за что: у них есть либо быстрые машины для приложений, но у них мало места для хранения; либо наоборот — безразмерные диски, но медленные процессоры. 

Поэтому придётся потерпеть. 

Ставим приложение на компьютер

Сервер настроен, теперь займёмся клиентской частью. Заходим в Настройки → Клиенты для ПК и мобильных платформ и выбираем нужное:

Вместо Dropbox: ваше собственное облачное хранилище файлов

Нас перекинет на официальный сайт с вариантами установок — выбираем свою операционную систему, скачиваем и устанавливаем. После запуска нажимаем на кнопку «Войти в Nextcloud» и вводим IP-адрес нашего севера:

Вместо Dropbox: ваше собственное облачное хранилище файлов

Сервер начнёт ругаться, что не может установить безопасное соединение — его мы сделаем в следующий раз. Пока что нажимаем «Попробовать без шифрования»:

Вместо Dropbox: ваше собственное облачное хранилище файлов

Так как мы первый раз подключаемся к облаку с этого компьютера, то сервис в браузере сразу спросит нас, мы это делаем или нет. Для подтверждения нужно нажать «Войти» и разрешить доступ:

Вместо Dropbox: ваше собственное облачное хранилище файлов

Когда приложение получит доступ, оно предложит нам настроить папки для синхронизации — можно оставить установки по умолчанию и нажать «Подключиться». Приложение начнёт синхронизацию и перейдёт в штатный режим работы. Если нужно добавить новую папку для синхронизации, заходим в параметры и нажимаем «Добавить папку для синхронизации»:

Вместо Dropbox: ваше собственное облачное хранилище файлов

Вместо Dropbox: ваше собственное облачное хранилище файлов

Что ещё можно настроить

Nextcloud — это огромный комбайн с кучей возможностей, в который можно подключить:

  • календари
  • контакты
  • диск
  • органайзер
  • списки задач
  • игры
  • комментарии
  • совместную работу
  • и ещё много всего остального

Часть из этого нам может пригодиться в будущем, когда мы сделаем сервер центром своей цифровой вселенной.

Вместо Dropbox: ваше собственное облачное хранилище файлов

Что дальше

Сейчас сервис работает по незащищённому протоколу HTTP — это может быть небезопасно при бэкапе важных документов. Чтобы перейти на HTTPS, нужно привязать адрес сервера к домену и установить SSL-сертификат.

А ещё будет здорово добавить на сервер возможность редактировать документы онлайн и получить собственный аналог гуглодокументов на своём облаке. Сделаем это в следующий выпусках.

Вёрстка:

Кирилл Климентьев

Привет! Меня зовут Максим Кульгин, я основатель нескольких SaaS-проектов в РФ. Мы защищаем от скликивания рекламы, парсим данные для бизнеса и занимаемся мобильной разработкой. И сейчас я буду вдохновлять вас на создание собственного облачного сервиса. Бесплатного на 100%, без навязанных ограничений, под вашим полным контролем. У нас уже работает много лет. Стабильно.

Недавно мы опубликовали несколько статей на тему создания своего SaaS, а также поднятия почтового сервера. Теперь свой облачный сервис. Для чего это всё?

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

Почему облако?

Когда дело доходит до хранения данных, то всё чаще отдается предпочтение именно «облачным хранилищам», «облакам». Причин много: надежность, удобство, доступность, отсутствие необходимости заниматься поддержкой инфраструктуры.

Я веду свой телеграм-канал Русский ИТ бизнес, где без прикрас рассказываю о своем ежедневном негативном опыте по ведению нескольких бизнесов в России.

Подпишитесь, там интересно: )

Сейчас вряд ли найдется человек, который не слышал и не пользовался одним из многочисленных сервисов хранения данных. Наиболее известные платформы, которые у всех на слуху: Apple iCloud, Google Drive, Dropbox, Yandex Disk. Каждый из подобных сервисов имеет свои преимущества, свои уникальные предложения, свои удобства.

А как насчёт менее известных? Такие платформы заслуживают внимания?

Nextcloud — одна из таких малоизвестных платформ, популярность которой тем не менее неуклонно растет. В чём секрет? Что дает Nextcloud пользователям? Каковы ключевые преимущества?

В этой статье мы рассмотрим эти вопросы, а в практической части пройдем по всем шагам, чтобы установить и развернуть Nextcloud на Linux.

Справедливости ради надо отметить, что вам потребуется сервер. Мы его арендуем за 4000 р. в месяц с дисками на несколько ТБ. И если нужно — добавим еще дисков столько, сколько требуется. Причем на этом сервере работают и другие наши службы — mattermost, phabricator и т.п. Поэтому стоимость владения облаком резко сокращается.

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

Как и любое облако, Nextcloud схож с другими подобными сервисами, такими как Dropbox и Google Drive.

Разработка Nextcloud началась в 2016 году, а если учесть предысторию проекта, то годом рождения можно считать 2010-й.

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

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

Если говорить о популярности, то Nextcloud даже и близко не стоит рядом с такими титанами, как Google Drive и Dropbox. У Nextcloud — своя ниша, своя ценность, своя аудитория. Но зато везде, где обсуждаются облачные хранилища, то и дело появляются люди, которые хвастаются тем, что установили Nextcloud или Owncloud и с успехом им пользуются.

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

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

Если заглянуть в магазин приложений, то можно увидеть, что их количество скоро доберется до трехсот. Это и просмотрщики всякие, плееры, галереи, менеджеры задач и заметок, офисные программы, чаты и видеозвонки — чего там только нет!

Многие приложения являются как бы фронтендом к другим сервисам. К примеру, редактор документов Collabora тоже является клиентской частью к серверу, на котором крутится LibreOffice.

То же самое можно сказать и про почту. Имеющееся приложение Mail — это тоже фронтенд. Если нужен полноценный самостоятельный почтовый сервер, то его надо поднимать самостоятельно (можно воспользоваться инструкциями из нашей недавней статьи).

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

Есть у приложений и обратная сторона. Не все они одинаково хороши по качеству. Мало того, что некоторые могут работать не идеально, так ещё и их установка может оказаться весьма непростой. Какие-то требуют определенной версии PHP, каким-то нужно ещё что-то вручную ��станавливать на сервер. Но это уже такие дебри, в которые большинство пользователей и не заберется так просто.

И серверная и клиентская части бесплатны. Клиентская часть разработана под все основные платформы: MS Windows, MacOS X, Linux. Для Android и iOS разработаны приложения, которые позволяют также и мобильным пользователям безопасно хранить свои данные в Nextcloud. Серверная часть крутится на Linux.

Однако, следует сделать оговорку про бесплатность. Сервис нельзя назвать бесплатным абсолютно.

Во-первых, поддержка не может быть бесплатной: специалистам, круглосуточно готовым прийти на помощь, нужно что-то платить.

Во-вторых, развертывание серверов на ресурсах создателей Nextcloud (или их партнеров) тоже потребует денег, что не вызывает вопросов.

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

Полностью собранная и настроенная в соответствии с конкретными требованиями система со множеством приложений потребует работы высококвалифицированного специалиста. Неужели это будет дешевле готового решения?

Ну, и наконец, в-четвертых. Приложения, которые интегрируются с Nextcloud, бесплатны не все.

Какова будет стоимость решения, которое мы воплотим в данной статье? Ноль!

Во-первых, нам не понадобится их поддержка, потому что мы сами во всём разберёмся.

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

В-третьих, сложная работа по сборке сервера — не такая уж и сложная, если есть хорошее стартовое руководство. А эта статья как раз таким руководством и является. Что-то специфическое может придется выискивать самому, но после создания основы (как подробно описано ниже) в этом не будет ничего неподъемного и можно будет разобраться своими силами.

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

Есть несколько причин, объясняющих быстрорастущую популярность проекта — причин, которые выделяют его на современном рынке.

Прежде всего, это невероятное взаимодействие с другими программами и инструментами. Nextcloud может быть интегрирован с более чем сотней сторонних приложений. Звучит как фантастика, но и это ещё не всё.

Очень важная черта сервиса — внимание, которое уделяется безопасности.

Nextcloud — это FOSS, Free Open Source Software — свободное программное обеспечение с открытым исходным кодом. Иногда в переводах путают термины «свободное» и «бесплатное» — а это не одно и то же.

Не будем сильно вдаваться в тонкости, но «свободное» означает произвольное использование для своих нужд, возможность менять функциональность, распространять усовершенствованные копии. «Бесплатное» значит только то, что не надо платить.

Чтобы понять разницу между «свободным» и «бесплатным» ПО, надо посмотреть на пример из наших дней: сколько бесплатных программ и сервисов перестали работать по политическим причинам? — да, целая тьма! Они были бесплатными? — да! Они были свободными? — нет.

Продолжаем перечислять ключевые концепции и технологии, которые поддерживает Nextcloud.

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

Поддерживается множество современных технологий: WebDAV, TOTP, WebAuthn, Oauth2, OpenID Connect, 2FА… Есть централизованное управление персональной информацией в сочетании с интеграцией со сторонними приложениями. Предлагается собственный сервис Nextcloud Hub для пользователей, которые хотят организовать совместную работу внутри компании.

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

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

Безопасность

Трудно сравнивать лидирующие решения по безопасности — они все «лучшие из лучших». Как можно выделить кого-то хорошего на фоне других прекрасных? Кто безопаснее: Dropbox, Google Drive? ..

Поговорим конкретнее. Исходный код, постоянно анализируемый специалистами, показывает высокий уровень надежности и продуманности. Результаты последних таких исследований можно найти за 2022 год. Кроме многочисленных энтузиастов, экспертизу проводили специалисты из NCC Group и Kyos (ссылки ведут на страницы, где можно заказать копии отчетов) .

Все пользовательские данные хранятся в зашифрованном виде, что исключает их раскрытие даже в случае физического похищения жестких дисков на стороне сервера. Само собой шифруются и передаваемые данные (E2EE, «End To End Encryption») .

Простота использования

Owncloud славился своим простым пользовательским интерфейсом. Nextcloud унаследовал все лучшие черты своего предшественника. Разработчики Nextcloud не стояли на месте и сделали интерфейс ещё более простым и понятным.

Большое сообщество

Если сравнивать по количеству пользователей, то Nextcloud никак нельзя отнести к лидерам. Но если рассматривать сервисы в контексте уникальных возможностей, которые они предоставляют, то всё начинает выглядеть несколько иначе.

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

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

Доступность

Nextcloud не обделяет вниманием людей с ограниченными возможностями. Чтобы облегчить им пользование программой, поддерживаются: специальная клавиатура; поддержка программы чтения с экрана; специальные стандарты отображения, такие как стандарт контрастности WCAG 2.0 AA. В дополнение имеются специальные темы, в том числе высококонтрастная WCAG 2.0 AAA, а также шрифт, подходящий людям с дислексией. Само собой поддерживается темная тема.

Работа в режиме реального времени

Ещё одно важное преимущество Nextcloud — мгновенный обмен данными: поддержка обновлений, рассылка уведомлений, комментариев и другой подобной информации одновременно на все устройства пользователей, включая мобильные телефоны.

Это чрезвычайно удобно для совместного редактирования и при работе над крупными проектами. Можно легко перейти от комментирования к аудио- или видеозвонку.

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

Такой подход призван экономить время и усилия пользователям и является ещё одной существенной причиной популярности Nextcloud.

Расширенное управление учетными записями

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

Есть возможность интегрировать различные внешние пользовательские хранилища, такие как Amazon S3, OpenStack Object Storage и всё, что поддерживает протоколы WebDAV, FTP/FTPS, SFTP, SMB/CIFS. Для каждого пользователя можно задавать индивидуальные настройки в соответствии с конкретными требованиями. Разумеется, поддерживаются расширенные возможности работы с учетными записями.

Управлять настройками (дисковыми квотами, адресами и тому подобным) может каждый, кому делегируются соответствующие права администратора. В сочетании с другими вышеупомянутыми утилитами получается идеальный облачный файловый хостинг с четкой и прозрачной иерархией полномочий. Что ещё нужно для предприятия?

ИТ-мониторинг

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

Вкладка системного журнала содержит всю необходимую отладочную информацию о работе приложений (к сожалению, не все приложения пользуются этой возможностью) . Действия пользователей также отслеживаются должным образом.

Самостоятельный хостинг

Nextcloud позволяет создавать и размещать сайты.

Можно установить на сервер любую простую CMS-систему по душе (например, PicoCMS) — тогда получится создавать страницы очень легко: все они поддерживают Markdown и всё необходимое для быстрого создания и редактирования контента.

Видимостью страниц можно гибко управлять: они могут быть не только общедоступными, но видимыми только для определенных групп в Nextcloud. Можно разделять доступ к отдельным файлам, составляющим сайт и, таким образом, организовывать совместную работу над контентом.

Итак, мы рассмотрели, что из себя представляет Nextcloud, оценили его место в современной индустрии облачных сервисов, рассмотрели восемь наиболее заметных особенностей и причины его растущей популярности.

Далее мы рассмотрим процесс установки на примере Ubuntu и Debian — двух из наиболее популярных дистрибутивов Linux для серверного использования. Для других дистрибутивов Linux установка будет отличаться лишь пакетным менеджером и репозиторием — ничего сложного.

Если кто не знает какой дистрибутив выбрать — лучше взять Debian. Для серверов выбирают ветку «stable» — ПО не новое отнюдь, но зато надежное (проверенное временем) . Разумеется, все обновления безопасности поступают регулярно до тех пор, пока данная версия дистрибутива поддерживается официально.

Если кто не знает, Ubuntu — это дистрибутив, основанный на кодовой базе Debian, только не на ветке «stable», а на ветке «unstable» (идея в том, чтобы предоставлять максимально свежее ПО) . Ubuntu Server отличается от обычной настольной Ubuntu в основном отсутствием графической оболочки, поддержкой виртуализации и некоторыми другими специфическими для сервера вещами.

Системные требования

Операционная система:

  • Debian stable (наша рекомендация)
  • Ubuntu Server, текущая LTS-версия (Long Time Support) — на момент выхода данной статьи это будет «22.04»
  • Любой другой подходящий дистрибутив Linux

База данных:

  • MySQL 8.0+ или MariaDB 10.3/10.4/10.5/10.6 (рекомендуется)
  • Oracle Database 11g
  • PostgreSQL 10/11/12/13/14/15
  • SQLite (только для экспериментов или для слабых машин)

Веб-сервер:

  • Apache 2.4, с mod_php или php-fpm (рекомендуется)
  • nginx с php-fpm

PHP:

  • 8.0
  • 8.1 (рекомендуется)
  • 8.2

Оперативную память (на один процесс) , объем которой находится в непосредственной зависимости от серверной активности (количества пользователей, приложений и так далее) , надо выделять исходя из следующего:

  • 128 МБ (самый минимум)
  • от 512 Мб (рекомендуется)

Установка операционной системы

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

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

Если Nextcloud будет устанавливаться на виртуальный сервер, то все необходимые инструкции предоставит провайдер.

Также не будем рассматривать такие элементарные вопросы, как ��апуск терминала и подключение к машине со свежеустановленной системой. В интернете полно статей и инструкций — можно легко разобраться. Будем предполагать, что все эти вопросы решены, терминал готов — осталось только вводить команды. Итак.

После установки системы и перед установкой дальнейших пакетов обязательно надо обновить и кэш пакетного менеджера и саму систему:

sudo apt update && apt full-upgrade

Установка Apache

Поскольку управление Nextcloud осуществляется через веб-интерфейс, то понадобится веб-сервер, который отвечает за отдачу страниц и обработку реакций пользователя.

В принципе, веб-сервер не обязательно должен быть именно Apache, но поскольку именно он рекомендуется авторами облачной платформы, возьмем для примера именно его:

sudo apt install apache2 -y

В дальнейшем состояние веб-сервера всегда можно проверить так:

sudo systemctl status apache2

Установка PHP

Серверная часть к веб-интерфейсу Nextcloud написана на PHP, соответственно без него обойтись не удастся. Для установки PHP можно выполнить следующую команду:

sudo apt install php libapache2-mod-php php-imagick php-common php-mysql php-gd php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl php-bcmath php-gmp php-dom unzip -y

Удостовериться в правильной версии можно так:

php -v

После установки PHP необходимо перезагрузить сервер:

sudo systemctl reload apache2

Установка базы данных

Следующий шаг — установка сервера базы данных. Выбор довольно большой, есть в том числе и всеми любимая PostgreSQL. Мы будем использовать рекомендуемый вариант попроще — MariaDB:

sudo apt install mariadb-server -y

После завершения установки надо задать пароль:

sudo mysql_secure_installation

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

Настройка сервера базы данных

Прежде всего надо войти в базу данных. Изначально это возможно только для суперпользователя (root) , так что использование sudo по-прежнему обязательно:

sudo mysql -u root -p

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

Далее нужно придумать название для базы данных. Пусть это будет «CloudDB» (можно ввести произвольное слово) :

CREATE DATABASE CloudDB;

Создаем администратора базы данных, даем ему все привилегии, необходимые для работы:

CREATE USER ‘cloud-admin’@’localhost’ IDENTIFIED BY ‘пароль’;

В предыдущей команде нужно:

  • вместо «cloud-admin» использовать по желанию другое имя;
  • придумать «пароль» — это понятно.

В следующей команде мы наделяем администратора базы данных необходимыми полномочиями:

GRANT ALL PRIVILEGES ON CloudDB.* TO ‘cloud-admin’@’localhost’;

Как и в предыдущем случае следует:

  • «CloudDB» заменить названием нашей базы данных;
  • вместо «cloud-admin» использовать по желанию другое имя.

Чтобы изменения вступили в силу:

FLUSH PRIVILEGES;

Завершаем работы в интерактивном сеансе SQL и возвращаемся в shell:

Exit;

Хорошо бы убедиться, что новосозданный администратор может войти в базу данных:

mysql -u cloud-admin -p

Установка Nextcloud

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

Nextcloud распространяется в виде ZIP-архива. Поэтому перейдем на официальный сайт и найдем ссылку для скачивания самой последней версии (версия 26 на данный момент) . Далее воспользуемся следующей командой:

wget https://download.Nextcloud.com/server/releases/Nextcloud-26.0.0.zip

Разумеется, вместо «Nextcloud… 26.0.0.zip» следует подставить действительную ссылку. Файл скачается в текущую директорию. Если нужно задать другую или хочется поменять имя файла, то опция «-O путь_к_файлу» позволяет это сделать.

Далее полученный архив требуется распаковать, создать необходимые для работы каталоги и задать для них права доступа (будет использоваться специальный системный пользователь «www-data» с одноименной группой) :

sudo mkdir -p /var/www/html/Nextcloud/data
sudo unzip Nextcloud*.zip -d /var/www/html/
sudo chown -R www-data:www-data /var/www/html/Nextcloud/

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

Все инструменты, устанавливаемые на предыдущих этапах, приходили в виде deb-пакетов и устанавливались с помощью системной утилиты apt. А это значит, что они все обновляются элементарным образом:

sudo apt update && apt full-upgrade

После данной команды система, включая все компоненты, полностью обновлена.

Но это не будет касаться файлов, пришедших в ZIP-архиве. Обновлять Nextcloud придется иным способом:

sudo -u www-data php /var/www/html/nexctloud/occ upgrade

Это не страшно, просто надо иметь ввиду.

Первый запуск

Ещё рано открывать шампанское, но уже можно доставать бокалы.

В строке браузера надо набрать:

http://vps_ip/Nextcloud/index.php

Вместо «vps_ip» требуется подставить IP-адрес нашего виртуального сервера. Если работа ведется на том же компьютере, то вместо «vps_ip» можно ввести «localhost». Должна открыться приветственная страница.

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

Дальнейшие шаги

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

Чтобы не уходить далеко в сторону, коснемся лишь ещё пары технических моментов, на которые следует обратить внимание в первую очередь.

Опытные сетевики наверняка заметили: то, что мы набрали в строке браузера — не есть хорошо. Ладно, если это локальная сеть или тот же компьютер. Но в общем случае это никуда не годится. А вы заметили что не так-то?

А не так то, что для доступа к веб-интерфейсу используется небезопасный протокол http. Поэтому дальнейшие действия предполагают установку SSL-сертификата и настройку Apache на принудительное использование безопасного протокола https.

Надо предупредить, что это нетривиальная задача.

Прежде всего сертификат надо получить. В свете последних событий это стало не так просто, как раньше. Всю информацию по получению сертификата и рассмотрение сопутствующих вопросов можно найти в нашей статье про свой бесплатный почтовый сервер (раздел «SSL-сертификат») .

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

Работа над безопасностью на этом не исчерпывается.

Разместить свой сервер в интернете — неминуемо подвергнуть его всевозможным атакам, одной из которых является взлом с помощью прямого перебора паролей (brute force) .

Fail2ban — это сервис как раз и призванный помочь в этом горе. Он автоматически заставляет iptables (стандартный интерфейс к межсетевому экрану Linux) сбрасывать соединения при превышении некоторого настраиваемого порога количества последовательных неудачных попыток авторизации.

Установить fail2ban несложно: большинство дистрибутивов (конечно, включая Debian и Ubuntu) уже имеют его в своих репозиториях. На нашем примере:

sudo apt install fail2ban

Всю необходимую информацию по настройке fail2ban можно найти на странице официальной документации.

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

Nextcloud — всё еще молодой проект, но у него есть все шансы превратиться в крупную облачную платформу в ближайшие годы. Можно также с уверенностью сказать, что для пользователей Linux Nextcloud — лучшее решение по созданию своего облачного сервиса.

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

Вообще использование Linux на стороне сервера открывает потрясающие возможности. Все новейшие изобретения из мира высоких IT-технологий интегрируются легко и непринужденно. Открытость, безопасность, надежность, защищенность (в том числе от политических непредсказуемых истерик) — те качества, которые и сделали его столь популярным среди профессионалов.

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

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

создать свое облачное хранилище доступное через интернет

Для начала нужно перейти на сайт https://www.resilio.com/individuals/ и скачать бесплатное приложение, которое нужно установить для компьютера. Так же его можно установить на смартфон в любом сторе, оно называется «Resilio sync»

На сайте выбираем вкладку «Product», затем «Sync Home for Home Use».

Появляется страница с установкой. Нажимаем «Free download» и выбираем файл с программой.

создать свое облачное хранилище доступное через интернет

Затем нажимаем «Запустить» . Нажимаем кнопку «Далее» и программа устанавливается.

создать свое облачное хранилище доступное через интернет

После запуска приложения даем имя, которое будет отображаться при отправке и получении папок и ставим галочки на согласие использования приложения. После этого нажимаем кнопочку «Начать работу».

создать свое облачное хранилище доступное через интернет

создать свое облачное хранилище доступное через интернет

Появляется окно программы. Мы нажимаем «+» , после этого выбираем  «Стандартная папка».

создать свое облачное хранилище доступное через интернет

Сейчас нам нужно выбрать папку, которая будет являться облачным хранилищем . Например, «Доступ» .

создать свое облачное хранилище доступное через интернет

Далее появляется меню настройки папки-хранилища. Выберите строку «Новые пиры» и замените на «Все пиры» , тем самым можно будет  требовать повторного подтверждения для новых папок.  Закрываем это окно

создать свое облачное хранилище доступное через интернет

Теперь у вас отображаются папки, которые являются облачным хранилищем. Как же перенести в эту папку файлы? Все просто: нажимаем на данную папку и переносим, путем копирования, файлы. В нашем случае это простая картинка. Готово.

создать свое облачное хранилище доступное через интернет

создать свое облачное хранилище доступное через интернет

Теперь можно поделиться этой картинкой с другими устройствами. Для этого нажимаем кнопочку «Поделиться» . Выбираем вкладку «Ключ» . Ключ мы можем предоставить для чтения и записи или только для чтения .  Ещё можем поделиться QR-кодом , тоже  соответственно для чтения и записи или только для чтения. Делимся этими ключами с другим человеком, чтобы он мог просматривать файлы из этой папки.

Теперь рассмотрим, что нужно сделать для просмотра файлов в облаке с другого устройства.

Для этого нужно будет скопировать ключ и создать папку в которой эти файлы будут размещаться или просматриваться. Находим снова «+», вставляем ключ(как его найти описано выше) и нажимаем «Далее».  Выбираем свою папку. Идёт синхронизация. После завершения синхронизации нажимаете на папку в программе и  можно увидеть все файлы, которые были сохранены в облаке.

создать свое облачное хранилище доступное через интернет

создать свое облачное хранилище доступное через интернет

создать свое облачное хранилище доступное через интернет

создать свое облачное хранилище доступное через интернет

Можно также делиться файлами из облака со смартфоном

создать свое облачное хранилище доступное через интернет

Для этого в Google Play Market находим приложение «Resilio Sync».

создать свое облачное хранилище доступное через интернет

Скачиваем его и открываем.

создать свое облачное хранилище доступное через интернет

Вводим имя пользователя и ждём.

Готово

Чтобы соединиться с облаком нажимаем на панельку в верхнем левом углу и переходим в настройки. Выбираем вкладку «Идентификатор».  После нажимаем «Привязать устройство»

Появляется окно. В нем мы можем сканировать и показать QR-код и ключ. В нашем случае, сканируем QR-код.

Готово! Теперь можно просматривать файлы из папки-хранилища на своём смартфоне.

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

0

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

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать. 

Как Создать Облачное Хранилище (1)

Что такое облачное хранилище?

Облачное хранилище — это способ хранения информации, при котором данные распределены по разным серверам в сети. Обычно такие сервера предоставляются пользователям в виде услуги со стороны провайдера. При этом клиенту неизвестно внутреннее устройство инфраструктуры. Обработка и хранение данных происходит собственно в «облаке» (англ. cloud), которое для пользователя выглядит как единый сервер. 

Список популярных облачных хранилищ: Облако Mail.Ru, Google Диск, Dropbox, OneDrive, Яндекс.Диск. 

cloud

Сервисы облачных хранилищ

Облачные хранилища стали популярными благодаря сервисам, которые они предоставляют. Вот некоторые из них:

  • Доступ к данным с любого компьютера и устройства, имеющего выход в Интернет.
  • Резервное копирование данных. Бэкап в облаке делается в пару кликов.
  • Совместная работа с данными. Можно дать доступ к файлам группе людей, при этом файлы не блокируются и не создается дубликатов — каждый видит изменения каждого.
  • Передача медиаконтента. Часто мессенджеры ограничивают размеры передаваемых файлов. При использовании облака достаточно просто скинуть ссылку на определенный файл в хранилище.
  • Обмен данными между приложениями. У крупных провайдеров облачное хранилище является центральным узлом для взаимодействия пользователей и приложений.

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

Зачем создавать личное облако?

Согласитесь, удобно приобрести подписку на год у провайдера и ни о чем не думать. Но что делать, если вы не доверяете корпорациям, хотите полностью контролировать серверы с вашими данными и не беспокоиться об ограничениях со стороны поставщиков услуг?

В таком случае вы можете поднять собственное облачное хранилище с помощью специальной платформы. Существует множество вариантов решений: NextCloud, Seafile, Pydio, OwnCloud и другие. Выбирать можно любое. Все они различаются по функционалу, у некоторых есть платные версии. Будем использовать бесплатный NextCloud.

Установка и настройка NextCloud

NextCloud — это форк проекта OwnCloud с полностью открытой архитектурой, разработанный Фрэнком Карличеком. Платформа позволяет создать контролируемое и надежное облачное хранилище, а также предоставляет дополнительный функционал (например, список контактов, календарь, потоковое мультимедиа, видеозвонки и многое другое).

Итак, чтобы создать облачное хранилище данных, нам понадобится следующее:

  • Собственный сервер или VPS. Арендовать хорошую машину для облака можно здесь.
  • Дистрибутив Linux c настроенным пользователем sudo. Будем использовать Ubuntu 22.04.
  • Доменное имя, указывающее на ваш сервер. Домен нужен, чтобы настроить защищенное TLS/SSL подключение с помощью бесплатного сертификата Let’s Encrypt. Нижеописанные шаги можно проделать и без домена — NextCloud позволяет настроить самоподписанный сертификат. Но тогда браузер будет «ругаться» на подключение.

Устанавливать NextCloud будем с помощью системы развертки и управления пакетами Snap (в Ubuntu доступна по умолчанию). Все зависимости и конфигурации, необходимые для NextCloud (веб-сервер, база данных), будут находиться в самодостаточном snap-пакете.

Установка

Скачиваем и устанавливаем snap-пакет:

sudo snap install nextcloud

Вывод:

nextcloud 24.0.1snap1 from Nextcloud✓ installed

Настройка учетной записи администратора

Далее настроим учетную запись администратора. Чтобы избежать появление окна регистрации в веб-интерфейсе, сделаем это с помощью командной строки:

sudo nextcloud.manual-install <login> <password>

Вывод:

Nextcloud was successfully installed

Здесь <login> — логин администратора, <password> — пароль.

Настройка домена

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

sudo nextcloud.occ config:system:set trusted_domains 1 --value=<доменное имя>

Вывод:

System config value trusted_domains => 1 set to string <доменное имя>

Здесь <доменное имя> — домен, по которому вы хотите обращаться к хранилищу.

Если у вас установлен и настроен фаервол, то не забудьте открыть порты для веб-интерфейса — 80/tcp и 443/tcp. В серверной Ubuntu фаервол по умолчанию отключен, но из соображений безопасности его лучше включить.

Открытие портов с использованием firewalld (подробности работы с firewalld можно узнать в нашей статье):

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

С использованием ufw:

sudo ufw allow 80,443/tcp

Все, на данном этапе уже можно подключаться и пользоваться cloud storage:

Image1

Видим, что соединение будет проходить по небезопасному протоколу http. Чтобы обеспечить защиту веб-интерфейса, настроим сертификат SSL от Let’s Encrypt. Если у вас нет своего доменного имени, можно настроить самоподписанный сертификат. В этом случае весь веб-трафик будет шифроваться, однако браузер не будет автоматически доверять ему.

Настройка сертификата Let’s Encrypt

Получаем сертификат Let’s Encrypt:

sudo nextcloud.enable-https lets-encrypt

На появившийся вопрос отвечаем yes, вводим адрес электронной почты для восстановления и доменное имя сервера:

Please enter your domain name(s) (space-separated): <доменное имя>

Если все прошло корректно, то вы увидите следующий вывод:

Attempting to obtain certificates... done
Restarting apache... done

Настройка самоподписанного сертификата

В случае, если у вас нет доменного имени, NextCloud все равно позволит защитить ваш веб-интерфейс. Для этого нужно настроить SSL сертификат с собственной подписью. Веб-трафик будет шифроваться, однако подлинность сервера подтвердить не удастся. Поэтому, когда будете делиться хранилищем с кем-то, не забудьте предупредить, что при попытке подключения браузер будет выдавать предупреждение.

Сгенерируем сертификат, которым будет пользоваться NextCloud:

sudo nextcloud.enable-https self-signed

Если в выводе будут следующие строки, значит все сконфигурировано корректно:

Generating key and self-signed certificate... done
Restarting apache... done

Теперь можно подключиться к серверу по https:

Image3

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

Image2

Установка и настройка завершена. Теперь вам остается изучить интерфейс.

Заключение

Итак, мы рассмотрели, как создать облачное хранилище. У NextCloud имеется обширный функционал, похожий на возможности других популярных облачных хранилищ. Вы можете делиться файлами, делать их общедоступными и многое другое. И все это под полностью вашим контролем. Возможности сервиса можно расширить с помощью плагинов, доступных в магазине приложений NextСloud.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Укажите основные типы окон в windows ответ
  • Удалить события из журнала windows
  • Intel d525mw драйвера windows 10
  • Windows 10 dowland free
  • Windows defender для windows server 2012