Nextcloud для корпоративного файлообмена: полный деплой
Nextcloud идеально заменяет Google Drive, Dropbox или Яндекс.Диск, когда корпоративные данные должны храниться строго на своих серверах. За более чем 15 лет работы я внедрил его в сорока с лишним компаниях — от офисов на пятнадцать человек до производств с полутысячей сотрудников. Дальше показываю, как поставить Nextcloud с полным продакшен-стеком: PostgreSQL, Redis, ONLYOFFICE, S3 и интеграция с Active Directory.
Почему Nextcloud, а не другие
Альтернатив-то, конечно, хватает. Взгляните: есть ownCloud, Seafile, Pydio, Syncthing. Мы же, по опыту, всегда выбираем Nextcloud. Почему? Он просто выигрывает по всем параметрам: удобство, функциональность — здесь ему нет равных.
- Активное развитие. Ежеквартальные релизы, огромное сообщество, 200+ приложений в маркетплейсе.
- Офисный пакет. Встроенный Collabora или ONLYOFFICE — редактирование DOCX/XLSX/PPTX прямо в браузере.
- AD/LDAP/SAML. Вход по доменным учёткам, автораспределение прав по группам.
- Шифрование. Server-side и end-to-end.
- Мобильные клиенты. iOS, Android, Windows, macOS, Linux — все с авто-синхронизацией.
- Бесплатная лицензия. AGPL, платная только подписка на поддержку.
Архитектура под продакшн
Если у вас до 30 пользователей, одна виртуалка, где 'всё в одном', отлично справится. Но для серьёзного корпоративного решения? Тут я всегда советую разделить роли.
- Web/App — Ubuntu 22.04, nginx + PHP-FPM 8.2, Nextcloud 28+.
- БД — отдельная Postgres 15 с tuning под I/O.
- Кэш — Redis для локов, сессий, file cache.
- Офис — ONLYOFFICE Document Server на отдельной VM.
- Файлы — MinIO S3-кластер или NFS-шара.
- Reverse proxy — HAProxy/nginx с TLS от AD CS.
Установка на Ubuntu 22.04
apt update && apt install -y nginx php8.2-fpm php8.2-cli php8.2-gd \
php8.2-mysql php8.2-pgsql php8.2-curl php8.2-intl php8.2-mbstring \
php8.2-xml php8.2-zip php8.2-bcmath php8.2-gmp php8.2-imagick \
php8.2-redis php8.2-apcu postgresql-15 redis-server
# PHP tuning
sed -i 's/memory_limit = .*/memory_limit = 1024M/' /etc/php/8.2/fpm/php.ini
sed -i 's/upload_max_filesize = .*/upload_max_filesize = 10G/' /etc/php/8.2/fpm/php.ini
sed -i 's/post_max_size = .*/post_max_size = 10G/' /etc/php/8.2/fpm/php.ini
sed -i 's/max_execution_time = .*/max_execution_time = 3600/' /etc/php/8.2/fpm/php.ini
# Скачиваем Nextcloud
cd /var/www
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
tar -xjf latest.tar.bz2
chown -R www-data:www-data nextcloud
PostgreSQL для Nextcloud
С PostgreSQL 15 есть нюанс: в новых базах у роли PUBLIC больше нет права CREATE в схеме public. Если пользователь Nextcloud не владелец базы, создавать в ней таблицы он не сможет. Руководство администратора Nextcloud поэтому создаёт базу с владельцем-пользователем из шаблона template0 и отдельно выдаёт GRANT CREATE ON SCHEMA public. В PHP должны быть включены расширения pdo_pgsql и pgsql.
CREATE DATABASE nextcloud OWNER nextcloud TEMPLATE template0 ENCODING 'UTF8';
\c nextcloud
GRANT CREATE ON SCHEMA public TO nextcloud;
sudo -u postgres psql <<EOF
CREATE USER nextcloud WITH PASSWORD 'stoykiyparol2026';
CREATE DATABASE nextcloud WITH OWNER nextcloud ENCODING 'UTF8';
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
EOF
# PostgreSQL tuning: /etc/postgresql/15/main/postgresql.conf
shared_buffers=8GB
effective_cache_size=24GB
maintenance_work_mem=512MB
work_mem=32MB
max_connections=200
wal_compression=on
checkpoint_completion_target=0.9
Nginx + HTTPS
# /etc/nginx/sites-available/nextcloud
server {
listen 443 ssl http2;
server_name cloud.corp.example.ru;
ssl_certificate /etc/ssl/certs/cloud.crt;
ssl_certificate_key /etc/ssl/private/cloud.key;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
root /var/www/nextcloud/;
index index.php index.html;
location = /robots.txt { allow all; log_not_found off; access_log off; }
location = /.well-known/carddav { return 301 /remote.php/dav; }
location = /.well-known/caldav { return 301 /remote.php/dav; }
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { deny all; }
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; }
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
location / { try_files $uri $uri/ /index.php$request_uri; }
}
Интеграция с Active Directory
После этого ставим приложение LDAP / Active Directory integration. Настраивается оно либо через привычный интерфейс, либо через occ-команды.
sudo -u www-data php /var/www/nextcloud/occ app:enable user_ldap
sudo -u www-data php /var/www/nextcloud/occ ldap:create-empty-config
# Настраиваем через веб-интерфейс: Host DC01.corp.example.ru,
# BaseDN CN=Users,DC=corp,DC=example,DC=ru,
# BindDN nextcloud-svc@corp.example.ru
Фильтр пользователей: (&(objectClass=user)(memberOf=CN=NC-Users,OU=Groups,DC=corp,DC=example,DC=ru)). Фильтр групп: (objectClass=group). После настройки сотрудники входят доменным логином, а админы домена автоматически попадают в группу admin в Nextcloud.
S3 external storage на MinIO
Видите огромные объёмы файлов? Я без колебаний выбираю S3 в качестве основного хранилища. Это очень просто: всего одна строчка в config.php, и готово!
// /var/www/nextcloud/config/config.php
'objectstore' => [
'class' => '\\OC\\Files\\ObjectStore\\S3',
'arguments' => [
'bucket' => 'nextcloud-prod',
'autocreate' => false,
'key' => 'AKIANEXTCLOUDXXX',
'secret' => 'VeryStrongS3Secret',
'hostname' => 's3.corp.example.ru',
'port' => 9000,
'use_ssl' => true,
'use_path_style' => true,
'region' => 'us-east-1',
],
],
ONLYOFFICE Document Server
# Отдельная VM
apt install -y docker.io
docker run -d --restart=always --name=onlyoffice -p 80:80 -p 443:443 \
-e JWT_ENABLED=true \
-e JWT_SECRET='nextcloud_shared_secret' \
-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
onlyoffice/documentserver
Что дальше? В Nextcloud просто ставим приложение ONLYOFFICE. Указали URL сервера, добавили JWT-ключ — и всё! Документы DOCX, таблицы XLSX, презентации PPTX теперь открываются прямо в браузере, без всяких загрузок.
Реальный кейс: производство на 45 сотрудников
Возьмём пример. В декабре 2025 года мы помогли мебельному производству в Подмосковье. У них 45 сотрудников, 1 ТБ общих файлов — серьёзный объём, правда? Раньше как было? Обычный Windows-сервер с SMB: постоянные тормоза, шифровальщики то и дело атаковали, про мобильный доступ и говорить нечего. Кошмар! Что мы сделали? Развернули Nextcloud. Сервер: Dell PowerEdge R750xa, мощный Xeon Platinum 8280, 128 ГБ оперативки, два NVMe по 1.92 ТБ под систему и базу, плюс 40G Mellanox ConnectX-5. Всё это стоит в дата-центре МТС. Nextcloud, PostgreSQL и Redis — на одной виртуалке. ONLYOFFICE — на отдельной, а для файлов — MinIO на трёх узлах. Красота! Конечно, интегрировали с Active Directory. Настроили групповые шары по отделам, сделали полную авто-синхронизацию через клиент. Результат? Через три месяца: 43 из 45 сотрудников активно работают с Nextcloud. Средний объём файлов на человека — 22 ГБ. Скорость отдачи в офис по 40G — впечатляющие 9.2 ГБ/с. Весь проект обошёлся в 340 000 рублей. А экономия на Dropbox Business? Около 240 000 рублей в год! Почувствуйте разницу.
Фоновые задачи и кэш в памяти
Первое, что я меняю после установки, — способ запуска фоновых задач. По умолчанию Nextcloud выполняет их через AJAX при открытии страниц пользователями, а Webcron за один вызов выполняет только одну задачу: при вызове раз в 5 минут это 288 задач в сутки, что документация считает приемлемым только для очень маленьких инсталляций. Для корпоративного сервера — системный cron от имени пользователя веб-сервера:
crontab -u www-data -e
*/5 * * * * php -f /var/www/nextcloud/cron.php
# проверить, что задание добавлено
crontab -u www-data -l
Переключать режим в админке не обязательно: после первого запуска cron.php из командной строки Nextcloud сам выставляет режим Cron. Вместо crontab можно использовать пару systemd-юнитов nextcloudcron.service и nextcloudcron.timer с интервалом 5 минут.
Второе — кэш. Без него Nextcloud работает, но показывает предупреждение в админке. Для одного сервера документация рекомендует APCu для локального кэша и Redis для распределённого кэша и блокировок файлов:
# config/config.php
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
],
Если включить только memcache.distributed без memcache.local, предупреждение о кэше в админке останется — я задаю оба параметра.
Бэкап и восстановление
По руководству Nextcloud в бэкап обязательно входят пять вещей: каталог config, каталог data, каталог темы, база данных и каталог сторонних приложений, если они установлены. Файлы и база должны быть согласованы между собой, поэтому на время снятия копии я перевожу сервер в режим обслуживания: он блокирует сессии вошедших пользователей и не даёт войти новым.
sudo -E -u www-data php /var/www/nextcloud/occ maintenance:mode --on
pg_dump nextcloud -h localhost -U nextcloud -f nextcloud-sqlbkp_$(date +%Y%m%d).bak
# rsync/restic каталогов config, data, themes
sudo -E -u www-data php /var/www/nextcloud/occ maintenance:mode --off
Когда данные лежат во внешнем S3-хранилище, как в схеме выше, каталог data на сервере небольшой, но бакет нужно бэкапить отдельно: копия сервера без него бесполезна. Восстановление проверяю на отдельной ВМ хотя бы раз в квартал, вместе с плановым аудитом прав.
Обслуживание
- Ежедневно —
occ preview:pre-generate. - Еженедельно —
occ files:cleanup,occ files:scan --all. - Что делаем ежемесячно? Обязательно бэкапим базу данных и config.php. И, конечно, не забываем обновлять Nextcloud командой occ upgrade.
- А раз в квартал? Проводим тщательный аудит: проверяем права доступа и внешние хранилища. Так спокойнее.
FAQ — корпоративный Nextcloud
Ответы на вопросы, которые задают перед внедрением Nextcloud в компании.
- Чем Nextcloud лучше Google Drive?
- Nextcloud живёт на вашем сервере — данные остаются в вашей юрисдикции. Нет абонентской платы за пользователя, нет лимитов на объём.
- Сколько пользователей тянет одна инсталляция?
- На Xeon Silver с 64 ГБ RAM — до 200 активных пользователей. На мощном железе — до 2000.
- Нужен ли ONLYOFFICE?
- Очень рекомендую. Даёт плавное совместное редактирование DOCX/XLSX/PPTX с высокой совместимостью с Microsoft Office.
- Как хранить 10+ ТБ данных?
- External storage на S3/MinIO — идеальный вариант. Масштабируется до петабайт без проблем.
- Как интегрировать с Active Directory?
- Через приложение LDAP/AD Integration. Сотрудники входят доменными паролями, автоматически получают права по группам.
Источники
- Database configuration — Nextcloud Administration Manual — создание базы PostgreSQL и права на схему public.
- Background jobs — Nextcloud Administration Manual — ограничения Webcron и настройка cron.
- Memory caching — Nextcloud Administration Manual — APCu и Redis для одного сервера.
- Backup — Nextcloud Administration Manual — состав бэкапа и режим обслуживания.
