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

8.4K
показов

8.7K
открытий

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

Скрин с нашего частного облака, куда выкладываем результаты парсинга xmldatafeed.com

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

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

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

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

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

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

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

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

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

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

Что же такое Nextcloud?

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 может быть интегрирован с более чем сотней сторонних приложений. Звучит как фантастика, но и это ещё не всё.

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

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-сертификат») .

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

  • страница официальной документации;
  • генератор конфигурации;
  • настройка сервера Apache для работы с SSL/TLS.

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

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

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

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

sudo apt install fail2ban

Заключение

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

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

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

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

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

Updated: 07/13/2023 by

Illustration: Syncing a desktop computer, laptop, and smartphone with Nextcloud.

Cloud computing services have become widely used, ranging from cloud storage services, like Dropbox and iCloud, to productivity suites, like Google Workspace and Office 365. These services offer the ability to sync documents across devices and to use professional software from any web browser or mobile device. As cloud computing matures, an increasingly popular solution is for users to operate a personal cloud server.

In these instructions, we create a cloud storage service you control using the open-source software, Nextcloud. We create a local test server, limited to operating in your local network. Then we install the Nextcloud client on your desktop computer and mobile device, and synchronize files between them. Then we show how you can run this same general configuration on a remote hosting service, so you can access your cloud from anywhere.

About Nextcloud

Nextcloud is a cloud storage server designed to scale to hundreds of thousands of users. You can run the client software on Windows, macOS, Linux, Android, and iOS, syncing files to multiple devices.

You can also access your files on the web by logging in to your Nextcloud web portal. The portal features an Administrator Control Panel, where you can add users, configure group permissions, and set individual disk quotas. The portal also uses a plugin system to provide additional features, such as real-time chat and video conferencing for you and your other users.

To learn more about Nextcloud, visit the Nextcloud official website.

Creating a local Nextcloud server

Note

To skip the local installation and install Nextcloud on a web hosting service with a domain name, proceed to running Nextcloud on the Internet.

In this section, we create a Nextcloud server on your local network. The cloud service is only available to devices connected to your network. This setup lets you try out Nextcloud in the security of your local network, without spending any money on a domain name or a remote web hosting service.

You could run the server on a dedicated computer, but for testing, it’s easier to install it on a VM (virtual machine), which you can run on your primary computer. Your computer requires the following resources:

  • A 64-bit CPU (central processing unit) with a 64-bit operating system. If you’re not sure, see: How to determine if you have a 32-bit or 64-bit CPU.
  • An Internet connection.
  • 10 GB of free disk space.
  • At least 1 GB of RAM (random-access memory) to dedicate to the VM.

Download Ubuntu 18 Server

Nextcloud requires a server running Linux. The recommended Linux OS (operating system) for Nextcloud is Ubuntu Server, so that’s what we use in this example.

Ubuntu is free to download and use. Download Ubuntu Server 18.04 from https://releases.ubuntu.com/bionic/ubuntu-18.04.6-live-server-amd64.iso. It’s a large file, at about 1 GB.

Install VirtualBox and create a VM

In this example, we use Oracle VM VirtualBox to create and run our VM. VirtualBox is free of charge for personal use.

  1. In a browser, go to https://www.virtualbox.org/wiki/Downloads. Click Windows hosts to download the installer for Windows.
  2. Run the installer using the default installation options. When the installation is complete, run VirtualBox.
  3. In VirtualBox, click New to create a new virtual machine.

Click the New button.

  1. Name the VM. The name can be anything, but it should contain the word Ubuntu. Make sure «Type» is set to Linux and «Version» is set to Ubuntu (64-bit). Click Next.

Give the virtual machine a name containing the word Ubuntu.

  1. Set the «Memory size» to 1024 MB (1 GB). Click Next.

Set the memory size to 1024 MB.

  1. For «Hard disk,» choose Create a virtual hard disk now and then click Create.

Select Create a virtual hard disk now, and click Create.

  1. For «Hard disk file type,» choose VDI. Click Next.

Select Hard disk file type VDI.

  1. For «Storage on physical hard disk,» choose Dynamically allocated.

Choose Dynamically allocated.

  1. For «File location and size,» choose a disk size of 10 GB. (You can choose a larger size if you’d like.) Click Create.

