Свой облачный сервер на 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 на автозапуск. Так будет достигнута неплохая отказоустойчивость.

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

Привет! Меня зовут Максим Кульгин, я основатель нескольких 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, в конце которой приведен небольшой каталог практических ссылок по данной теме.

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

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

Сегодня будет самая лёгкая часть — мы установим специальный софт, который будет работать точно так же, как 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-сертификат.

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

Вёрстка:

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

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

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

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

Шаг первый: сервер

Для начала надо выбрать сервер, на котором и будет крутиться наше хранилище. Можно использовать своё железо или заморочиться на NAS, но проще арендовать сервер в облаке. Обратитесь к любому провайдеру и скажите, что вам требуется что-то вроде сервера для хранения данных. Например, можно узнать расценки на такие услуги у Cloud4Y, но тут выбор за вами. Смотрите, где вам будет удобнее, дешёвый VDS/VPS можно найти как в России, так и за её пределами. Размер дискового пространства тоже определяете вы. Условно говоря, можно взять сервер на 100 гигабайт памяти и 1 гигабайтом RAM — и для базовых задач этого будет достаточно.

Поставщик облачных услуг может задать вопрос «какую ОС ставить на сервер». Выбирайте дистрибутив Linux. Облачное хранилище будет отлично работать на Ubuntu и Debian, можно использовать и CentOS.

centos-vs-ubuntu-vs-debian

Если глубоко не копать, то между первым и вторым вариантом разница не очень большая. Дистрибутив Ubuntu заточен под постоянные обновления, тогда как приоритет Debian — stable, то есть проверенные обновления, обкатанные большим количеством пользователей. CentOS — стабильная бесплатная ОС, хорошо подходит для управления сервером, за что любима программистами и сетевыми администраторами. Но под неё меньше документации и она требует больше умений и знаний.

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

Подключаться к серверу можно разными способами. Линуксоиды могут использовать команду ‘ssh’, а если вы всё же выбрали Windows в качестве операционной системы для сервера, то в этом случае можно использовать PuTTy. Описываю вариант с Linux Ubuntu. Без GUI, то есть графической системы. Он быстрее.

Подключаемся через консоль к серверу по IP-адресу:


sudo ssh root@xx.xx.xx.xx (root — имя пользователя, а xx.xx.xx.xx это IP)

Не помешает и обновить систему:


sudo apt update

sudo apt upgrade

sudo apt install fcgiwrap apache2-utils unzip


sudo apt install mc curl

Установите Git в вашей системе:


sudo apt install git

Подтвердите установку:


git --version

curl — утилита для скачивания файлов и выполнения HTTP-запросов, которая будет полезна при работе с сервером, git — клиент Git, который позволит скачивать нужные файлы с GitHub, mc — это двухпанельный файловый менеджер, похожий на классический Far Manager, с помощью которого удобно работать с файловой системой. Этот пакет ставить необязательно.

После этого создайте пользователя с нужным именем и установите пароль для ограничения доступа к репозиторию git с использованием базовой HTTP-аутентификации:


htpasswd -c /var/www/html/yournick-repo/htpasswd yourname

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

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

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

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


sudo apt install apache2 mariadb-server libapache2-mod-php php-gd

php-mysql php-curl php-mbstring php-intl php-gmp php-bcmath


php-xml php-imagick php-zip unzip

Серверная часть к веб-интерфейсу Nextcloud написана на PHP. Выполняем команду:


sudo apt install php libapache2-mod-php php-imagick php-common php-mysql php-gd php-json php

Перезагрузите сервер после установки:


sudo systemctl reload apache2

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

Чтобы запустить режим командной строки MySQL, используйте следующую команду:


sudo mysql

Появится приглашение MariaDB [root]> . Введите следующие строки, заменив username и password вашими значениями, нажмите Enter:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES on nextcloud.* to 'username'@'localhost';
FLUSH privileges;

MariaDB настроена. Можно выйти из командной строки SQL:


quit;

Бесплатный тестовый доступ к облаку на 30 днейПолучить

Установка Nextcloud

Развернуть Nextcloud можно из шаблона Cloud4Y или с помощью руководства вендора. Официальное руководство предлагает для простоты использовать snap-пакет, а всего есть три основных способа установки:

  1. Через систему управления контейнерами с использованием Docker.
  2. Через пакет приложений snap. Он поддерживает все дистрибутивы Linux. Предлагаю использовать Ubuntu 20.04.
  3. Ручная установка на сервер.

Используем команду

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

Дистрибутив сохранится в текущей директориb. Можно задать другую или хочется переименовать файл. Для этого используйте флаг «-O путь_к_файлу».

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


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/

Давайте обновим все пакеты.


sudo apt update && apt full-upgrade

Nextcloud

