Публичные облачные хранилища удобны ровно до того момента, когда упираешься в лимит бесплатного тарифа или читаешь обновлённые правила использования. Подписка растёт в цене, файлы лежат на чужих дисках, а список допустимого к хранению время от времени уточняется не в вашу пользу. Nextcloud отвечает на это простым приёмом: облако переезжает на ваш сервер, и правила в нём устанавливаете вы. Проект вырос из ownCloud в 2016 году и с тех пор стал главным именем среди открытых платформ личных облаков: файлы, календарь, контакты, офисные документы и клиенты для всех платформ. Ниже разобрано, какой сервер под это нужен, как поставить Nextcloud на Ubuntu Server со стеком LEMP, настроить шифрование и защиту, и что делать с копиями, чтобы облако не превратилось в единственную точку провала.
Зачем своё облако, когда вокруг готовые сервисы
Арифметика простая. Тариф VPS с большим диском стоит как несколько месяцев подписки на объёмное хранилище, а через год-два оказывается ощутимо дешевле. Дальше вопросы вкуса. Фотографу важно, чтобы архив из сотен тысяч снимков лежал под его контролем. Команде малого бизнеса важно, что документы не уходят на чужие серверы. Семье хватает галереи и общего календаря без оглядки на лимиты и подписки. Nextcloud закрывает все три сценария одной установкой. Интересно, что платформа пригодна и одному человеку, и компании: пользователи, группы, права и внешние ссылки, вся логика корпоративного диска без корпоративной цены.
Из коробки облако умеет следующее:
- Files, хранение файлов с историей версий и корзиной;
- Photos, галерея фотографий с альбомами и лентой по датам;
- Calendar и Contacts, календарь и адресная книга через CalDAV и CardDAV;
- Mail, почтовый ящик прямо в интерфейсе облака;
- Talk, звонки и чаты для команды;
- Notes, Tasks и Deck, заметки, задачи и доски проектов.
Для работы с документами в браузере подключаются редакторы OnlyOffice или Collabora, а для лёгкого просмотра хватает встроенных средств. Клиенты под Windows, macOS, Linux, iOS и Android синхронизируют выбранные папки, так что переезд с публичного сервиса почти незаметен: привычная папка на рабочем столе осталась, только лежит она теперь у вас.
Отдельный класс пользователей переезжает ради галереи: мобильный клиент выгружает снимки с телефона автоматически, а лента и альбомы превращают сервер в семейный архив. Когда родственники просят показать фото с отпуска, им отправляется ссылка с паролем, а не гигабайтное письмо, и это меняет привычки всей семьи.
Честности ради, минусы у своего облака есть. Обслуживание, обновления и резервные копии ложатся на владельца, и если сервер один, а копий нет, то "своё" незаметно превращается в "хрупкое". Поэтому к копиям ниже вернёмся отдельно, это не опция, а часть конструкции.
Сервер под Nextcloud и выбор стека LEMP
Свежий Ubuntu Server LTS, 2 ГБ оперативной памяти для комфортной работы интерфейса, процессор любой современный, диск считается по объёму данных плюс запас на рост. Небольшой команде двух гигабайтов обычно хватает, дальше расход растёт на генерацию превью и фоновый поиск. Для облака понадобится домен: клиенты, приложения и сертификаты завязаны на нормальное имя, а не на IP-адрес.
Стек классический LEMP: Nginx как веб-сервер, PHP-FPM как обработчик, MariaDB как база. Свежая LTS-ветка Ubuntu несёт в репозитории PHP 8.3, этого достаточно. Обмен между компонентами простой: Nginx принимает соединения, PHP-FPM исполняет код, MariaDB хранит метаданные, а файлы лежат на диске напрямую. Понимание этой схемы экономит часы отладки: если тормозит галерея, первым делом смотрят на генерацию превью, а не на конфиг веб-сервера. Установка компонентов выглядит так:
apt update && apt upgrade -y
apt install -y nginx mariadb-server php8.3-fpm php8.3-mysql php8.3-gd php8.3-curl php8.3-intl php8.3-imagick php8.3-zip php8.3-mbstring php8.3-xml php8.3-bcmath php8.3-gmp php8.3-apcu redis-server
Пакет php8.3-apcu ставит локальный кэш, Redis обслуживает блокировки, без которых два одновременных изменения одного файла превращаются в лотерею. Это не каприз, а рекомендации самой платформы. На момент подготовки материала актуальная мажорная ветка сервера 35, свежие сборки выходят несколько раз в год. Своп на таком сервере нелишний: даже если памяти хватает, редкие пики генерации превью приятнее пережидать, чем разбирать пятисотые ошибки.
Данные лучше сразу развести по каталогам: код облака живёт в /var/www/nextcloud, а пользовательские файлы в отдельном каталоге вроде /var/www/nextcloud-data. Если завтра диск переполнится, вынести данные на отдельный том окажется делом одного вечера, а переустановка не тронет ни одного пользовательского файла. Каталог данных размещается на самом вместительном разделе: переезд возможен и позже, но потребует правки config.php и аккуратного переноса прав.
Установка Nextcloud Server из архива с веб-настройкой
Платформа ставится из официального архива, свежая сборка всегда доступна по постоянному адресу, поэтому команда не устаревает:
cd /tmp
curl -o latest.tar.bz2 https://download.nextcloud.com/server/releases/latest.tar.bz2
tar -xjf latest.tar.bz2 -C /var/www/
chown -R www-data:www-data /var/www/nextcloud
mkdir -p /var/www/nextcloud-data
chown www-data:www-data /var/www/nextcloud-data
База создаётся четырьмя командами в консоли MariaDB:
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nc_user'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nc_user'@'localhost';
FLUSH PRIVILEGES;
После запуска Nginx с конфигом из следующего раздела мастер установки открывается в браузере: он попросит логин и пароль администратора, параметры базы и каталог данных, который уже подготовлен. Процедура занимает минут пять. Если облако доступно и по IP, и по имени, адреса добавляются в список доверенных доменов в config.php, иначе платформа вежливо откажется открываться под чужим именем. Если сервер за брандмауэром, для мастера установки достаточно портов 80 и 443, остальное делает браузер. Права на каталог данных проверяются руками сразу после установки: владелец www-data и никакого доступа со стороны.
Для рутины у платформы есть консольная утилита occ. Два примера, которые пригодятся сразу: пересканирование файлов после ручного копирования в каталог данных и включение режима обслуживания перед обновлениями:
sudo -u www-data php occ files:scan --all
sudo -u www-data php occ maintenance:mode --on
Настройка Nginx и PHP-FPM под большие загрузки
Конфигурация веб-сервера для облака отличается от конфигурации обычного сайта тремя вещами: большим лимитом на тело запроса, щедрыми буферами под ответы PHP и запретом доступа к служебным каталогам. Минимальный рабочий вариант:
server {
listen 80;
server_name cloud.example.com;
root /var/www/nextcloud;
client_max_body_size 512M;
fastcgi_buffers 64 4K;
location / {
rewrite ^ /index.php;
}
location ~ \.php(?:$|/) {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates)(?:$|/) {
return 404;
}
}
Директива client_max_body_size подбирается под максимальный файл, который планируется загружать через веб: 512 мегабайтов хватает для повседневных нужд, крупные видеоматериалы требуют и значения побольше. Буферы fastcgi спасают от обрывов на медленных клиентах, а последний location закрывает путь к внутренностям платформы снаружи. Сертификат подключается любым привычным способом, переадресация на HTTPS стандартная. Логи при проблемах смотрят в двух местах: журнал ошибок PHP в системном каталоге /var/log, жалобы самой платформы в разделе администрирования, сначала читают их, потом правят конфиги.
Параметры PHP правятся в php.ini:
memory_limit = 512M
upload_max_filesize = 512M
post_max_size = 512M
max_execution_time = 300
opcache.enable = 1
opcache.memory_consumption = 128
Значения синхронны между собой: post_max_size не меньше upload_max_filesize, иначе крупные загрузки начнут обрезаться на середине без внятных ошибок. После правок службы перезапускаются командой systemctl restart nginx php8.3-fpm, и проверка простая: страница входа открывается, тестовый файл загружается, в журнале администратора нет красных строк.
Первый запуск, шифрование и защита от перебора паролей
Сразу после установки заходят в магазин приложений и достают три вещи. Приложение Two-Factor TOTP включает второй фактор для входа, для администратора это обязательно: учётная запись админа открывает все файлы всех пользователей. Приложение Password Policy заставляет пользователей выбирать пароли без "123456" в составе. Встроенная защита от перебора паролей работает из коробки: после серии неудачных попыток входа адрес замедляется, и автоматический подбор становится бессмысленным занятием. Пользователь видит список активных сессий и закрывает чужие одной кнопкой, а квоты на дисковое пространство выделяются каждому аккаунту, и рост архива перестаёт зависеть от чьей-то дисциплины.
Серверное шифрование включается приложением Encryption. У него есть границы, о которых стоит знать заранее: ключи хранятся на том же сервере, поэтому шифрование защищает от снятия диска и случайной утечки резервных копий, но не от компрометации самого сервера. Решение о шифровании принимается до загрузки важных файлов: обратный путь с расшифровкой всего массива долог и капризен. Перед включением включается режим обслуживания, а config.php и ключи уходят в копию отдельно от данных: восстановить зашифрованные файлы без ключей невозможно, это правило стоит выучить до, а не после.
Фоновые задачи переводятся на системный cron, это надёжнее встроенных режимов:
sudo -u www-data php occ background:cron
crontab -u www-data -e
*/5 * * * * php -f /var/www/nextcloud/cron.php
Обновления платформа умеет делать сама: встроенный апдейтер скачивает новую версию, включает обслуживание и обновляет схему базы. Перед каждым обновлением снимается копия: обновления редко, но ломают несовместимые приложения, и откат без бэкапа превращается в приключение с потерянным выходным.
Клиенты, синхронизация и резервные копии данных облака
Клиенты ставятся на все привычные платформы: настольные держат выбранную папку зеркалом облака, мобильные выгружают фото и видео автоматически, плюс календарь и контакты подключаются через CalDAV и CardDAV. Синхронизацию настраивают выборочно: рабочие документы всегда под рукой, а архив пятилетней давности лежит в облаке, не занимая ноутбук. История версий хранит несколько копий каждого изменённого файла, а корзина задерживает удалённое на случай передумать.
Версии выручают и в неожиданных местах: документ случайно сохранён поверх, и вместо паники открывается предыдущая версия из истории. Корзина работает так же: удалённое ещё неделю доступно, если передумали.
Ссылками делятся с паролем и сроком жизни: для внешних партнёров это удобнее почтовых вложений, файл лежит в вашем облаке, а не блуждает по чужим серверам. Правила ссылок настраиваются администратором глобально, от обязательного пароля до срока жизни. Превью и распознавание текста в файлах включаются опциональными приложениями, интерфейс остаётся быстрым и без них.
Резервная копия собирается из трёх частей: каталог данных, config.php с ключами и дамп базы. Каталог синхронизируется на второй сервер любым средством копирования по SSH, дамп базы снимается перед каждой выгрузкой, а config хранится отдельно и бережно: с ключами шифрования, но без него данные не читаются. Расписание простое: ежедневная выгрузка изменений и раз в месяц контрольное восстановление на тестовом сервере. Копия, которая никогда не восстанавливалась, не считается страховкой.
Своё облако оправдывает себя, когда данные важны настолько, что за их контроль готовы отвечать лично. Nextcloud даёт готовую платформу, а дисциплина обновлений и копий превращает её в надёжный инструмент, а не в красивую игрушку.