«Яндекс Диск» синхронизирует ночь напролёт, цена подписки растёт, а данные лежат на серверах, к которым нет ключей. И я решил всё это исправить. Теперь у меня 700 МБ/с, свои данные и ноль рублей в месяц за подписку. Расскажу как.
Всем привет, я Дмитрий Гайворонский, Business Development Manager в командеDeckhouse Data Orchestrationкомпании «Флант». У меня нет инженерного бэкграунда — я чистый вайб-кодер, или даже вайб-DevOps-инженер. Но я очень хорошо понимаю, чего хочу и как это должно выглядеть. Всё остальное — это Cursor, Perplexity и промпт-инжиниринг. Если вы такой же, то эта статья для вас.
А можно что-то взамен «Яндекс Диска»?
Я использовал старенький Mac mini 2014 с внешним HDD-диском как полную реплику «Яндекс Диска» — на всякий случай. Но у Mac mini закончилась поддержка macOS, и он начал заметно тормозить. И что с ним делать? Выкинуть рука не поднималась.
К тому же скорость синхронизации с «Яндексом» была ну очень медленной: полная заливка 2 ТБ растягивалась на ночь. В лучшем случае 10–20 МБ/с.
Я начал изучать тему через Perplexity. Выяснил: на Mac mini 2014 стоит Intel Core i5, и на него отлично встаёт Ubuntu 24.04 LTS — поддержка ещё на 5 лет, архитектура x86 в наличии. Установил.
А что поставить на Ubuntu? Гуглил, читал, и ответ был очевидным —Nextcloud. Прямоиз пакетного менеджера Ubuntu через Snap:
Nextcloud также можно установить одной командой:
Я копировал команды из Perplexity, выполнял их в терминале, не особо понимая, что они делают, — только общий смысл. И знаете что? Внутри домашней сети 1 Гбит я сразу получил скорость синхронизации90 МБ/с— это ограничение самой сети. И это в 4–9 раз быстрее «Яндекс Диска». Из такого старья я выжимал в несколько раз больше, чем мог дать «могучий провайдер».
Апгрейды: гонка за скоростью
Я задумался, что меня реально ограничивал только старенький диск и тариф интернета, а не скорость публичного сервиса. Пока ещё продлевал подписку «Яндекса», но уже начинал думать о сети 10 Гбит, NVMe и тарифе 1 Гбит. Это свербило и заставляло дальше изучать тему — надо купить новое железо.
Апгрейд 1 — почти бесплатный: переход на 2,5 Гбит
Что купил:коммутатор TP-Link TL-SG105 (5 портов по 2,5 Гбит) + USB-адаптер 2,5 Гбит для Mac mini.
Если синхронизируешь файл больше одного раза, то Nextcloud кеширует его и отдает из оперативной памяти. Скорость сразу вырастает до ~220–230 МБ/с, а это уже ближе к ограничению сети.
В итоге скорость выросла в 1,5 раза и упёрлась в~150–160 МБ/с— теперь ограничением стал HDD-диск. Ничего себе! Надо развивать тему и переходить на SSD SATA 3 (его можно вставить в Mac mini 2014 как второй диск).
После замены диска скорость сразу дошла до230 МБ/с. Явно видно, что пока только железо определяет производительность, а не софт.
Апгрейд 2 — уровень 10 Гбит: новые роутер, коммутатор и узел
Раз дело в железе, то надо брать железо получше. Долго искал б/у коммутатор на 10 Гбит: новый — дорогой и enterprise, а мне нужен маленький и тихий. Нашёл подходящий на «Авито».
Там же нашёл б/у Mac mini 2018 i7 / 64 ГБ RAM с портом 10GbE — потому что на него ещё можно поставить Ubuntu, много RAM и есть порт на 10 Гбит.
Итоговая конфигурация:Netcraze Ultra (порт 10 Гбит + WiFi 6e) + TP-Link TL-SX105 (5 портов по 10 Гбит) + Mac mini 2018 i7 / 64 ГБ / 10GbE.
Порт 10 Гбит на роутере в квартире — скорее для красоты: жилого тарифа на 10 Гбит всё равно будет, пока все провода в доме не заменят на cat6e. WiFi 6E с агрегацией до 2,4 Гбит вполне достаточно. Но раз порт есть — грех не использовать.
Всё завелось по той же схеме через Ubuntu/Snap. Тестировал на встроенном NVMe и на внешних SSD SATA 3. Результаты:
- встроенный NVMe →500–700 МБ/с(чтение и запись больших файлов, например кино);
- внешний SSD SATA 3 →300–450 МБ/с;
- «Яндекс Диск» →10–30 МБ/с.
Всё упирается только в реальную скорость дисков — ровно как и должно быть.
Сравнение конфигураций — итоговая таблица
Комментарий
Mac mini Late 2014, i5, 8 GB
HDD LaCie 2 TB
1 Гбит, роутер Keenetic
Ubuntu/Snap + Nextcloud
90–100 МБ/с
Ограничение сети 1 Гбит/с
Mac mini Late 2014, i5, 8 GB
HDD LaCie 2 TB
2,5 Гбит (USB- адаптер), роутер Keenetic Giga + коммутатор TP-Link TL-SG105 (5×2,5 Гбит)
Ubuntu/Snap + Nextcloud
150–160 МБ/с (через адаптер USB → 2,5 Гбит)
Ограничение HDD ~150 МБ/с
Mac mini Late 2014, i5, 8 GB
SSD SATA III Samsung 4 TB (второй слот)
2,5 Гбит (USB-C адаптер), роутер Keenetic Giga + коммутатор TP-Link TL-SG105 (5×2,5 Гбит)
Ubuntu/Snap + Nextcloud
230 МБ/с (через адаптер USB → 2,5 Гбит)
Ограничение сети 2,5 Гбит/с
Mac mini 2018, i7, 64 GB, 10 GbE
NVMe 1 TB + SSD SATA III в корпусе Thunderbolt 3
10 Гбит, роутер Netcraze Ultra + коммутатор TP-Link TL-SX105 (5×10 Гбит)
Ubuntu/Snap + Nextcloud
700 МБ/с (NVMe), 450 МБ/с (SATA III через TB3/10 Гбит), 150–160 МБ/с (Wi-Fi 6E, 2401 Мбит/с по роутеру)
Для SATA III нормально, для NVMe маловато (должно быть ~1000 МБ/с). Требуется тюнинг
Результаты по цифрам:90 → 150 → 230 → 700 МБ/с. Каждое обновление железа снимало лимит предыдущего звена: сначала сеть, потом диск, снова сеть и, наконец, переход на 10 Гбит + NVMe. Wi-Fi 6E (150–160 МБ/с) — отдельная история, но для беспроводного доступа вполне достойно. Забегая вперёд скажу, что уже на этом шаге достижима скорость 1,2 Гб/с, но об этом будет в другой статье.
Выход в интернет и паранойя про безопасность
Заказал публичный IP-адрес у провайдера, купил публичный домен, настроил A-записи (всё черезnic.ru) и научился пробрасывать порты в роутере — всё достаточно легко заработало извне.
Но также это всё открыто торчит в интернет! А у меня нет никакого SOC-центра. Здесь я сам по себе. Стрёмно — я же ничего в этом не понимаю. Сразу определился:моя стратегия защиты в интернете — скрытность.
Mesh VPN: Tailscale, NetBird и неожиданная проблема
Нашёл технологиюMesh VPN,когда узлы сети связываются между собой через VPN-туннели напрямую, минуя открытые порты. Два основных игрока:Tailscale(США,tailscale.com) иNetBird(Германия,netbird.io), которые предоставляют облачный сервис — бесплатно до 5 пользователей и 100 узлов.
Попробовал — обалдеть, работает. Каким-то непостижимым образом узлы связывались между собой даже при закрытых портах на роутере.
Остановился на NetBird: приложение есть в российском App Store, нативные iOS- клиенты для NetBird и Nextcloud работают штатно. Nextcloud на iOS — вполне полноценный Dropbox.
Но вот досада
VPN-туннели режут скорость соединения, потому что шифрование работает в одном потоке на каждом узле — технология однопоточная. Внутри домашней сети скорость упала с 700 МБ/с до ~100 МБ/с. Я уже достиг 700 и обратно на 100? Надо разбираться.
NetBird Self-Hosted + Cursor
Задача: VPN снаружи, прямое соединение внутри
Начал копать: как исключить VPN-туннели внутри локальной сети, но включать их при доступе снаружи?
НашёлPosture Checkв NetBird — политика доступа, которая запрещает туннель при подключении с определённых IP-адресов. Выяснил, что эта фича работает только в тарифе Business, и она недешёвая. Вся моя архитектура к чёрту… :)
Но коллеги из NetBird любезно предоставляют Open Source-исходники для self-hosted-инсталляций. И в self-hosted входит весь функционал: Posture Check и кастомные DNS-зоны. Логика понятна: для реально серьёзных сетей никто не пойдёт в облако в Германию.
Ну что же… Cursor, иди сюда!
Cursor, иди сюда
Забегая вперёд — получилось. Но это было на грани моего понимания архитектуры. HTTPS, gRPC, relay, NAT traversal, signal-серверы… Проблемы с сертификатами на iOS. Несколько дней итераций с Cursor.
Расскажу, как это выглядело на практике, и дам несколько советов на основе своих факапов.
Особенность моих промптов в том, что я не могу оценить реальную работу Cursor. Я могу только ставить ему задачу на английском или русском и разговаривать. Я не могу проверить код или скрипты. То есть оценка даётся только по результатам или косвенно.
Факап № 1: игра в слова
Спросил у Cursor: «Можешь настроить кастомную DNS-зону в NetBird Self-Hosted?» Он ответил: «Да, вот конфиг». Я запустил — не сработало. Спросил: «Почему DNS не резолвится?» А он отвечает: «Я не знаю реального состояния твоего сервера и конфигурации roles.yaml». Выяснилось, что я не задал вопрос, а попросил решить задачу. Cursor исполнил её как мог на основе документации, но не видел реальную инфраструктуру. Когда я переспросил: «Возможно ли это сделать, учитывая мои ограничения?» — он честно разобрал, что именно мне нужно уточнить в конфиге. Помогло.
Получается, есть два почти одинаковых вопроса:
- Возможно ли это сделать?
- Можно ли это сделать?
На первый вопрос Cursor с большой вероятностью даст ответ, а на второй — сразу пойдёт делать. Потому что второй в английском языке воспринимается как просьба, а не вопрос. Как бы натурально Cursor с тобой ни говорил, нужно сохранять жёсткий, структурированный формат общения с ним. Чтобы получить ожидаемый ответ, нужно дать чёткий приказ о формате этого ответа. Ты — офицер, он — солдат.
Совет — с Cursor надо по-военному. Вполне уместно добавить в конце промпта «это вопрос». Не ленитесь переключать режим ask/agent.
Факап № 2: когда контекст становится врагом
Реальный диалог с Cursor:
— Сколько сейчас работает воркеров и какой у них лимит памяти?— 16 и 256.— А как ты это проверил?— В файлах репо указано — вот здесь.— Нет же! Я спрашивал, сколько сейчас реально в кластере, а не как у тебя написано.— Извините, тогда 8 и 1024.
Когда уже что-то получается, то объём репозиториев, которые создаёт Cursor, прилично увеличивается. В какой-то момент ты обсуждаешь с ним тему или задаёшь вопрос, он отвечает, но у тебя закрадываются сомнения — что-то не так.
Если бы я поверил Cursor на слово, то принял бы решение на основе недостоверной информации. Потерял бы кучу времени, пытаясь оптимизировать несуществующие узкие места, не понял бы, что реально помогло, а что только навредило, и в итоге всё равно пришлось бы переделывать с нуля.
В такие моменты понимаешь, что надо всё заново перепроверять, потому что уже не можешь оценить, где Cursor прочитал из истории, а где реально проверил. У моделей контекст единый. Они же не отличают реальность от истории. Чем длиннее переписка, тем сильнее они начинают смешивать старую информацию, которую ты уже забыл, а модели — нет.
Совет — надо периодически удалять все материалы из оперативного доступа Cursor. Закрывать чат с перепиской. Всё обнулять и начинать заново. Так Cursor лучше работает. Очень не хочется делать это и опять ставить задачу, но надо.
Факап № 3: сразу к делу (best practice)
Как-то я просто сказал Cursor: «Настрой NetBird Self-Hosted Management-сервер в Docker». Он выдал конфиг, я запустил, половина не работает — нет сертификатов, gRPC не слушает, Posture Check не активируется. Пришлось всё переделывать.
Ошибка новичков — сразу просить конечную цель. Так 100%-но не заработает.
Мой метод такой:
- Этап 1 (режим ask). Обсуждаю с Cursor тему в виде вопросов-ответов, чтобы самому разобраться. Параллельно делаю то же в Perplexity.
- Этап 2 (изучение). Прошу Cursor изучить документацию по какому-то продукту: «Найди документацию», «Найди и изучи материалы», «Прочитай файлы конфигурации», «Что ты понял?», «Какие у тебя вопросы?».
- Этап 3 (план). Прошу подготовить пошаговый план по развёртыванию: что нужно будет делать, как это должно работать, всё ли понятно. Периодически промежуточные итоги надо копировать и вставлять в Perplexity с задачей проверить на предмет ошибок и дать рекомендации с учётом определённой цели. Потом результат вставляю обратно в Cursor: «Изучи критику, обнови план». В общем, ИИ vs ИИ.
- Этап 4 (исполнение). Выполняю по шагам, строго по плану. Команда за командой: «Выполни шаг 1, покажи результат, жди подтверждения». Если результат не совпадает с ожиданиями, не иду дальше — довожу шаг до нужного состояния. Только потом делаю следующий.
Совет — семь раз отмерь, один раз отрежь. Если хорошо продумать и обсудить задачу с Cursor несколько раз, то можно потратить 2–3 часа на подготовку, но потом он выполнит всё за минуты и с первого раза.
Факап № 4: рабочий, а не мастер («насяльника»)
Попросил Cursor «сделать общую папку в Nextcloud для обмена файлами между пользователями». Он создал директорию и сразу выставил права 777. На вопрос «Зачем давать полный доступ всем подряд?» получил ответ: «Вы не указали политику доступа».
Cursor часто напоминает работягу-строителя, которому лишь бы сдать работу:
— Положи плитку в ванной.— Положил.— А почему она криво положена?— Вы же не говорили, как именно она должна быть приклеена.
Cursor выполняет работу так, как удобно ему, а не как требует задача. Он слегка «костыльный» по природе. Если ты недосказал — его оправдание звучит логичным: «Я не нарушал инструкцию, а просто интерпретировал её по-своему».
Совет — добавляйте в каждый промпт уточнение: «Делай всё стандартным способом по документации, если что-то не получается — остановись и спроси меня, без самодеятельности». Даже если повторишь это пять раз, Cursor всё равно когда-нибудь сделает так, как ему захочется, потом напишет: «Извините, я должен был ждать». Здесь нужно внимательно смотреть на экран и быть готовым нажать кнопку «Стоп»!
Факап № 5: абонент временно недоступен
Был у меня с Cursor и такой диалог:
— Проведи тестирование скорости чтения и записи встроенного и внешнего дисков.— Сделано, скорости такие-то.— А почему сервер по SSH теперь говорит «server down»?— Извините, сервер недоступен. У вас есть физический доступ?
Он записал тестовый блок куда-то в загрузочный раздел, Ubuntu перестала подниматься. Я так и не понял, как это произошло. Но смысл ясен: у Cursor был доступ по SSH с правами администратора (я сам это разрешил), и он им воспользовался — выполнил команду, которая убила систему. Кто виноват? Я.
Совет — полностью от этого не защитишься, но можно изолировать убытки. Я скопировал все важные данные на отдельные диски: один вообще отключён (синхронизирую раз в месяц), второй под строгим присмотром. Cursor работает только в той среде, которую я могу потерять целиком без катастрофы. Времени и нервов потребуется много, но данные в безопасности. Команды я изучаю сам, выполняю сам.
Факап № 6: «В здоровом теле — здоровый дух. На самом деле — одно из двух»
Два дня подряд работал с Cursor в режиме 12+ часов. Разбирался с NetBird-архитектурой, HTTPS, signal-серверами, DNS-зонами, iOS-сертификатами, relay-узлами. К концу второго дня в голове была полная каша, я забывал, какие файлы конфигурации уже читал, а какие нет.
Cursor продолжал говорить как свежий, а я начинал материться и делать ошибки в промптах. День третий: я без перерыва продолжаю, изнутри понимая, что соображаю плохо, но «нужно доделать». В результате допустил критическую ошибку — попросил Cursor «протестировать скорость дисков» и забыл указать папку. Он выполнил, записал тестовые блоки в загрузочный раздел, Ubuntu упала.
Отслеживайте своё состояние. Буквально.
ИИ не устаёт. Он может работать часами без паузы, погружать тебя в кучу материала, требовать быстрых решений. Я даже в университете не учил столько, сколько за время с Cursor. Это колоссальная нагрузка на мозг.
И вот ты уже начинаешь тупить, злиться, материться на Cursor — и сам делаешь ошибки. Промпты становятся неконкретными, размытыми. Всё идёт наперекосяк.
В том кейсе на четвёртый день я просто решил не включать компьютер. Гулял, отдыхал. День пятый: новая сессия, отдохнувший мозг, я формулирую задачи точнее, а Cursor сразу даёт правильное решение.
Совет — нужна дисциплина. Нужны паузы. Нужен режим. Потому что Cursor — это не помощник, это партнёр, который не знает усталости. И если ты не выставишь себе лимиты, он будет крутить тебя в своём темпе до сгорания.
Итоговая архитектура
Развернул свой NetBird Self-Hosted Management-сервер, настроил домен для Nextcloud, соединил все узлы в единую сеть, подключил приложения iOS, macOS. Всё удобно и работает. Как было раньше с Dropbox, только теперь всё «своё».
Единственный сервис, который торчит в интернет, — это NetBird Management для установки первоначального соединения. Дальше всё идёт через туннели.
С какой-то специфической проблемой iOS я так и не разобрался до конца. Что-то было с сертификатами — помогло отключение Posture Check и добавление DNS-записей.
- Доступвнутри сети: по домену трафик сразу попадает на локальный IP-адрес через кастомную DNS-зону — туннель не строится, скорость максимальная.
- Доступснаружи: NetBird-клиент строит зашифрованный туннель — закрытый порт, никому не виден.
- NetBirdвыключен— сервис вообще не существует для внешнего мира.
Зацените, какие слова я стал знать и использовать, хотя до старта этого мероприятия пользовался «Яндекс Диском» и горя не знал…
Итог: «Яндекс Диск», спасибо за всё
Nextcloud работает стабильно уже полгода:
- Теперь доступ есть и у жены — уже два пользователя.
- Фото и видео с телефонов автоматически пишутся домой.
- Скачанное кино смотрю из любой точки мира через Nextcloud-клиент.
- Рабочие файлы синхронизируются моментально.
Я поверил в себя и отключил подписку «Яндекс 360». Всё, свободное плавание. На всякий случай периодически просто копирую всё на отдельный диск. Cursor — мой личный DevOps на подхвате.
Главный инсайт — ваш опыт и ваши идеи плюс ИИ могут изменить вашу карьеру и доход. Я увидел в этом не решение задачи, а новый подход в ИТ вообще. Теперь я понимаю, как начинаются миллионные стартапы: три архитектора и рой агентов.
Продолжение следует
Я остановился на 700 МБ/с и Docker — но на этом история не закончилась. Дальше я переехал на Kubernetes, подключил Managed Postgres и ValKey от Deckhouse, перенёс туда же NetBird. А когда разобрался, как Nextcloud распараллеливает синхронизацию по потокам, дожал до 1,25 ГБ/с.
Но главное — не скорость, а то, что система теперь живёт сама. А впереди — мини-стойка на 4 узла, которую я уже собрал и обкатал. Скоро расскажу, как я масштабировал домашний кластер без головной боли от DevOps. Следите за обновлениями в блоге.
Читайте также в нашем блоге:
- Забываем про ручное создание ВМ: как автоматизировать Proxmox с Terraform
- 3D-печать на стероидах: как я научил Creality K1C считать затраты филамента
- GitLab CI кажется сложным, если не знать этих трюков: как убрать дублирование и ускорить пайплайны в 3 раза