Установка Nextcloud на свой сервер: что я выбрал и почему
Первый вопрос, с которым сталкивается каждый, кто хочет свой Nextcloud: как именно его ставить. Вариантов много, и у каждого свои компромиссы. Расскажу, что пробовал я.
Варианты установки
Классическая установка на хост. Веб-сервер (Apache или nginx с PHP-FPM), PHP со всеми модулями, база данных и архив Nextcloud в /var/www. Плюс в полном контроле и понимании, что где лежит. Минус в том, что обновление PHP в дистрибутиве может внезапно сломать совместимость, и следить за версиями приходится самому.
Docker Compose. Официальный образ nextcloud плюс отдельные контейнеры для базы и Redis. Мне этот вариант нравится больше всего: версии зафиксированы в одном файле, а переезд на другой сервер сводится к копированию каталога с томами и docker compose up -d.
Nextcloud All-in-One (AIO). Мастер-контейнер, который сам разворачивает всё остальное, включая бэкапы. Это хороший выбор для тех, кто не хочет разбираться. Но он плохо уживается с нестандартными схемами, например если на сервере уже есть свой обратный прокси.
Snap. Самый быстрый старт, но настраивать его тоньше всего.
Что выбрал я
Я остановился на Docker Compose с тремя сервисами: nextcloud:apache, postgres и redis. Теги образов всегда пишу конкретные, а не latest, иначе однажды docker compose pull принесёт мажорное обновление посреди недели.
Перед контейнерами стоит nginx на хосте: он терминирует TLS и проксирует запросы в контейнер, который слушает только 127.0.0.1. Это важно: Docker по умолчанию публикует порты на все интерфейсы и при этом обходит правила ufw. Если написать 8080:80 вместо 127.0.0.1:8080:80, сервис окажется открыт всему интернету, даже если в ufw порт закрыт.
Минимальные ресурсы
Для одного-двух пользователей хватает 2 ГБ оперативной памяти и двух ядер. База на SSD заметно ускоряет работу веб-интерфейса. На 1 ГБ Nextcloud тоже запустится, но генерация превью и индексирование будут заметно тормозить, а без swap процессы рискуют попасть под OOM killer.
После установки
Первым делом я выполняю через occ несколько настроек: trusted_domains, overwriteprotocol https, overwrite.cli.url, default_phone_region и trusted_proxies. Затем перевожу фоновые задачи на системный cron и подключаю Redis для кэша и блокировок файлов. После этого на странице «Обзор» в настройках администратора обычно остаётся одно-два некритичных предупреждения, а не два десятка.