Choose disk size of 10 GB.

  1. Configure the network adapter, so it’s part of your local network. With your VM highlighted on the left, click Settings.

Click the Settings button.

  1. On the left, click Network. On the right, under «Attached to,» select Bridged adapter. Click OK.

On the left, click Network. In the Attached to: drop down box, choose Bridged Adapter.

  1. The VM is ready to go. Click Start.

With the Ubuntu Server virtual machine highlighted, Click the Start button.

  1. At «Select start-up disk,» click the folder icon, and choose the Ubuntu ISO you downloaded. If it’s still downloading, wait until the download is complete. Click Start.

In the Select start-up disk window, click the folder icon. Select the Ubuntu Server ISO file you downloaded.

The Ubuntu Server ISO boots. Your virtual machine is up and running.

Install Ubuntu Server on your VM

Your VM boots into the Ubuntu Server live ISO, which contains the Ubuntu installer.

Note

When you click inside the VM window, it captures your mouse and keyboard. Your mouse cursor will disappear, and you may not be able to use Windows shortcuts such as Alt+Tab. You can release the keyboard and mouse by pressing the VirtualBox «Host Key,» which is the right Ctrl on your keyboard. To continue using the VM, click inside its window again.

Note

The installer interface is text-only. In the following steps, use the up, down, and Tab keys to change the highlighted option, the spacebar to toggle a check box, and Enter to make a selection.

  1. Set your keyboard type. If you’re using a standard US keyboard, press Enter.
  2. Choose Install Ubuntu and press Enter.

When the virtual machine boots from the Ubuntu Server Live ISO, choose a keyboard layout, then choose Install Ubuntu.

  1. Under «Network connections,» choose the network adapter that Ubuntu should use. In this example, we want it to use our Ethernet connection (eth). Choose Done and press Enter.

Select your network adapter, then choose Done.

  1. At «Configure proxy,» press Enter.
  2. At «Configure Ubuntu archive mirror,» press Enter.
  3. Under «Filesystem setup,» choose the default, Use an Entire Disk. Press Enter.

In Filesystem setup, choose Use an Entire Disk.

  1. The 10 GB VirtualBox VDI is the only disk. At «Choose the disk to install to,» press Enter.

Choose the VirtualBox VDI as the disk to install to.

  1. Review the summarized information, then choose Done and press Enter.
  2. Under «Confirm destructive action,» choose Continue and press Enter.

At Confirm destructive action, choose Continue.

  1. Under «Profile setup,» create a new user profile. The new profile is also the default Ubuntu administrator account. «Your name» can be anything you like. For «Your server’s name,» enter a hostname for your computer (using only numbers, lowercase letters, dashes, and underscores), such as nextcloud. For «username,» choose the name you want to use to log in to the computer (using lowercase letters and no spaces). Choose a password, and enter it again to verify. Choose Done and press Enter.

In Profile Setup, create an administrator user profile, and set your hostname.

  1. Under «SSH setup,» select the box marked Install OpenSSH server. An SSH (secure shell) allows you to remotely connect to the machine if necessary. Choose Done and press Enter.

Mark the box labeled Install OpenSSH, then choose Done.

  1. Under «Featured Server Snaps,» choose Nextcloud. Choose Done and press Enter.

Under Featured Server Snaps, select Nextcloud, then choose Done.

  1. The installation process continues. When it’s done, choose Reboot now to boot the installed operating system.

When installation is complete, choose Reboot Now to restart the virtual machine, and boot Ubuntu Server.

Configure Ubuntu and install Nextcloud server

  1. When the server boots, log in with the name and password you chose during Ubuntu profile setup.

Note

You might notice that the login prompt gets mixed up with other system messages. If you don’t see the login prompt, press Enter to display a new one.

Logging into Ubuntu Server.

  1. Perform an initial system update. Run sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade. Enter your password when prompted. If you’re asked to confirm an upgrade, type y, and press Enter.

Run sudo apt-get update, then run sudo apt-get upgrade.

  1. Add a firewall rule to allow OpenSSH connections. Run sudo ufw allow OpenSSH.
  2. Run sudo ufw enable to enable the firewall.
  3. Run sudo ufw status to verify that the firewall is filtering the server’s network traffic.