Вот и всё, основная часть работы сделана. Теперь наберите в строке барузера: http://your_ip/Nextcloud/index.php, где your_ip — IP-адрес нашего виртуального сервера. Должна открыться стартовая страница, где вы сможете создать пароль администратора, указать название БД, пользователя и пароль, которые мы заводили на этапе настройки MariaDB, после чего попасть на главный экран вашего хранилища. Там для примера уже загружено несколько демо-файлов и запущены базовые приложения, вроде заметок, синхронизации, просмотровщика фотографий.

Nextcloud 2

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

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

NextCloud is an excellent self-hosted syncing tool. Trouble is, it only runs on Linux, so if you don’t have a Linux server, you won’t be able to deploy it without virtualization or containerization. Thankfully, the NextCloud project makes an “all in one” virtual machine you can download and deploy on any OS, including Windows Server. Here’s how to set it up on your system.

How to install VirtualBox on Windows Server

NextCloud is a Linux application, and the developers aim to keep it that way. However, they provide an “all in one” virtual machine OVA for VirtualBox, that Windows admins can quickly deploy. However, you’ll first need to install the VirtualBox hypervisor.

To start, head over to the official VirtualBox website. Once there, click on “Downloads,” and click on the “Windows hosts” link to download the installation EXE. When downloaded, open up Windows Explorer, select the “Downloads” folder, and launch the installation EXE.

Go through the installer and set up VirtualBox on Windows Server. Once it is fully installed, launch it and move to the next section to get your hands on the NextCloud AIO VM.

How to download the NextCloud AIO VM

The NextCloud AIO VM is available for download on the official NextCloud website. Head to the official download page. Once there, download “Nextcloud-AIO.ova” to Windows Server. The OVA file is about 2 GB in size, so the download is not instantaneous.

When the download is complete, look at the “readme” file on the download page. While it’s not a requirement, you’ll want to check it out to see what the NextCloud developers have to say. To read the “readme.md” file, open it in Notepad.

How to import the NextCloud AIO VM

The Nextcloud AIO VM is pre-configured with a Linux distribution, and everything you need to deploy NextCloud on a Windows Server host. However, it needs to be imported first. To import the OVA file, do the following.

First, open up the Windows Explorer app, and select the “Downloads” folder. Then, right-click on the “Nextcloud-AIO.ova” file, and select the “Open with” menu. Finally, locate the “VirtualBox Manager” option.

When you select the “Open with” VirtualBox option, you’ll see the “Import Virtual Appliance” window. The “Import Virtual Appliance” page will show you everything there is to know about the Nextcloud VM, including the guest OS, RAM usage, CPU usage, etc. Click the “Finish” button to import it into your system.

With the OVA imported to VirtualBox, right-click on it and select “Settings.” Once inside of the “Settings” window, locate the “Network” section. By default, they set the VM to NAT. Change it to “Bridged Adapter,” so that it can interact with other devices on your network.

Once the AIO VM is open, access the terminal prompt inside of it, and run the following command to reveal its LAN IP address.

hostname -I

After executing the command above, take the IP address and load up a web browser to the following URL. Then, follow the next section of the guide to get going with NextCloud on your Windows Server.

https://ip-of-vm:8080/setup

How to set up your NextCloud sync server

Once you’ve loaded up the setup page, you’ll see a message. This message says “Nextcloud AIO stands for Nextcloud All In One and provides easy deployment and maintenance with most features included in this one Nextcloud instance.” Copy the password it provides, and click on the “Open Nextcloud AIO login.”

After clicking on the “Open NextCloud AIO login” button, enter the password you’ve previously entered. This will give you access to the NextCloud Admin UI. When you log in, you’ll see “Mastercontainer update.” Click on the update button to update the NextCloud instance.

Now that it is up to date, type in the domain for your AIO instance. After adding it, click on the “submit” button. Ensure you have this domain’s DNS configured. For more information on DNS settings, check the official instructions.

Once you’ve configured your domain, you’ll be on the next page. On this next page, you’ll see “Optional addons.” These addons are “ClamAV” “Collabora,” “Fulltextsearch,” “Imaginary,” and “Nextcloud Talk.” Check the boxes you wish to add to your NextCloud instance. Then, select the “Start containers” button.

When you click on the “Start containers” button, Nextcloud AIO will download and launch the containers. Then, you’ll be taken to the next page in the installer. On this page, you’ll see “Containers are currently starting”. When they’re all started, you’ll see an “Open your Nextcloud” button.

Note: save the initial NextCloud password, as you’ll need it to log into the interface.

Click on the “Open your Nextcloud” button and use the “initial Nextcloud” password provided to log in. From here, you can create users, change the initial password, and start uploading files to your Nextcloud.

default avatar image

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

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Лучший бесплатный антивирус для windows 7 64 бит на русском
  • Как прослушать порт windows
  • Windows server защита от ddos
  • Security baseline for windows 10
  • Hp m201n драйвер для windows 10