
Если бесплатного места на Google Drive или Яндекс-диске вам не хватает или вы по каким-то причинам не хотите хранить бэкапы на серверах корпораций, вам нужно персональное облачное хранилище. В статье расскажем, как поднять собственный сервер с полным контролем доступа. Инструкция пошаговая, так что вам хватит даже базовых навыков.
Что такое облачное хранилище данных
Это метод хранения информации в сети. Обычно в таком подходе данные распределены по разным серверам, а пользователь получает к ним доступ через веб-интерфейс или приложение. При этом пользователю не видно внутреннее устройство инфраструктуры.
Однако это относится только к готовым сервисам вроде Google Drive, Облако Mail.Ru, Google Диск, Dropbox, OneDrive, Яндекс-диск и так далее. В этой статье мы поговорим о персональных облачных хранилищах, архитектуру которых сможете создать самостоятельно.
Зачем нужно персональное облачное хранилище: плюсы и минусы
Главная причина — это конфиденциальность и полный контроль над файлами. Да, можно хранить бэкапы и важные файлы на Dropbox, Google Drive, iCloud или Яндекс-диске. Однако если вы не доверяете сторонним сервисам, то эти варианты не годятся. Нужно что-то собственное. У такого решения масса плюсов, но есть и минусы. Разберемся.
Плюсы
Каждому важно что-то свое. Плюсов у собственного сервера много, так что всем хватит причин, чтобы развернуть свое пространство.
- Экономия. Если вы просто храните семейные фотографии, то вам скорее всего будет достаточно бесплатного облачного хранилища на 5 или 10 Гб от Google или Dropbox. Однако хранение сотен гигабайт в этих облаках может стоить довольно дорого. Так что на дистанции собственный сервер окупится и позволит сэкономить.
- Полный контроль доступа. Пространство на облачном сервере можно дробить и распределять как угодно: можно создать отдельные каталоги для каждого члена семьи или поделить между друзьями.
- Независимость. Вы больше не будете зависеть от политики конфиденциальности и цен провайдера. Вы платите только за интернет и электричество и не зависите от факторов, на которые не можете повлиять.
- Данные всегда рядом. Если вы настроите сервер, который физически находится у вас дома, то для получения физического доступа к нему злоумышленникам пришлось бы проникнуть в вашу квартиру. Это намного менее вероятно, чем взлом iCloud, например.
Конфиденциальность. Никогда нельзя быть уверенным, что корпорация, где вы покупаете облачное хранилище, не станет жертвой хакерской атаки, в ходе которой ваши данные утекут в сеть. В случае с персональным хранилищем вы сами можете контролировать конфиденциальность и сохранность своих файлов.
Минусы
Было бы нечестно не предупредить о минусах.
- Относительная сложность. Создать собственный облачный сервер не так же просто, как зарегистрироваться и начать пользоваться, например, Google Drive. Мы подготовили пошаговую инструкцию по тому, как создать свой облачный сервис, но она предполагает, что у вас уже есть базовые знания и опыт в работе с базами данных и серверами.
- Вы сами отвечаете за безопасность. Ваш сервер — ваша ответственность. Разумеется, тот факт, что никакая корпорация не получит доступа к вашим личным файлам, это плюс, но у медали есть и обратная сторона — вам самостоятельно придется обеспечивать безопасность своего хранилища и сохранность данных.
- Скорость работы. Если вы используете в качестве машины собственный домашний физический сервер, его мощности может быть недостаточно, чтобы так же быстро загружать и выгружать файлы, как на облачный сервис Google или Dropbox.
- Трудно делиться файлами. Если вы создаете персональный облачный сервис, чтобы делиться большими объемами файлов, вам потребуется мощное железо. Чтобы множество пользователей могли без проблем получать доступ к вашему каталогу, придется раскошелиться на производительный сервер.
Если для вас плюсы перевешивают минусы, переходим к руководству.
Как выбрать сервер для облачного хранилища
В этом руководстве расскажем, как создать свой сервер облачного хранилища именно на NextCloud. У него полностью открытая архитектура, позволяющая создать надежное хранилище с расширяемым функционалом: контакты, звонки, мультимедиа, календарь и так далее. У NextCloud есть магазин плагинов, в котором можно найти готовые решения под самые нестандартные задачи.
Если зайти на сайт NextCloud и заглянуть в инструкцию по ручной установке, она покажется сложным процессом: придется предварительно установить Apache, PHP, PostgreSQL/MariaDB, Redis и так далее.
Не пугайтесь. Мы расскажем про упрощенный путь, все будет легче, чем можно представить.
По поводу выбора сервера с нужными характеристиками для вашего облака: все зависит от ваших потребностей и будущих нагрузок. Единственный действительно важный критерий — объем памяти. Вам потребуется сервер минимум с 1 Гб памяти. Если вы не можете себе такой позволить, мы расскажем, как обойтись машиной с 512 Мб на борту, но это не оптимальный вариант.
Как создать персональное облачное хранилище NextCloud
В рамках подготовки к установке пройдемся по списку того, что нам потребуется по ходу:
- Собственный физический сервер, если вы хотите создать облачное хранилище дома, или VPS.
- Инструкция написана для Ubuntu версии 20.04, но вы можете использовать и другой дистрибутив Linux. Главное, чтобы у вас были права на суперпользователя.
- Если хотите настроить безопасное подключение по TLS/SSL через бесплатный сертификат, вам потребуется домен. Без него можно обойтись, но тогда вы будете постоянно видеть в браузере предупреждение.
В установке будем использовать доступную в Ubuntu по умолчанию систему управления пакетами Snap. Но сперва проведем небольшую подготовку.
Подключаемся к серверу:
ssh username@1.2.3.4
Здесь username — это имя пользователя, а 1.2.3.4 это IP-адрес.
И обновим кое-какой софт:
sudo apt update sudo apt upgrade sudo apt install nano curl git
Установка NextCloud на Ubuntu
Скачайте и установите Snap:
sudo snap install nextcloud
Если все пройдет успешно, вы увидите сообщение:
nextcloud 24.0.1snap1 from Nextcloud✓ installed
Настройка учетной записи администратора
Будем использовать командную строку, чтобы не попадать на окно регистрации в веб-интерфейсе.
Команда:
sudo nextcloud.manual-install name pass
Вместо name и pass указываем логин и пароль соответственно.
Если все пройдет успешно, вы увидите сообщение:
Nextcloud was successfully installed
Настройка домена
По умолчанию для доступа к хранилищу можно использовать только localhost, так что прочие доверенные домены нужно добавить вручную:
sudo nextcloud.occ config:system:set trusted_domains 1 --value=domain
Где domain — домен, по которому хотите получать доступ к хранилищу.
Если все хорошо, вы увидите:
System config value trusted_domains => 1 set to string domain
По умолчанию в серверной версии Ubuntu фаервол выключен, но ради безопасности его все-таки лучше включить. После включения фаервола надо открыть порты для веб-интерфейса.
С помощью firewalld:
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --reload
Или через ufw:
sudo ufw allow 80,443/tcp
Готово. Можете подключаться к хранилищу, но пока только через небезопасный протокол HTTP.
Настройка сертификата Let’s Encrypt
Получаем сертификат:
sudo nextcloud.enable-https lets-encrypt
На вопрос отвечаем YES.
Указываем электронную почту для восстановления и домен.
Please enter your domain name(s) (space-separated): domain
В случае успеха вы увидите:
Attempting to obtain certificates... done Restarting apache... done
Настройка самоподписанного сертификата
Если домена у вас нет, тогда используйте SSL-сертификат с собственной подписью: NextCloud позволяет защитить веб-интерфейс и без доменного имени.
С шифрованием трафика все будет хорошо, но вот с проверкой подлинности будут проблемы. Предупредите знакомых, с которыми поделитесь хранилищем, что при подключении браузер будет ругаться.
Генерируем сертификат:
sudo nextcloud.enable-https self-signed
Если вернутся эти строки, значит все прошло успешно:
Generating key and self-signed certificate... done Restarting apache... done
Теперь можно подключаться к серверу по HTTPS. Вводите имя пользователя и пароль администратора, чтобы провалиться в интерфейс для работы с файлами.
Настройка базы данных
Будем использовать MariaDB.
Устанавливаем:
sudo apt install mariadb-server
Включаем автозапуск и запускаем:
sudo systemctl enable mariadb sudo systemctl start mariadb
Задаем пароль:
mysqladmin -u root password
Подключаемся, создаем новую базу данных и пользователя:
mysql -uroot -p > CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; > GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY 'nextcloud'; > \q
Настройка шифрования
В NextCloud поддерживается шифрование на стороне сервера. Прежде, чем рассказать, как его настроить, обратим внимание на несколько важных нюансов.
Дисклеймер:
- Файлы в зашифрованном виде занимают примерно на 30% больше места.
- На сервере со слабым процессором или при большом количестве пользователей из-за шифрования все будет тормозить при загрузке и выгрузке файлов.
- После включения шифрования его уже нельзя будет просто выключить в веб-интерфейсе — придется делать это в консоли.
Включаем шифрование:
- Переходим в меню «Приложения» и включаем там Default encryption module.
- Переходим в «Настройки» → «Параметры сервера» → «Безопасность» и включаем там «Шифрование на стороне сервера».
Как все работает:
На стороне сервера создается ключ, для разблокировки которого используется пользовательский пароль. Важно: шифруется только содержимое файлов, названия и структура каталогов — нет.
Где найти ключи шифрования:
./data/<username>/files_encryption ./data/files_encryption
Как сделать облачный сервер NextCloud быстрее на слабом железе
Не ставьте NextCloud на сервер с 512 Мб памяти. Для нормальной работы нужен минимум 1 Гб. Иначе с производительностью будет беда. Кроме того, если бы мы не поставили swap, то на машине с 512 Мб системный out-of-memory-killer периодически завершал бы процесс базы данных.
Если все-таки сэкономили и поставили NextCloud на сервер с 512 Мб памяти, придется заняться оптимизацией. Она не решит проблему полностью, но позволит серверу работать.
Приступим.
Установка NextCloud с SQLite
Для установки NextCloud с SQLite можно обойтись без Docker и использовать те же инструменты, что и в предыдущих разделах (Apache, PHP и модули для работы с файлами и БД).
Достаточно скачать и распаковать дистрибутив NextCloud в каталог веб-сервера, убедиться, что в системе установлены пакеты php-sqlite3 и sqlite3, и в процессе веб-инсталляции выбрать тип БД «SQLite».
В итоге файл базы (owncloud.db) будет автоматически создан в директории data, а все права по умолчанию будут назначены веб-серверам (например, www-data), как это делается в настройке snap-установки. Таким образом вы получите полностью работающее облако на SQLite, без каких-либо контейнеров.
Если же вам потребуется запустить NextCloud в контейнере Docker (например, для отработки навыков контейнеризации или чтобы легко переносить окружение), это тоже возможно: достаточно взять официальный образ NextCloud и задать параметры для SQLite (либо в docker-compose.yml, либо через переменные окружения), однако основная логика работы останется той же.
При первом открытии NextCloud после всех манипуляций появится предупреждение об использовании SQLite — это нормально.
Теперь NextCloud будет работать на сервере с 512 Мб памяти. Медленно, но все-таки работать и не падать.
Включение Zswap
Zswap снижает нагрузку на медленный своп за счет сжатия данных в оперативной памяти.
- Проверьте, активирован ли Zswap:
cat /sys/module/zswap/parameters/enabled
Если в ответ получили N, переходите к шагу 2. Если получили Y, то Zswap у вас уже активирован.
- Включите Zswap:
echo Y | tee /sys/module/zswap/parameters/enabled echo z3fold | tee /sys/module/zswap/parameters/zpool
- Настройте автоматический запуск Zswap после перезагрузки:
Откройте файл /etc/rc.local для редактирования:
sudo nano /etc/rc.local
Вставьте следующие строки между #!/bin/bash и exit 0:
echo Y | tee /sys/module/zswap/parameters/enabled echo z3fold | tee /sys/module/zswap/parameters/zpool
Сохраните файл и закройте редактор.
- Если файла /etc/rc.local не было:
Сделайте файл исполняемым:
sudo chmod +x /etc/rc.local
Перезагрузите службы:
sudo systemctl daemon-reload sudo systemctl start rc-local
Настройка хранения логов на диске
Хранение логов на диске предотвращает их накопление в памяти.
- Откройте файл конфигурации journald:
sudo nano /etc/systemd/journald.conf
- Найдите строку #Storage=auto и замените её на:
Storage=persistent
- Перезапустите службу journald:
sudo systemctl restart systemd-journald
Теперь у вас есть собственный облачный сервер для хранения файлов. Вы можете делиться ими со знакомыми и коллегами или делать общедоступными по ссылке. Если вам нужно больше возможностей, то функционал хранилища можно расширить с помощью плагинов из магазина приложений NextCloud.