1. Что такое Nextcloud и зачем его хостить
Nextcloud — open-source платформа для личного облака. По функциям это аналог Google Drive + Google Calendar + Google Meet + Google Contacts, но данные хранятся на вашем сервере, а не на серверах американской корпорации.
У Nextcloud две параллельные нумерации, и их легко перепутать: технические версии сервера (30, 31, 32…) и маркетинговые имена релизов вида «Hub 26 Spring». В docker-compose и в командах используется только номер сервера — дальше в статье везде он.
Какую версию ставить
Мажорные версии выходят раз в четыре месяца, каждая поддерживается год, и одновременно живых всегда три. На сентябрь 2026 это 32, 33 и 34; ставить нужно самую свежую — 34 (она же Hub 26 Spring, вышла 9 июня 2026, поддержка до июня 2027). Версия 35 пока в статусе release candidate.
Это важнее, чем кажется: перепрыгивать через мажорные версии при обновлении нельзя, только по одной. Поставив устаревшую, вы обрекаете себя на цепочку обновлений.
Откуда появился Nextcloud? В 2016 году Фрэнк Карличек — один из основателей ownCloud — создал форк проекта под названием Nextcloud. Сегодня Nextcloud значительно обогнал ownCloud по размеру сообщества и количеству функций. ownCloud существует и развивается (у них есть собственная переработанная версия — ownCloud Infinite Scale), но для самостоятельного хостинга на VPS Nextcloud — более популярный и активно поддерживаемый выбор.
Данные у вас
Файлы физически хранятся на вашем VPS. Ни Google, ни Яндекс, ни кто-либо другой не имеет к ним доступа.
500+ приложений
Файлы, календарь, контакты, заметки, канбан, видеозвонки, почта, галерея фото — всё в одном интерфейсе.
Открытый код
AGPL-лицензия, 36 000+ звёзд на GitHub. Разрабатывается с 2016 года, регулярные аудиты безопасности.
Кому стоит разворачивать Nextcloud
Если у вас уже есть VPS — Nextcloud запускается рядом с другими сервисами. Особенно актуально для тех, кто уходит от Google/Яндекс или хочет хранить рабочие документы без передачи третьим сторонам.
2. Nextcloud vs Google Drive vs Яндекс Диск
| Параметр | Nextcloud | Google Drive | Яндекс Диск |
|---|---|---|---|
| Хранение данных | Ваш сервер (РФ) | Серверы Google (США) | Серверы Яндекс (РФ) |
| Конфиденциальность | ✅ Полный контроль | ❌ Анализ данных | ⚠️ Данные в РФ |
| Цена за хранилище | Только стоимость VPS | $1.99 за 100 ГБ, $9.99 за 2 ТБ | 250 ₽ за 1 ТБ |
| Онлайн-офис | ✅ OnlyOffice/Collabora | ✅ Google Docs | ✅ Встроенный |
| Мобильный клиент | ✅ iOS + Android | ✅ | ✅ |
| Десктоп-клиент | ✅ Win/Mac/Linux | ✅ Win/Mac | ✅ Win/Mac |
| CalDAV/CardDAV | ✅ Стандарт | ❌ Google-only | ❌ |
| Видеозвонки | ✅ Talk (E2E) | ✅ Meet | ✅ Телемост |
| Объём | Ограничен диском VPS | 15 ГБ бесплатно | 10 ГБ бесплатно |
| Lock-in | ❌ Нет | ✅ Экосистема Google | ✅ Экосистема Яндекс |
Цены подписок — на сентябрь 2026, при помесячной оплате; у Яндекса при годовой выходит около 191 ₽ в месяц.
Честно про деньги
Если считать только рубли за гигабайт, подписка почти всегда дешевле: терабайт у Яндекса стоит дешевле любого VPS со 100 ГБ диска. Nextcloud берут не ради экономии, а ради контроля над данными, отсутствия лимита на число пользователей и того, что на том же сервере крутятся другие ваши сервисы. Экономия появляется на команде: облачные тарифы считают по людям, ваш VPS — нет.
Когда Google Drive выигрывает
Если вам нужна безотказная работа без администрирования сервера, глубокая интеграция с Gmail и встроенный Gemini AI — Google Drive проще. Nextcloud требует обслуживания: обновления, бэкапы, мониторинг. Это инвестиция времени.
3. Требования к серверу
Личное использование
- — 1–2 vCPU
- — 2 ГБ RAM
- — 20+ ГБ NVMe
- — 1–2 пользователя
Семья / небольшая команда
- — 2 vCPU
- — 4 ГБ RAM
- — 50+ ГБ NVMe
- — До 10 пользователей
С Nextcloud Office
- — 4 vCPU
- — 6+ ГБ RAM
- — 50+ ГБ NVMe
- — + OnlyOffice контейнер
Обязательны: публичный IP, домен (или поддомен), HTTPS — мобильные приложения Nextcloud не работают по чистому HTTP. Диск лучше NVMe: Nextcloud активно работает с миниатюрами и индексами.
4. Установка Docker
Если Docker ещё не установлен — официальный скрипт установит всё за одну команду.
curl -fsSL https://get.docker.com | sh
# Добавить в автозапуск
systemctl enable --now docker
# Проверить версию
docker --version
docker compose version5. Docker Compose — PostgreSQL + Redis + Nextcloud
Развернём стек из трёх контейнеров: PostgreSQL (база данных), Redis (кэш и блокировки файлов) и Nextcloud (Apache + PHP встроен в образ). Nextcloud будет слушать на 127.0.0.1:8080 — наружу его проксирует Nginx на следующем шаге.
Шаг 1: рабочая директория
mkdir -p ~/nextcloud && cd ~/nextcloudШаг 2: файл переменных .env
Замените значения на свои. Пароли генерируйте через openssl rand -base64 24:
DOMAIN=cloud.example.com
# PostgreSQL
DB_PASSWORD=замените_на_надёжный_пароль
# Redis
REDIS_PASSWORD=замените_на_надёжный_пароль
# Администратор Nextcloud
NEXTCLOUD_ADMIN_USER=admin
NEXTCLOUD_ADMIN_PASSWORD=замените_на_надёжный_парольШаг 3: docker-compose.yml
services:
db:
image: postgres:16-alpine
container_name: nc-db
restart: unless-stopped
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: ${DB_PASSWORD}
networks:
- nc_net
redis:
image: redis:7-alpine
container_name: nc-redis
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
networks:
- nc_net
app:
image: nextcloud:34-apache
container_name: nc-app
restart: unless-stopped
depends_on:
- db
- redis
ports:
- "127.0.0.1:8080:80"
volumes:
- nextcloud_data:/var/www/html
environment:
POSTGRES_HOST: db
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: ${DB_PASSWORD}
REDIS_HOST: nc-redis
REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER}
NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD}
NEXTCLOUD_TRUSTED_DOMAINS: ${DOMAIN}
OVERWRITECLIURL: "https://${DOMAIN}"
OVERWRITEPROTOCOL: https
PHP_MEMORY_LIMIT: 512M
PHP_UPLOAD_LIMIT: 10G
networks:
- nc_net
cron:
image: nextcloud:34-apache
container_name: nc-cron
restart: unless-stopped
depends_on:
- db
- redis
volumes:
- nextcloud_data:/var/www/html
entrypoint: /cron.sh
networks:
- nc_net
volumes:
db_data:
nextcloud_data:
networks:
nc_net:Зачем контейнер cron?
Nextcloud использует фоновые задачи (очистка корзины, генерация превью, уведомления). Отдельный контейнер cron запускает их каждые 5 минут — это официально рекомендуемый способ для Docker.
Шаг 4: запуск
docker compose up -d
# Следить за инициализацией (первый запуск — 2–3 минуты)
docker compose logs -f app
# Проверить, что все контейнеры запущены
docker compose psПри первом запуске Nextcloud создаст базу данных, применит все миграции и заведёт учётную запись администратора из переменных окружения. Дождитесь сообщения Apache/2.4.x configured -- resuming normal operations.
6. Nginx + SSL
HTTPS обязателен — мобильные клиенты Nextcloud откажутся работать без валидного сертификата.
Установка Nginx и Certbot
apt install nginx certbot python3-certbot-nginx -yКонфиг Nginx
server {
listen 80;
server_name cloud.example.com;
# Увеличить лимит размера загружаемых файлов
client_max_body_size 10G;
client_body_timeout 600s;
# Nextcloud требует этот заголовок, иначе покажет предупреждение в панели.
# Certbot перенесёт блок на HTTPS, где заголовок и начнёт работать.
add_header Strict-Transport-Security "max-age=15552000" always;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket (Nextcloud Talk)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
# Получить сертификат
certbot --nginx -d cloud.example.comCertbot добавит HTTPS-блок и настроит автообновление сертификата. Откройте https://cloud.example.com — должен открыться интерфейс Nextcloud.
7. Первый вход и проверка кэша
Войдите на https://cloud.example.com под учётными данными из .env. После входа перейдите в Настройки → Администрирование → Обзор и проверьте список предупреждений.
Проверить статус Redis и OPcache
# Статус кэша
docker exec -u www-data nc-app php occ config:system:get memcache.local
docker exec -u www-data nc-app php occ config:system:get memcache.locking
# Версия и состояние сервера
docker exec -u www-data nc-app php occ statusЕсли Redis подхватился из переменных окружения — в config/config.php уже должна быть запись memcache.locking. Если нет — добавьте вручную:
docker exec -u www-data nc-app php occ config:system:set memcache.local --value='\OC\Memcache\APCu'
docker exec -u www-data nc-app php occ config:system:set memcache.distributed --value='\OC\Memcache\Redis'
docker exec -u www-data nc-app php occ config:system:set memcache.locking --value='\OC\Memcache\Redis'Исправить типичные предупреждения
Полный список того, на что жалуется сервер, выдаёт одна команда — occ setupchecks. На свежей установке по этой инструкции остаются два пункта, оба лечатся сразу:
# Досоздать индексы и привести filecache к bigint
docker exec -u www-data nc-app php occ db:add-missing-indices
docker exec -u www-data nc-app php occ db:convert-filecache-bigint
# Окно для тяжёлых фоновых задач: 1 = с 1:00 до 7:00 UTC
docker exec -u www-data nc-app php occ config:system:set maintenance_window_start --type=integer --value=1
# Проверить, что предупреждений не осталось
docker exec -u www-data nc-app php occ setupchecksБез окна обслуживания Nextcloud выполняет ресурсоёмкие ночные задачи в любое время, в том числе в часы работы — на VPS с 2 ГБ это заметно. Третье предупреждение, про заголовок Strict-Transport-Security, закрывается на стороне Nginx — строка есть в конфиге из раздела 6.
Рекомендуемые приложения при первом входе
Nextcloud предложит установить набор базовых приложений. Минимальный набор: Calendar, Contacts, Notes. Talk (видеозвонки) установите отдельно, если нужен.
8. Мобильный клиент и десктоп
Мобильное приложение (iOS / Android)
- Установите приложение Nextcloud из App Store или Google Play
- На стартовом экране введите адрес сервера:
https://cloud.example.com - Войдите под учётными данными администратора (или нового пользователя)
- Включите автозагрузку фото: Настройки → Автозагрузка → выбрать папки
Для синхронизации контактов и календарей на Android нужно приложение DAVx5 (есть в F-Droid бесплатно и Google Play за небольшую плату). На iOS Calendar и Contacts поддерживают CalDAV/CardDAV из коробки — добавьте аккаунт в Настройки → Почта → Аккаунты → Другой.
Десктоп-клиент (Windows / macOS / Linux)
- Скачайте Nextcloud Desktop с nextcloud.com/install/
- При первом входе укажите адрес вашего сервера
- Выберите папки для синхронизации (можно синхронизировать частично)
Десктоп-клиент работает в системном трее и синхронизирует изменения в реальном времени. Требуется Windows 10 (сборка 1809) 64 бит или новее, macOS 13 или новее; для Linux есть AppImage. Под macOS 11 и 12 остался отдельный legacy-сборщик.
WebDAV-доступ без клиента
Подключите Nextcloud как сетевой диск без установки клиента.
https://cloud.example.com/remote.php/dav/files/ВАШ_ЛОГИН/Windows: «Подключить сетевой диск» → Веб-папка. macOS: Finder → Перейти → Подключиться к серверу.
9. Полезные приложения
Приложения устанавливаются через интерфейс: Приложения → поиск по названию → Установить. Ниже — наиболее полезные из 500+ доступных.
| Приложение | Что делает | Аналог |
|---|---|---|
| Calendar | Общий CalDAV-календарь, повторяющиеся события | Google Calendar |
| Contacts | CardDAV-адресная книга, группы | Google Contacts |
| Talk | Зашифрованный чат, голос и видеозвонки | Google Meet |
| Memories | Галерея фото с таймлайном и картой | Google Photos |
| Deck | Kanban-доски для управления задачами | Trello |
| Notes | Заметки в Markdown с синхронизацией | Google Keep |
| Веб-почтовый клиент (несколько IMAP) | Gmail (веб) | |
| Collectives | Коллективная wiki-база знаний | Notion |
| Forms | Опросы и анкеты без сбора данных | Google Forms |
| Nextcloud Office | Редактирование .docx/.xlsx в браузере | Google Docs |
Nextcloud Office: OnlyOffice или Collabora?
OnlyOffice лучше совместим с форматами Microsoft Office (.docx, .xlsx, .pptx) — рекомендуется, если коллеги работают в MS Office. Collabora более открытый и лучше работает с ODF-форматами. Оба разворачиваются как отдельный Docker-контейнер и требуют ещё ~1 ГБ RAM.
10. Обновление и резервные копии
Обновление Nextcloud
Через мажорные версии перепрыгивать нельзя — только по одной. Если вы сейчас на 32, а нужна 34, это два прохода: 32 → 33, затем 33 → 34. Тег образа в docker-compose.yml меняется на одну версию за раз.
Саму миграцию делать руками не нужно: при старте контейнер сравнивает версию образа с версией в томе и, если они разошлись, запускает обновление сам.
# 1. Включить режим обслуживания — чтобы бэкап был консистентным
docker exec -u www-data nc-app php occ maintenance:mode --on
# 2. Сделать бэкап БД (до обновления!)
docker exec nc-db pg_dump -U nextcloud nextcloud > ~/nextcloud-db-backup-$(date +%Y%m%d).sql
# 3. В docker-compose.yml поднять тег на одну версию:
# image: nextcloud:33-apache → image: nextcloud:34-apache
# Затем:
docker compose pull
docker compose up -d
# 4. Дождаться в логах строки "Initializing finished"
docker compose logs -f app
# 5. Досоздать индексы БД
docker exec -u www-data nc-app php occ db:add-missing-indices
# 6. Обязательно: выключить режим обслуживания
docker exec -u www-data nc-app php occ maintenance:mode --offЕсли вы ставили Nextcloud по прошлой версии этой статьи
До сентября 2026 здесь была указана версия 30. Её поддержка закончилась в октябре 2025 — обновлений безопасности она не получает. Проверьте свою версию командой docker exec -u www-data nc-app php occ status и, если там 30 или 31, пройдите цепочку до 34 по одной версии за раз, делая бэкап перед каждым шагом.
Не запускайте occ upgrade руками
Контейнер уже обновился на шаге 3, и occ upgrade в этот момент ответит «Nextcloud is in maintenance mode. Maybe an upgrade is already in process» — выглядит как поломка, хотя всё в порядке. И не пропускайте шаг 6: после автоматического обновления контейнер намеренно оставляет режим обслуживания включённым, и без этой команды сайт так и будет отвечать заглушкой.
Резервные копии
Для полного бэкапа нужны два компонента: дамп базы данных и файлы пользователей.
# Создать папку для бэкапов (если ещё нет)
mkdir -p ~/backups
# Включить maintenance mode (для консистентности)
docker exec -u www-data nc-app php occ maintenance:mode --on
# Бэкап БД
docker exec nc-db pg_dump -U nextcloud nextcloud | gzip > ~/backups/backup-db-$(date +%Y%m%d).sql.gz
# Бэкап файлов (Docker volume)
docker run --rm \
-v nextcloud_nextcloud_data:/data:ro \
-v ~/backups:/backup \
alpine tar -czf /backup/nextcloud-files-$(date +%Y%m%d).tar.gz -C /data .
# Выключить maintenance mode
docker exec -u www-data nc-app php occ maintenance:mode --offПравило 3-2-1
Бэкап только на том же VPS — не считается. Настройте копирование на внешнее хранилище через rclone (Backblaze B2, любой S3-совместимый) или периодически скачивайте архивы на локальный компьютер. Для автоматизации добавьте команды в crontab.