Run sudo ufw allow OpenSSH, then run sudo ufw enable.

  1. Start the Nextcloud installer. Run sudo nextcloud.manual-install user pass. For user and pass, choose the name and password you want to use with your Nextcloud account. It can be different than your Ubuntu name and password. This account is the Nextcloud administrator account.

Run the command sudo nextcloud.manual-install username password.

After a few moments, you see:

 Nextcloud was successfully installed
  1. Next, open ports 80 (HTTP (hypertext transfer protocol)) and 443 (HTTPS) in your firewall. Run sudo ufw allow 80,443/tcp.

run sudo ufw allow 80,443/tcp.

  1. Nextcloud maintains an internal list of trusted domains. Only requests addressed to these domains get a response from the Nextcloud server. By default, the only trusted domain is localhost (the server can only respond to itself). To view the trusted domains, run sudo nextcloud.occ config:system:get trusted_domains.

sudo nextcloud.occ config:system:get trusted_domains

  1. You need to add your server’s IP address to the trusted domain list. First, determine your server’s IP address. Run ip a | grep inet to find the IP address of the server on your local network. If you are on an IPv4 network, it should start with 192.168 or 10.0.

Run up a | grep inet.

  1. Here, our address is 192.168.1.173. Now, set this address as a trusted domain. Run sudo nextcloud.occ config:system:set trusted_domains 1 —value=domain, where the domain is the IP address of your server.

Add your server's IP address to Nextcloud's list of trusted domains.

  1. Create an SSL (secure sockets layer) certificate so that Nextcloud can encrypt your data over HTTPS. Because this cloud is restricted to your home network, you can use a self-signed certificate. Run sudo nextcloud.enable-https self-signed.

Enable HTTPS by generating a self-signed SSL certificate.

Server configuration is complete, and your cloud is operational. The Nextcloud service is running, and your server is listening on your local network for HTTP and HTTPS connection requests.

Log in to Nextcloud

To log in to your Nextcloud web dashboard, you need to add a security exception to your browser, so it accepts your self-signed SSL certificate. Normally, you would never want to create an exception like this, unless you control the server and network. (This step is not required if you’re running Nextcloud on the Internet, in which case it uses Let’s Encrypt to provide SSL certificates.)

  1. In a browser, go to the address of your Nextcloud server. In this example, the address is 192.168.1.173.
  2. Your web browser will warn you that the SSL certificate is self-signed. In Chrome, click Advanced, then Proceed to.

In Chrome, click Advanced, then Proceed to (your server address).

If you’re using Firefox, click Advanced, Add Exception, Confirm Security Exception.

In Firefox, click Advanced, Add exception, Confirm security exception.

  1. Enter your Nextcloud username and password, as you configured them when installing Nextcloud. Click Log in.

Log in with your Nextcloud admin user and password.

  1. In the Nextcloud dashboard, you can view and work with the files you’ve stored in the cloud. If you click the gear icon (⚙), you can access Administrator settings and customize your server preferences. No configuration is necessary to begin using Nextcloud, so we won’t change anything now. For a detailed guide to Nextcloud preferences, see https://docs.nextcloud.com/server/stable/user_manual/en/userpreferences.html.

Nextcloud dashboard

How to use Nextcloud

Your server is running, and now it needs clients. In these steps, you install the Nextcloud client on your desktop computer, and on a smartphone.

Install Nextcloud client on your desktop computer

  1. In a browser, go to https://nextcloud.com/install/. Click Download for desktop.
  2. Click the Windows option. The installer downloads.

Choose the operating system of your desktop computer to download the appropriate Nextcloud client.

  1. Run the installer, leaving all options at the defaults. When the installation is complete, check Run Nextcloud, and click Finish.

Run the Nextcloud installer. When installation is complete, choose Run Nextcloud, then click Finish.

  1. At the Nextcloud Connection Wizard, click Log in.

In the Nextcloud Connection Wizard, click Log in.

  1. For Server Address, enter the IP address of your server.

Enter the IP address of your server.

  1. You are notified that the server certificate is untrusted (because it is self-signed). Check the box labeled Trust this certificate anyway. Click OK.

Check the box labeled Trust this certificate anyway, then click OK.

  1. Click Log in.
  1. Enter the name and password you chose when installing Nextcloud. Click Log in.

Enter your Nextcloud name and password, and click Log in.

  1. Click Grant access.

