Руководства
Как заменить Google Drive собственным сервером Nextcloud
Облачное хранилище — это самое интимное, что большинство людей доверяет компании. Не документы — фотографии, сканы документов, удостоверяющих личность, налоговые декларации, резервная копия телефона, в которой есть вообще всё. Всё это лежит в аккаунте, который автоматическая система может заблокировать без права на апелляцию, на серверах, сканирующих всё, что вы загружаете, привязанном к личности, которую вы подтвердили много лет назад и больше не можете отвязать. Люди узнают истинную форму этой сделки в худший возможный момент — обычно тогда, когда заблокированный аккаунт забирает с собой двадцать лет семейных фотографий. Nextcloud — ответ с открытым исходным кодом: те же клиенты синхронизации, то же приложение для телефона, те же ссылки на общий доступ — но на машине, которую арендуете вы, с файлами, которые больше никто не индексирует. Установка занимает один вечер. А действительно ли результат лучше того, что вы оставили, решает диск под капотом и один вопрос про шифрование, на который почти любое руководство отвечает неправильно.
Что на самом деле заменяет Nextcloud
Nextcloud — это не столько одно приложение, сколько небольшой набор сервисов, который в сумме покрывает почти всё, что делает обычный потребительский облачный аккаунт. Именно эта широта и оправдывает self-hosting: заменить один сервис самостоятельно развёрнутым аналогом редко стоит хлопот по обслуживанию, а вот заменить сразу пять — одним сервером — обычно стоит.
- Синхронизация файлов и общий доступ к ним — это ядро системы. Десктопные клиенты для Windows, macOS и Linux, мобильные приложения для обеих платформ и веб-интерфейс — то же самое поведение «перетащил папку — и она появилась везде», которое вы уже ожидаете.
- Резервное копирование фото с телефона: автоматическая загрузка с камеры, альбомы и группировка по лицам. Для большинства людей это самая большая часть данных и главная причина, по которой диск нужно рассчитывать правильно.
- Календарь и контакты по открытым стандартам CalDAV и CardDAV, которые понимает «из коробки» любой телефон, — сторонние приложения для синхронизации не нужны.
- Совместная работа с документами через офисный пакет, который можно подключить дополнительно: таблицы и текстовые файлы редактируются прямо в браузере, никуда больше не отправляясь.
- Публичные ссылки на общий доступ с паролями, сроком действия и папками только для загрузки — именно эта функция обычно отучает от привычки слать большие вложения по email.
- Версионирование на стороне сервера и корзина — перезаписанный файл или неудачная синхронизация восстанавливаются без обращения к резервной копии.
Эту границу стоит обозначить прямо, потому что маркетинг вокруг self-hosting делает это редко. Nextcloud даёт вам контроль и приватность. Он не даёт вам надёжности крупного облачного провайдера — такие компании реплицируют ваши данные по разным континентам, а один арендованный сервер этого не сделает, какими бы хорошими ни были его диски. Он также не делает файлы бесплатными: вы платите за хранение в любом случае — просто хостингу, который никогда не спрашивал ваше имя, вместо того, который спрашивал. Self-hosting — это обмен чужой надёжности на ваш собственный контроль, и это хорошая сделка лишь тогда, когда вы по-настоящему серьёзно относитесь к своей половине — к надёжности.
Вы становитесь провайдером хранения
Это и есть честная цена, и её куда лучше осознать до переноса данных, чем после. За вашим аптаймом не следит никто, копии ваших фотографий ни у кого нет, и на другом конце линии поддержки никого нет в тот момент, когда клиент синхронизации сообщает о конфликте в файле, который был нужен вам сегодня утром.
- Резервные копии — на вас, и это не опционально. RAID-массив переживёт вышедший из строя диск; удалённую папку, неудачное обновление или шифровальщика, прошедшегося по синхронизированному каталогу, он не переживёт. Версионирование и корзина — это удобные функции, а не резервная копия.
- Аптайм — на вас. Клиент синхронизации, который не может достучаться до сервера, тихо ставит изменения в очередь и досинхронизируется позже — это прощает многое. А вот ссылка, которую вы отправили клиенту, мертва всё то время, пока сервер лежит.
- Обновления — на вас, а Nextcloud выпускает их бодрым темпом. Это PHP-приложение на публичном IP, в котором лежит вся ваша жизнь, так что патчить его — не то, что можно отложить до спокойного месяца.
- За местом на диске следите вы. Телефон, который автоматически загружает каждое фото, заполнит даже щедро рассчитанный диск — по графику, который вы не планировали, а переполненный диск не просто останавливает работу, а портит данные.
- Восстановление — на вас. Восстанавливать нужно базу данных и дерево файлов вместе, на одну и ту же точку во времени. Восстановление одного без другого даёт рабочий интерфейс, который показывает файлы, которых на самом деле нет.
Ничего из этого не тяжело, как только всё настроено. Это несколько минут в месяц плюс один внимательный день в самом начале — та же дисциплина, что нужна любому самостоятельно развёрнутому сервису. Разница лишь в том, что здесь хранится то, что вам меньше всего хотелось бы потерять. Если вы уже прошли через самостоятельный хостинг сайта, ничего из этого не станет для вас неожиданностью.
Размер машины: бюджет — под данные, а не под приложение
Сам Nextcloud — скромное PHP-приложение. Почти все ошибки в расчёте размера здесь происходят от того, что бюджет считают под приложение и забывают, что весь смысл затеи — хранить данные, которые растут. Определитесь с формой сразу, потому что перенос дерева файлов вместе с базой данных между машинами позже — один из самых неприятных дней в self-hosting.
- Объём хранилища — это решение, которое выбирает за вас тариф, и нужно закладывать примерно вдвое больше, чем сегодня занимают ваши файлы. Версионирование хранит старые копии изменённых файлов, корзина держит удалённое в течение периода хранения, а сгенерированные миниатюры и превью добавляют к фотобиблиотеке ощутимый процент сверху.
- Память решает не то, будет ли всё работать, а то, каково это будет на ощупь. 2 GB хватает для инстанса с одним пользователем; 4 GB комфортно для семьи с включённой автозагрузкой с телефонов; 8 GB и больше нужны, когда в дело вступают офисный пакет и несколько одновременных пользователей.
- Процессор простаивает почти всё время, а затем ненадолго начинает иметь значение по-настоящему — первый проход генерации превью по импортированной фотобиблиотеке и любая конвертация документов на лету — вот те всплески, под которые стоит держать запас.
- Быстрое хранилище нужно базе данных, а вот файлам — не особо. Операции с метаданными постоянно бьют по базе, а дерево файлов — это в основном последовательные чтения и записи, поэтому небольшой быстрый NVMe-диск под систему рядом с объёмным хранилищем — более удачная форма, чем один гигантский медленный том.
- Трафик здесь безлимитный, но первичная загрузка уже существующей библиотеки — по-настоящему крупная разовая операция. Планируйте её на ночь, а не ждите, что она вас удивит.
На практике это сводится к двум вариантам — в зависимости от того, сколько вы на самом деле храните. До нескольких сотен гигабайт — документы, скромная фотобиблиотека, один-два человека — VPS-8 за $13.99/mo с 4 vCPU EPYC, 8 GB DDR5 ECC и 120 GB NVMe Gen4 быстрый и более чем достаточный. А как только в дело вступает телефон с камерой, весь вопрос сводится к объёму, и платить за NVMe в этом случае бессмысленно: сервер хранения от $7.99/mo даёт 1 TB на RAID-6, а STO-4 за $22.99/mo — 4 TB, и это уже совсем другая категория запаса, чем у любого VPS, за долю цены на терабайт. Если вы объединяете хранилище семьи или небольшой команды и этого мало, выделенный сервер от $64/mo с 2 × 1 TB NVMe даёт сразу и скорость, и объём, не превращая арифметику в абсурд.
Шаг за шагом: от чистого сервера до работающей синхронизации
- 01Разверните сервер и сразу защитите егоDebian или Ubuntu, SSH только по ключам, файрвол с запретом по умолчанию — ещё до того, как на нём появится хоть один файл. Сделайте это, пока машина ещё пустая и скучная.
- 02Направьте домен на сервер и выпустите сертификатКлиенты Nextcloud откажутся синхронизироваться по обычному HTTP, и это правильно. Hostname должен резолвиться на машину ещё до выпуска сертификата — это самая частая причина неудачной установки с большим отрывом.
- 03Выберите способ установки и не меняйте егоОбраз контейнера — самый быстрый путь, который проще всего поддерживать в актуальном состоянии; установка вручную на веб-сервер и базу данных даёт больше контроля над тонкой настройкой. Выберите один вариант — смешивание двух подходов и есть причина, по которой ломаются обновления.
- 04Используйте настоящую базу данных, а не SQLiteSQLite работает разве что для одного пользователя, который почти ничего не делает, и падает, как только два клиента синхронизируются одновременно. Выбирайте MariaDB или PostgreSQL прямо при установке — конвертировать базу позже — неприятная миграция.
- 05Добавьте кэш в памяти и настройте фоновые задачиRedis для блокировок и кэширования, и системный cron для фоновых задач вместо запуска по умолчанию из браузера. Именно пропуск этого шага — причина, по которой одни самостоятельно развёрнутые инстансы кажутся медленными, а другие — мгновенными.
- 06Поднимите лимиты загрузки до переноса файловЗначения по умолчанию рассчитаны на небольшие файлы и отклонят видео или образ диска. Сначала исправьте лимиты в конфигурации веб-сервера и PHP — иначе первая же крупная загрузка оборвётся на девяноста процентах.
- 07Перенесите файлы за один осознанный проходЗагрузите существующую библиотеку через десктопный клиент либо скопируйте файлы на место и запустите сканирование. Сделайте это один раз, за одну ночь, прежде чем кто-то начнёт полагаться на инстанс.
- 08Подключите клиенты и в тот же день настройте резервное копированиеСинхронизация с компьютера, автозагрузка с телефона, календарь и контакты. Затем настройте резервное копирование и реально проверьте его — рабочий инстанс без пути восстановления — это просто обратный отсчёт.
Шифрование: что на самом деле защищает вас, а что лишь звучит как защита
Этот раздел важнее всего, если вы ушли с потребительского облака именно потому, что компания могла читать ваши файлы, — и это тот самый раздел, который большинство руководств излагают неправильно. В Nextcloud есть функция под названием «шифрование на стороне сервера». Включить её кажется решением. По большей части это не так, и понимание того, почему это не так, спасает вас от ложного чувства безопасности, которое хуже, чем полное отсутствие шифрования.
- Шифрование на стороне сервера хранит ключи прямо на сервере. Приложению нужно уметь расшифровывать ваши файлы, чтобы их вам отдавать, — а значит, у любого, кто получил доступ к работающей машине, есть всё, что есть у самой машины. Это защищает от кражи диска или недоверенного внешнего хранилища — но не от скомпрометированного сервера или его оператора.
- Сквозное шифрование — это настоящая защита, и оно намеренно ограничено. Оно шифрует на стороне клиента отдельные папки, а значит, сервер действительно не может их прочитать, — но точно так же означает, что для этого содержимого недоступны ни веб-интерфейс, ни превью, ни поиск на стороне сервера, ни публичные ссылки на общий доступ.
- Полное шифрование диска на сервере защищает выключенную машину. У работающего сервера том смонтирован, а ключ лежит в памяти, так что оно защищает от утилизации и физического изъятия «холодной» машины — и больше ни от чего.
- Шифрование до загрузки — это то, что на самом деле нужно большинству людей. Инструмент, который шифрует папку локально и синхронизирует уже зашифрованные данные, даёт настоящую конфиденциальность поверх обычного Nextcloud — ценой превью и доступа через браузер для этой папки.
- Шифрование при передаче — это не шифрование при хранении. HTTPS защищает файлы в пути и никак не защищает их в состоянии покоя, и путаница между этими двумя вещами — самое частое заблуждение во всей этой теме.
Для большинства честный ответ — смешанный. Пользуйтесь инстансом в обычном режиме: это ваш сервер, а удобство превью, поиска и ссылок на общий доступ — единственная причина, по которой вы вообще не ограничились зашифрованным архивом. А затем возьмите ту действительно чувствительную меньшую часть файлов — документы, ключи и всё, что будет иметь значение в плохой год, — и зашифруйте их на стороне клиента ещё до того, как они попадут на диск. Так вы получите и удобное облако, и настоящий сейф, вместо одного посредственного компромисса, притворяющегося и тем, и другим.
Утечки личности, которые оставляет установка по умолчанию
Nextcloud убирает компанию, которая читала ваши файлы. Но сам по себе он не убирает всё, что привязывает сервер к конкретному человеку, — и в большинстве случаев источник этого — шаги, которые на первый взгляд вообще не связаны с хранением данных.
- Домен. Регистратор хранит вашу личность, даже если публичный WHOIS скрыт, и ему нужен рабочий контактный адрес, чтобы продлевать имя. Hostname — самый частый способ вычислить владельца самостоятельно развёрнутого сервиса.
- Прозрачность сертификатов. В момент выпуска сертификата точный hostname публикуется в публичных логах, которые может искать кто угодно. Поддомен, который вы считали приватным, — cloud.something, files.something, — объявляется на весь мир с меткой времени.
- Хостер. Если сервер арендован по карте на ваше настоящее имя, машина числится за вашим настоящим именем — независимо от того, что на ней запущено. Это решается при регистрации, задолго до первого файла.
- Мобильные push-уведомления. Официальные приложения по умолчанию отправляют уведомления через push-сервисы платформ, а значит, метаданные о вашем инстансе доходят до Google или Apple, даже если сами файлы — нет.
- Метаданные фотографий. Изображения несут в себе EXIF-данные, включая GPS-координаты и идентификаторы устройства. Перенос фотографий на собственный сервер ничего из этого не удаляет — он просто перемещает их туда, где контролируете вы, а это лучше, но не то же самое, что удаление.
- Внешние интеграции. Федеративный обмен, подключения к внешним хранилищам, email-уведомления и проверки обновлений через магазин приложений — всё это обращается вовне с этой же машины, и каждый такой сервис — третья сторона, которая видит ваш сервер.
- Логи сервера. Ваши собственные логи фиксируют IP-адреса и user agent для каждой синхронизации. На вашей собственной машине это нормально — пока машину не изымут, и тогда ваши же логи станут уликами о ваших собственных перемещениях.
Закрыть эти утечки — обычная работа, а не что-то экзотическое. Выберите регистратора, который принимает крипту и запрашивает минимум данных. Разместите машину на хостинге, который никогда не спрашивал, кто вы, и оплачивайте его с криптобаланса — Bitcoin псевдонимен, а не анонимен, так что именно пополнение через Monero закрывает on-chain след, если для вас это важно. Отключите push-уведомления, если метаданные вас беспокоят, и смиритесь с задержкой синхронизации, которая после этого появится. А если инстанс предназначен только для вас и пары доверенных людей, вообще не выставляйте его в открытый интернет: спрячьте его за туннелем WireGuard и пусть он отвечает только внутри туннеля — это заодно убирает целую категорию атак на публичную страницу входа.
Как сервер остаётся в строю после переноса
Файловый сервер, который проработал год, — это файловый сервер, на который год никто не смотрел. Короткая рутина обслуживания — это разница между этим и потерей того самого, ради защиты чего вы его строили.
- Резервируйте базу данных и дерево файлов вместе, с одной и той же согласованной точки во времени. Резервная копия файлов без соответствующей базы данных восстанавливается в инстанс, который выглядит пустым и полон файлов-сирот.
- Храните копию не на самом сервере. Снэпшот, который живёт на той же машине, переживёт отказ диска — и больше ничего: ни компрометацию, ни случайное удаление, которое синхронизируется повсюду, ни потерю аккаунта.
- Сделайте восстановление один раз намеренно, пока всё в порядке. Непроверенная резервная копия фотобиблиотеки — это лишь гипотеза о ваших воспоминаниях.
- Обновляйтесь в темпе проекта и никогда не пропускайте major-версию. Nextcloud обновляется на один major-релиз за раз, и перепрыгнуть через два — это миграция, которую потом придётся разгребать вручную.
- Следите за свободным местом с реальным запасом. Обновлениям нужно пространство для работы, и диск, заполнившийся во время миграции базы данных, — вот как рутинное обновление превращается в восстановление из бэкапа.
- Проверяйте, что фоновые задачи действительно выполняются. Именно там живут генерация превью, очистка корзины и удаление старых версий, а тихо сломавшийся cron проявится через месяцы загадочно заполненным диском.
Заодно добавьте внешнюю проверку — монитор, который снаружи забирает страницу входа и сообщает, когда она перестаёт отвечать, узнает о падении инстанса раньше, чем об этом сообщит зависший клиент синхронизации. И отнеситесь к самой машине так же, как описывают первые десять минут на новом VPS, — ставки на машине, которая хранит все ваши документы, не ниже, чем на той, что хранит деньги.
Ошибки, которые стоят людям их файлов
- Установить на SQLite, потому что так было по умолчанию, а потом наблюдать, как всё блокируется в первый же раз, когда два устройства синхронизируются одновременно.
- Считать корзину и версии файлов резервной копией — и обнаружить, что это не так, в тот день, когда клиент синхронизации разносит удаление повсюду.
- Перенести всю фотобиблиотеку до того, как настроено резервное копирование, и прожить месяц в окне, где единственная копия — на арендованной машине.
- Включить шифрование на стороне сервера, решить, что теперь файлы приватны даже от хостера, и действовать исходя из этого убеждения.
- Рассчитать диск под то, сколько файлы занимают сегодня, без запаса на версии, корзину и превью.
- Пропустить настройку кэша в памяти и фоновых задач, а затем винить железо в том, что инстанс тормозит.
- Оставить лимиты загрузки по умолчанию и обнаружить посреди переноса, что всё крупное молча не проходит.
- Перепрыгнуть через две major-версии за одно обновление, потому что инстанс простоял нетронутым год.
- Арендовать сервер и зарегистрировать домен на собственное имя, сделав до этого всё остальное правильно.
Nextcloud — один из немногих самостоятельно развёрнутых проектов, который по-настоящему не уступает коммерческому продукту, который заменяет, в том, что важно каждый день: синхронизация просто работает, приложение для телефона просто работает, и через неделю вы перестаёте замечать разницу. Установка — это один вечер, перенос данных — одна ночь. В итоге у вас остаётся каждый файл, которым вы владеете, на машине, отвечающей только перед вами, оплаченной с криптобаланса, на хостинге, который никогда не спрашивал вашего имени. Рассчитывайте диск под то, чем данные станут, а не под то, чем они являются сейчас, шифруйте на стороне клиента ту небольшую часть, которой это действительно нужно, и настройте резервное копирование до того, как оно понадобится, а не после.