Click Grant access

  1. At «Setup local folder options,» click Connect.

At the Local folder options screen, leave everything at default values, and click Connect.

  1. Nextcloud starts its first sync, and downloads the default «Welcome to Nextcloud» files to your local folder.

First sync

  1. When your local folder is in sync with the server, you’ll see a white checkmark in a green circle. When a sync is in progress, this icon turns blue with a white arrows.

Nextcloud Syncing (blue with white arrows) and In Sync icons (green with white checkmark).

  1. You’ll also see the icon in your notification area. Click this icon to open the Nextcloud window. Right-click it for a menu of options, including Pause synchronization, Settings, and Quit.

Nextcloud icon in the systray.

Congratulations! You’re now running a private cloud server, and syncing to a client. To access your local Nextcloud folder, open a File Explorer window (press Windows key+E). On the left, click Nextcloud.

In File explorer, the Nextcloud icon is in the left pane.

If you add files or folders here, they are automatically synced to the cloud, and to any other devices running the client.

Install Nextcloud client on your mobile device

Note

The screenshots in this section are on an Android device, but the steps are the same on iOS.

  1. Install the Nextcloud app. On Android, use Google Play Store. On iOS, use the App Store.

In the Google Play store, Install Nextcloud.

  1. Open the app, and tap Log in.

In the Nextcloud app, click Log In.

  1. When prompted, allow access to files on your device.

Allow Nextcloud to access your files.

  1. For the server address, enter the IP address of your server.

Enter the IP address of your Ubuntu server.

  1. Tap Yes to trust the self-signed certificate.

Tap Yes to trust your server's self-signed cert.

  1. Tap Log in.
  1. Enter the name and password you configured in installing Nextcloud and tap Log in.

Log in with your Nextcloud name and password.

  1. Tap Grant access.

Grant access

  1. Nextcloud is now installed. However, no files are synced yet. On mobile, where storage is at a premium, the Nextcloud client will not sync anything to your device until you ask for it. To view what’s available to sync from your Nextcloud, tap the main menu button ( ☰ ).

Click the hamburger menu button in the upper left. It looks like three horizontal lines.

  1. Choose All files.

Tap All Files

  1. Here, you see the files already on your Nextcloud server. To sync something to your device, tap the three dots ( ⋮ ) next to the file or folder, and choose Sync.

To sync an item to your device, click the three vertical dots next to the item, and choose Sync.

  1. To work with files that are synced to your device, open the main menu ( ☰ ) and choose On device.

Tap the hamburger menu, and tap On device.

  1. To upload files from your device to Nextcloud, open the folder where you want to put the file, and tap the plus icon (+).

Click the Plus icon to add files from your device to the cloud.

Starting and stopping the VM

Your Nextcloud server is now available to any devices connected to your local network, as long as your VM is running. However, you will want to stop the server when you’re done testing, or when you need to shut down or reboot your computer.

You can shut down your Ubuntu server from the Ubuntu Server command line by running sudo shutdown now. To start the server later, select the VM in your VirtualBox window, and click Start.

Alternatively, you can save the machine state. Saving state will freeze the VM and all its current memory contents, and resume from this point when you start it later. To save the state, hold down the right Ctrl on your keyboard, and then press Q on the keyboard. Select Save the machine state, and click OK.

In VirtualBox, hold the right Ctrl button and press the Q key, then choose Save state.

Running Nextcloud on the Internet

To access your cloud from anywhere, you can create this same setup on a remote host, such as Linode or DigitalOcean.

These steps require you own a domain name. Configure Nextcloud to use a subdomain of your existing domain, such as subdomain.mydomain.com.

  • How to register a domain name.

In the following example, we set up Nextcloud on a Linode «Nanode,» their minimal hosting option. As of March 2019, a Nanode offers 1 CPU, 1 GB RAM, and 25 GB SSD for your hosting instance, priced at $5/mo.

Note

These steps also work on the equivalent $5/mo hosting option at DigitalOcean.

Create an Ubuntu Nanode and configure your domain

  1. Log in to your Linode account. Go to https://www.linode.com/, and click Log in. Enter your Linode name and password.
  1. At the Linode dashboard, click Create, and choose Linode.
  1. Under «Create from image,» «Public Images,» choose Ubuntu.
  1. For «Region,» choose the location that is geographically closest to your usage area.
  1. For «Linode Plan,» chose Nanode. (You can choose a more expensive hosting option if you prefer.)
  1. For «Root password,» set the Administrator password for your hosting instance. The first time you log in to the instance, you will log in as username root, and the password you set here.
  1. Click Create.
  1. Determine the IP address of your server. In the Linode dashboard, click Linodes on the left. On the right, you’ll see the IPv4 and IPv6 address of your Nanode. Copy down the IPv4 address.
  1. Log in to your domain name registrar account. Add a new DNS (domain name system) resource record to your domain name’s DNS settings. (If you’re not sure how to add a record to your domain name, check the documentation on your registrar’s website.) Create a new Type A record. The Name of the record is the subdomain name. For example, you could name it nextcloud, mycloud, or anything else you like. (The name should contain only lowercase letters, numbers, dashes, or underscores, and no spaces). Set the Data entry of the record to the IP address of your Nanode, which you wrote down in the previous step.

Configure Ubuntu, and install Nextcloud server

  1. In your Linode dashboard, on the left, click Linodes. Under your new Nanode, click Launch Console.
  1. If necessary, press Enter to get a login prompt. For the user, enter root. For password, enter the root password you configured when creating the Nanode.
  1. Update the system.
 apt-get update && apt-get upgrade && apt-get dist-upgrade

Note

If you are prompted about updating your GRUB (GRand Unified Bootloader) configuration, choose to keep the currently installed GRUB configuration.

  1. Create a regular system user, so you can log in as someone other than root. Run the adduser command. The username can be anything you like (lowercase letters, numbers, dashes, and underscores, no spaces). Enter a password, then enter it again to verify it. The rest of the information can be left blank. When prompted, type y and press Enter to create the user.
 adduser username
  1. Next, run usermod to add this user to the «sudo» group, so you can run administrator commands without logging in to the root account.
 usermod -aG sudo username
  1. Your regular user can now run commands with sudo. Log out of the root account.
 exit
  1. Log in again, with the regular user’s name and password.
  1. Run the following command to check if the snap package manager is installed, and if not, install it.
 if ! which snap; then sudo apt-get install snapd; fi
  1. Install the Nextcloud server snap package. When prompted, enter the regular user’s password.
 sudo snap install nextcloud
  1. Install the Nextcloud server. For newuser and newpass, enter a new username and password for the Nextcloud administrator account. (You use these to log in to the Nextcloud client apps and web portal.)
 sudo nextcloud.manual-install newuser newpass
  1. Configure the firewall to allow OpenSSH, HTTP, and HTTPS connections, then enable the firewall.
 sudo ufw allow OpenSSH
 sudo ufw allow 80,443/tcp
 sudo ufw enable
  1. Set your subdomain as a Nextcloud trusted domain. Only requests made to this domain name will receive a response from Nextcloud. In the next command, replace subdomain.mydomain.com with your subdomain name.
 sudo nextcloud.occ config:system:set trusted_domains 1 --value subdomain.mydomain.com
  1. Enable HTTPS using Let’s Encrypt. This step automatically creates an SSL certificate for you, that needs to be renewed (for free) every 90 days.
 sudo nextcloud.enable-https lets-encrypt
  1. Verify you meet the requirements, then type y to continue.
  1. At «Enter an e-mail address,» enter an e-mail address where Let’s Encrypt can notify you about certificate renewal.
  1. At «Enter your domain name(s),» enter your subdomain name, for example, subdomain.mydomain.com.

Your Nextcloud is now running on the Internet. You can use it as described in the section how to use Nextcloud, but instead of a local IP address, use your subdomain name.

If you enter your subdomain name in a web browser, you can log in to the Nextcloud web portal with your Nextcloud administrator username and password. When installing the Nextcloud client, use your subdomain name as the Nextcloud server address.

Best of all, you don’t need to add any trust exceptions to your browser or client, because Let’s Encrypt certificates are registered with a trusted certificate authority.

General Nextcloud tips

Saving big files

If you’re working with a big file and saving it frequently, Nextcloud might have trouble syncing it. This problem arises when you make changes to the file faster than it can be uploaded to the server. If you encounter this problem, wait until the Nextcloud icon in your notification area turns green before saving your document again. Or, right-click the Nextcloud icon and choose Pause synchronization. When you’re ready, right-click the icon and choose Resume synchronization to upload your changes to Nextcloud.

Resolving conflicts

If changes are made to a file on two separate devices, either at the same time or while one device is not running the Nextcloud client, conflicts may arise. The conflict occurs when you try to sync both versions of the file.

If the Nextcloud server isn’t sure which version of the file you want to keep, it will keep them both, and display a warning in the client window. The Nextcloud icon changes to a yellow circle with an exclamation mark.

Nextcloud message stating there are unresolved conflicts.

Click the yellow message bar to view the activity log, and find out which files are having a conflict.

In the activity log, you can see which files are conflicted.

The conflicting file will be renamed to include «conflicted copy» and the date. You can open both versions of the file and compare them, to figure out which one you want to keep.

To resolve the conflict, move the conflicted copy to a location outside of your Nextcloud folder, such as your desktop. Or, if you’re sure, you can delete it.

When your Nextcloud folder contains no files with «conflicted copy» in their file name, the conflict is resolved. If your icon doesn’t turn green right away, you can force a new sync, which will re-check the files in your local Nextcloud. In your client window, click the button with three dots ( ⋯ ) to the right of your main Nextcloud folder, and choose Force sync now.

In the Nextcloud client window, click the button with three dots next to your main Nextcloud folder. Choose Force sync now.

When the icon changes back to the green checkmark, your files are in sync again.

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

Общий вид проекта

Общая картина такая: 

  1. У нас будет удалённый виртуальный сервер, который мы купим у российского провайдера.
  2. По желанию на сервере можно настроить доступ без пароля, по специальному ключу безопасности.
  3. На сервере будет работать программа Nextcloud, которая будет принимать наши файлы на сервере.
  4. На компьютере установим клиентскую часть Nextcloud, которая будет отправлять наши файлы на сервер.

В итоге это будет похоже на Dropbox или Яндекс-диск, только будет строго нашим. Как и в упомянутых сервисах, можно будет открывать доступ к файлам для других людей, делиться ссылками и даже генерировать QR-коды для скачивания файлов.

В этой статье мы пройдём два первых шага: купим и включим виртуальный сервер и настроим для него ключи. 

Что такое Nextcloud

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

  • Синхронизация и обмен файлами.
  • Почтовый сервер.
  • Календарь.
  • Планировщик задач.
  • Корпоративный мессенджер и видеозвонки.

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

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

Смысл приложения в том, чтобы создать альтернативу закрытым решениям от многочисленных вендоров — например Atlassian или Intuit. Если ты крупная американская компания, то тебе не страшно покупать подобные системы у американских вендоров. А вот в России с этим теперь проблемы. Поэтому нужна альтернатива. 

Выбор сервера

Есть два условных вида виртуальных серверов: под приложения и под хранение. 

  • Сервер для приложений будет иметь быстрый процессор, много оперативной памяти и чуть-чуть хранилища (около 50 Гб).
  • Сервер для хранения — наоборот: много места на жёстком диске, но слабенький проц и немного оперативной памяти. 

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

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

Мы нашли две компании, которые могут предоставить такой сервер: RUVDS и FirstVDS. На момент написания статьи у RUVDS закончились диски (обещали это исправить в ближайшее время), поэтому мы остановились на FirstVDS. 

Регистрация и покупка

Заходим к провайдеру, начинаем заказывать сервер. Выбираем сервер для хранения (VDS Storage), указываем нужный объём диска. В качестве операционной системы можно выбрать Ubuntu. В графе «Выбор предустановленного ПО» обязательно отмечаем Nextcloud, это существенно упростит нам задачу в будущем. 

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

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

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

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

Настраиваем сервер для своего облачного хранилища

Настраиваем сервер для своего облачного хранилища

⚠️ В этом письме есть два ключевых параметра: IP-адрес вашего сервера и пароль от него. Запишите их и держите где-то рядом, они нам понадобятся.

Настройка доступа

Когда сервер запустится, в личном кабинете (Товары → Виртуальные серверы) в колонке «Состояние» появится статус «Активен». Это значит, что с ним теперь можно работать и настраивать, как нам нужно. Там же можно перезагрузить сервер, поменять пароль или изменить параметры железа, например добавить больше памяти.

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

ssh username@82.146.34.72

Username и IP-адрес нужно взять из письма, которое пришло после активации сервера. Если оно потерялось, можно посмотреть эти данные в панели управления в меню «Инструкция»:

Настраиваем сервер для своего облачного хранилища

Если всё прошло успешно, мы увидим приветствие сервера, его короткое описание и командную строку суперпользователя root:

Настраиваем сервер для своего облачного хранилища

Когда сервер спросит при первом подключении, доверяем ли мы этому соединению, нужно написать yes

Если у вас Windows 10, то для SSH-подключения можно использовать PowerShell, установив OpenSSH-клиент. Для этого запустите PowerShell и выполните команды:

Add-WindowsCapability -Online -Name OpenSSH.Client*

Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'

Первая команда устанавливает OpenSSH-клиент, а вторая проверяет его статус. Если всё в порядке, в статусе будет написано Installed (установлен).

Для отключения от сервера нужно набрать команду logout. Связь по SSH прекратится, и терминал будет выполнять команды не на сервере, а на вашем компьютере.

Настраиваем сервер для своего облачного хранилища

Настраиваем сервер для своего облачного хранилища
Проверяем, установлен ли SSH-клиент
Настраиваем сервер для своего облачного хранилища
Теперь мы можем в Windows работать на нашем сервере по SSH

Чтобы не вводить каждый раз пароль, повысить уровень безопасности при подключении и в дальнейшем автоматизировать разные процессы, мы можем сделать SSH-ключ. 

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

В общих чертах всё работает так:

  1. Мы у себя на компьютере генерируем пару ключей для шифрования — публичный и приватный. Если интересно, зачем нужны эти ключи, почитайте статью про асимметричное шифрование. Сами ключи будут храниться каждый в своём файле.
  2. Публичный мы отправим на сервер, им можно делиться с кем угодно, а приватный никому показывать нельзя.
  3. Мы настроим компьютер и сервер так, чтобы при SSH-подключении вместо пароля сервер брал наш приватный ключ и смотрел, подходит он в пару к публичному или нет. Если да (а мы настроим, чтобы было да), то соединение установится.

Чтобы создать новую пару ключей в Linux или Mac OS, выполните команду ssh-keygen. Нас попросят указать имя файла, где будут храниться ключи, и кодовую фразу (пароль для ключа). Кодовую фразу можно не вводить и нажать Enter. По умолчанию все ключи хранятся в каталоге пользователя в папке /.ssh/id_rsa:

Настраиваем сервер для своего облачного хранилища

Создание ключа в Windows
Настраиваем сервер для своего облачного хранилища
Server-key – это имя файла с ключами

Чтобы сервер мог пускать нас по ключу, нужно скопировать на него наш публичный ключ. Для этого в Linux и Mac OS выполним команду (подставьте свой адрес сервера):

ssh-copy-id -i /Users/mike/.ssh/server-ssh.pub root@82.146.34.72

Если у вас Windows, выполните такую команду в PowerShell (не забудьте свой адрес сервера):

type C:\Users\Mike/.ssh/server-ssh.pub | ssh root@82.146.34.72 "cat >> .ssh/authorized_keys"

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

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

Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Start-Service ssh-agent
ssh-add "C:\Users\Mike/.ssh/server-ssh"

Настраиваем сервер для своего облачного хранилища

При добавлении ключа сервер спросит пароль — нужно указать пароль от сервера, а не от ключа

Проверяем, что доступ по ключу работает: 

пишем в Linux и MacOS: ssh -i /Users/mike/.ssh/server-ssh root@82.146.34.72 

пишем в Windows: ssh -i "C:\Users\Mike/.ssh/server-ssh" root@82.146.34.72

и смотрим, какой пароль спросит сервер — если ключа, то всё отлично:

Настраиваем сервер для своего облачного хранилища

Сервер спросил пароль от ключа, значит, всё работает

Что дальше

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

Вёрстка:

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

А давайте быстро и относительно легко создадим облачное хранилище, аналогичное 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 заключается в том, что информация хранится в надежном месте, которое вы контролируете. Узнать больше об облачных сервисах вы можете из нашего блога.

  • Свой логотип при загрузке windows 10
  • Свой компьютер не отображается в сети windows 10
  • Свой git сервер на windows
  • Свой webdav сервер на windows
  • Свой web сервер на windows