Утечка через Google Drive: разворачиваем Nextcloud для аудиторской компании

Задача клиента: аудиторская компания теряет конфиденциальные данные

В январе 2026 года к нам в АйТи Фреш обратилась аудиторская компания АудитПрофи из Ростова-на-Дону. Штат — 120 сотрудников: аудиторы, бухгалтеры, юристы и административный персонал. Компания работает с крупными клиентами, и её ежедневная деятельность связана с обработкой конфиденциальной финансовой документации.

Причиной обращения стал инцидент: один из сотрудников случайно расшарил папку с материалами налоговой проверки через Google Drive по публичной ссылке. Документы были проиндексированы поисковыми системами, и клиент АудитПрофи узнал об утечке раньше, чем сама компания. Скандал удалось урегулировать, но репутационный ущерб был ощутимым.

«Мы построили бизнес на доверии. Одна утечка через облако — и клиенты начали спрашивать, куда мы храним их данные. Нам нужно собственное облако, которое мы полностью контролируем» — генеральный директор АудитПрофи.

Руководство приняло решение: отказаться от Google Drive и развернуть собственное файловое хранилище с полным контролем доступа, интеграцией с Active Directory и возможностью совместного редактирования документов.

Аудит текущей инфраструктуры

Наши инженеры провели аудит и обнаружили следующую картину:

  • Файлы — хранились в Google Drive (корпоративный аккаунт Google Workspace), суммарный объём — около 1,8 ТБ
  • Active Directory — Windows Server 2019, 120 учётных записей, организационные единицы по отделам
  • Сервер — свободный Dell PowerEdge R640 с 64 ГБ RAM, 2× Xeon Silver 4214, RAID-10 на 4× 2 ТБ SSD
  • Сеть — гигабитная LAN, статический внешний IP с пропускной способностью 100 Мбит/с
  • VPN — WireGuard для удалённых сотрудников (около 30 человек регулярно работают из дома)

Критические проблемы Google Drive, которые назвал клиент:

  • Невозможность контролировать, кто и когда расшаривает файлы наружу
  • Данные физически хранятся за рубежом — проблема с 152-ФЗ о персональных данных
  • Отсутствие гранулярного управления правами (только «просмотр», «комментирование», «редактирование»)
  • Нет интеграции с корпоративным Active Directory

Выбор решения и проектирование архитектуры

Мы рассматривали три варианта:

РешениеЛицензияСовместное редактированиеLDAP/ADOn-premise
NextcloudAGPL (бесплатно)Collabora / OnlyOfficeДаДа
SeafileAGPL (бесплатно)OnlyOffice (платно)ДаДа
ownCloud Infinite ScaleApache 2.0Через интеграциюДаДа

Выбор пал на Nextcloud: зрелая экосистема, богатый магазин приложений, нативная интеграция с Collabora Online для совместного редактирования и крупнейшее сообщество среди self-hosted решений.

Целевая архитектура:

# Архитектура развёртывания Nextcloud
┌─────────────────────────────────────────────┐
│            Docker Host (Dell R640)           │
│                                              │
│  ┌──────────┐  ┌────────────┐  ┌──────────┐ │
│  │ Nextcloud │  │ PostgreSQL │  │  Redis   │ │
│  │  (PHP +   │  │    16      │  │  7.2     │ │
│  │  Apache)  │  │            │  │          │ │
│  └──────────┘  └────────────┘  └──────────┘ │
│  ┌──────────────┐  ┌────────────────────┐   │
│  │   Collabora   │  │ Nginx reverse proxy│   │
│  │   Online      │  │  (SSL termination) │   │
│  └──────────────┘  └────────────────────┘   │
│                                              │
│  Volumes: /srv/nextcloud/data (RAID-10)      │
│           /srv/nextcloud/db                  │
└─────────────────────────────────────────────┘
         │                    │
    Active Directory     WireGuard VPN
   (Windows Server)     (удалённые сотрудники)

Развёртывание Nextcloud в Docker

Мы выбрали контейнерную установку через Docker Compose — она обеспечивает изоляцию компонентов, простое обновление и воспроизводимость среды. На сервере уже была установлена Ubuntu 22.04 LTS.

Подготовка сервера и установка Docker

Первым делом мы подготовили хост-систему:

# Обновление системы
sudo apt update && sudo apt upgrade -y

# Установка Docker и Docker Compose
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Создаём директории для данных
sudo mkdir -p /srv/nextcloud/{data,db,redis,config}
sudo chown -R 33:33 /srv/nextcloud/data  # uid 33 = www-data в контейнере
sudo chown -R 999:999 /srv/nextcloud/db   # uid 999 = postgres

Отдельно настроили параметры ядра для оптимальной работы PostgreSQL и Redis:

# /etc/sysctl.d/99-nextcloud.conf
vm.overcommit_memory = 1
net.core.somaxconn = 65535
vm.swappiness = 10

sudo sysctl --system

Docker Compose: Nextcloud, PostgreSQL и Redis

Основной файл развёртывания — docker-compose.yml:

# /srv/nextcloud/docker-compose.yml
version: '3.8'

services:
  db:
    image: postgres:16-alpine
    restart: always
    volumes:
      - /srv/nextcloud/db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U nextcloud"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - nextcloud_net

  redis:
    image: redis:7.2-alpine
    restart: always
    command: redis-server --requirepass ${REDIS_PASSWORD} --maxmemory 512mb --maxmemory-policy allkeys-lru
    volumes:
      - /srv/nextcloud/redis:/data
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - nextcloud_net

  app:
    image: nextcloud:29-apache
    restart: always
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    volumes:
      - /srv/nextcloud/data:/var/www/html
    environment:
      POSTGRES_HOST: db
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      REDIS_HOST: redis
      REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
      NEXTCLOUD_ADMIN_USER: ${ADMIN_USER}
      NEXTCLOUD_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      NEXTCLOUD_TRUSTED_DOMAINS: cloud.auditprofi.ru
      OVERWRITEPROTOCOL: https
      OVERWRITEHOST: cloud.auditprofi.ru
      PHP_MEMORY_LIMIT: 1G
      PHP_UPLOAD_LIMIT: 10G
    networks:
      - nextcloud_net

  collabora:
    image: collabora/code:latest
    restart: always
    environment:
      aliasgroup1: https://cloud.auditprofi.ru:443
      username: admin
      password: ${COLLABORA_PASSWORD}
      extra_params: --o:ssl.enable=false --o:ssl.termination=true
    cap_add:
      - MKNOD
    networks:
      - nextcloud_net

  nginx:
    image: nginx:1.27-alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - /etc/letsencrypt:/etc/letsencrypt:ro
    depends_on:
      - app
      - collabora
    networks:
      - nextcloud_net

networks:
  nextcloud_net:
    driver: bridge

Все пароли хранились в файле .env, который не попадал в систему контроля версий. Redis использовался как кэш для файловых блокировок и сессий — это критически важно при 120 одновременных пользователях.

Конфигурация Nginx как reverse proxy с SSL

SSL-сертификаты мы получили через Let's Encrypt с автопродлением:

# Получение сертификата (до запуска nginx)
sudo apt install -y certbot
sudo certbot certonly --standalone -d cloud.auditprofi.ru --agree-tos -m admin@auditprofi.ru

Конфигурация Nginx для проксирования Nextcloud и Collabora:

# /srv/nextcloud/nginx.conf
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    upstream nextcloud {
        server app:80;
    }

    upstream collabora {
        server collabora:9980;
    }

    # Редирект HTTP → HTTPS
    server {
        listen 80;
        server_name cloud.auditprofi.ru;
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name cloud.auditprofi.ru;

        ssl_certificate     /etc/letsencrypt/live/cloud.auditprofi.ru/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/cloud.auditprofi.ru/privkey.pem;
        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        client_max_body_size 10G;
        fastcgi_buffers 64 4K;

        # Заголовки безопасности
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Robots-Tag none;

        # Проксирование Nextcloud
        location / {
            proxy_pass http://nextcloud;
            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 https;
        }

        # Проксирование Collabora Online
        location ^~ /browser {
            proxy_pass http://collabora;
            proxy_set_header Host $host;
        }

        location ^~ /hosting/discovery {
            proxy_pass http://collabora;
            proxy_set_header Host $host;
        }

        location ^~ /hosting/capabilities {
            proxy_pass http://collabora;
            proxy_set_header Host $host;
        }

        location ~ ^/cool/(.*)/ws$ {
            proxy_pass http://collabora;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $host;
            proxy_read_timeout 36000s;
        }

        location ~ ^/(c|l)ool {
            proxy_pass http://collabora;
            proxy_set_header Host $host;
        }
    }
}

Ключевой момент — client_max_body_size 10G. Аудиторы регулярно загружают сканы документов пачками по 2–3 ГБ, и стандартный лимит в 1 МБ привёл бы к ошибкам.

Интеграция с Active Directory через LDAP

Одним из ключевых требований клиента была интеграция с корпоративным Active Directory. Сотрудники должны входить в Nextcloud с теми же учётными данными, что и в Windows, а при увольнении — автоматически терять доступ к файлам.

Настройка LDAP-коннектора в Nextcloud

Мы активировали приложение LDAP user and group backend и настроили подключение через OCC-команды для автоматизации:

# Включаем LDAP-приложение
docker exec -u www-data nextcloud-app-1 php occ app:enable user_ldap

# Создаём новое LDAP-подключение
docker exec -u www-data nextcloud-app-1 php occ ldap:create-empty-config

# Настраиваем параметры подключения
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapHost ldap://10.0.1.5
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapPort 389
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapBase "DC=auditprofi,DC=local"
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapAgentName "CN=nextcloud-svc,OU=ServiceAccounts,DC=auditprofi,DC=local"
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapAgentPassword "S3cur3_LDAP_P@ss!"

# Фильтр: только активные пользователи из определённых OU
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapUserFilter "(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapUserFilterObjectclass person
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapLoginFilter "(&(objectClass=person)(sAMAccountName=%uid))"

# Маппинг атрибутов
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapUserDisplayName displayName
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapEmailAttribute mail

# Группы
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapGroupFilter "(objectClass=group)"
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapGroupMemberAssocAttr member

# Включаем конфигурацию
docker exec -u www-data nextcloud-app-1 php occ ldap:set-config s01 ldapConfigurationActive 1

# Проверяем подключение
docker exec -u www-data nextcloud-app-1 php occ ldap:test-config s01

Фильтр userAccountControl:1.2.840.113556.1.4.803:=2 — это побитовое сравнение, которое исключает заблокированные учётные записи (бит ACCOUNTDISABLE). При увольнении сотрудника администратор блокирует его в AD, и доступ к Nextcloud прекращается автоматически.

Групповые политики и квоты хранилища

На базе групп Active Directory мы настроили разные квоты и права:

Группа ADКвотаОбщие папкиCollabora
Аудиторы50 ГБАудиторские проверки, КлиентыДа
Бухгалтерия30 ГББухгалтерия, ОтчётностьДа
Юристы20 ГБЮридические документыДа
Администрация10 ГБОбщие документыДа
IT-отдел100 ГБВсе папки (администраторы)Да

Квоты устанавливались через OCC:

# Установка квот по группам
docker exec -u www-data nextcloud-app-1 php occ user:setting --default-value 50GB -- "Аудиторы" quota "50 GB"

# Создание общих папок через приложение Group Folders
docker exec -u www-data nextcloud-app-1 php occ app:enable groupfolders

# Папка "Аудиторские проверки" для группы Аудиторов
# ID папки возвращается командой
docker exec -u www-data nextcloud-app-1 php occ groupfolders:create "Аудиторские проверки"
# Назначаем группу с правами на чтение, запись и расшаривание
docker exec -u www-data nextcloud-app-1 php occ groupfolders:group 1 "Аудиторы" write share
docker exec -u www-data nextcloud-app-1 php occ groupfolders:quota 1 none

Приложение Group Folders — одно из самых востребованных в корпоративной среде. В отличие от обычных расшаренных папок, оно не занимает квоту конкретного пользователя и позволяет централизованно управлять доступом.

Безопасность: 2FA, brute force protection, шифрование

Для аудиторской компании, работающей с финансовыми данными, безопасность — не опция, а обязательное требование. Мы реализовали многоуровневую защиту.

Двухфакторная аутентификация (TOTP)

Мы включили обязательную двухфакторную аутентификацию через TOTP (Time-based One-Time Password):

# Установка приложения TOTP
docker exec -u www-data nextcloud-app-1 php occ app:enable twofactor_totp

# Принудительное включение 2FA для всех пользователей
docker exec -u www-data nextcloud-app-1 php occ twofactorauth:enforce --on

# Установка приложения для генерации резервных кодов
docker exec -u www-data nextcloud-app-1 php occ app:enable twofactor_backupcodes

Каждый сотрудник при первом входе получал инструкцию по настройке TOTP через приложения Google Authenticator или Microsoft Authenticator. IT-отдел выдавал резервные коды лично — через защищённый канал, а не по email.

Дополнительно мы настроили ограничение сессий:

# config.php: автоматический выход через 12 часов неактивности
'session_lifetime' => 43200,
'session_keepalive' => false,
'remember_login_cookie_lifetime' => 0,  # Отключаем "Запомнить меня"

Защита от brute force и аудит действий

Nextcloud имеет встроенную защиту от подбора паролей, но мы усилили её дополнительными мерами:

# config.php: настройка brute force protection
'auth.bruteforce.protection.enabled' => true,

# Белый список внутренних IP (чтобы не блокировать офис при опечатках)
'auth.bruteforce.protection.whitelist' => [
    '10.0.1.0/24',
    '10.0.2.0/24',
],

На уровне Nginx мы добавили rate limiting:

# В секции http nginx.conf
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

# В секции server
location /login {
    limit_req zone=login burst=3 nodelay;
    proxy_pass http://nextcloud;
}

Для аудита всех действий пользователей установили приложение Audit Log:

# Включение аудита
docker exec -u www-data nextcloud-app-1 php occ app:enable admin_audit

# Настройка логирования в отдельный файл
# config.php
'log_type' => 'file',
'logfile' => '/var/www/html/data/audit.log',
'log.condition' => [
    'apps' => ['admin_audit'],
],

Лог фиксировал каждое действие: вход, выход, скачивание файла, расшаривание, удаление. Это было принципиально важно — в случае инцидента компания могла точно установить, кто, когда и что делал с файлами.

Серверное шифрование данных

Для дополнительной защиты мы включили серверное шифрование — даже если злоумышленник получит физический доступ к диску, прочитать файлы он не сможет:

# Включение модуля шифрования
docker exec -u www-data nextcloud-app-1 php occ app:enable encryption
docker exec -u www-data nextcloud-app-1 php occ encryption:enable

# Шифрование всех существующих файлов (запускали в нерабочее время)
docker exec -u www-data nextcloud-app-1 php occ encryption:encrypt-all

# Проверка статуса
docker exec -u www-data nextcloud-app-1 php occ encryption:status
# - enabled: true
# - defaultModule: OC_DEFAULT_MODULE

Мы выбрали серверное шифрование (а не end-to-end), потому что оно совместимо с Collabora Online и не требует от пользователей дополнительных действий. Ключ шифрования хранится отдельно от данных и защищён мастер-паролем, который известен только IT-директору.

Collabora Online: совместное редактирование документов

Замена Google Docs была не менее важна, чем замена Google Drive. Аудиторы привыкли одновременно работать над отчётами — без совместного редактирования переход был бы болезненным.

Настройка Collabora Online в Nextcloud

Collabora Online (CODE — Collabora Online Development Edition) уже была описана в нашем Docker Compose. Осталось настроить интеграцию со стороны Nextcloud:

# Установка приложения Nextcloud Office
docker exec -u www-data nextcloud-app-1 php occ app:enable richdocuments

# Настройка URL Collabora (внутренний адрес через Docker network)
docker exec -u www-data nextcloud-app-1 php occ config:app:set richdocuments wopi_url --value="https://cloud.auditprofi.ru"

# Разрешённые домены для WOPI
docker exec -u www-data nextcloud-app-1 php occ config:app:set richdocuments wopi_allowlist --value="10.0.0.0/8"

После настройки мы проверили работу: открыли файл .docx, убедились, что два пользователя видят курсоры друг друга в реальном времени и могут одновременно редактировать документ.

Поддерживаемые форматы:

  • Документы — DOCX, DOC, ODT, RTF
  • Таблицы — XLSX, XLS, ODS, CSV
  • Презентации — PPTX, PPT, ODP
  • PDF — просмотр и аннотирование

Оптимизация производительности Collabora

При 120 пользователях Collabora требовала тюнинга. По умолчанию CODE рассчитан на 10 одновременных документов, а нам нужно было поддерживать до 30–40:

# docker-compose.yml — дополнительные параметры Collabora
collabora:
  image: collabora/code:latest
  environment:
    aliasgroup1: https://cloud.auditprofi.ru:443
    username: admin
    password: ${COLLABORA_PASSWORD}
    extra_params: >-
      --o:ssl.enable=false
      --o:ssl.termination=true
      --o:num_prespawn_children=4
      --o:per_document.max_concurrency=8
      --o:per_document.idle_timeout_secs=3600
      --o:per_view.idle_timeout_secs=900
  deploy:
    resources:
      limits:
        memory: 4G
        cpus: '4'

Параметр num_prespawn_children=4 создаёт 4 предзагруженных процесса — это ускоряет открытие первого документа с 5–7 секунд до 1–2. Лимит памяти 4 ГБ гарантировал, что Collabora не «съест» ресурсы основного сервиса.

Резервное копирование и мониторинг

Для аудиторской компании потеря данных — катастрофа. Мы реализовали многоуровневую стратегию резервного копирования по принципу 3-2-1.

Скрипт резервного копирования

Мы написали bash-скрипт, который выполняется ежедневно через cron:

#!/bin/bash
# /opt/scripts/nextcloud-backup.sh

set -euo pipefail

DATE=$(date +%Y-%m-%d_%H-%M)
BACKUP_DIR="/backup/nextcloud/${DATE}"
REMOTE_BACKUP="backup@nas.auditprofi.local:/mnt/backup/nextcloud/"
RETENTION_DAYS=30

mkdir -p "${BACKUP_DIR}"

echo "[$(date)] Включаем режим обслуживания..."
docker exec -u www-data nextcloud-app-1 php occ maintenance:mode --on

# Дамп PostgreSQL
echo "[$(date)] Дамп базы данных..."
docker exec nextcloud-db-1 pg_dump -U nextcloud nextcloud | gzip > "${BACKUP_DIR}/db.sql.gz"

# Бэкап файлов (инкрементальный через rsync)
echo "[$(date)] Бэкап файлов..."
rsync -a --delete /srv/nextcloud/data/ "${BACKUP_DIR}/data/"

# Бэкап конфигурации
cp -a /srv/nextcloud/docker-compose.yml "${BACKUP_DIR}/"
cp -a /srv/nextcloud/nginx.conf "${BACKUP_DIR}/"
cp -a /srv/nextcloud/.env "${BACKUP_DIR}/"

echo "[$(date)] Выключаем режим обслуживания..."
docker exec -u www-data nextcloud-app-1 php occ maintenance:mode --off

# Копируем на NAS
echo "[$(date)] Отправка на NAS..."
rsync -az --delete "${BACKUP_DIR}/" "${REMOTE_BACKUP}${DATE}/"

# Очистка старых бэкапов
find /backup/nextcloud/ -maxdepth 1 -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} \;

echo "[$(date)] Бэкап завершён: ${BACKUP_DIR}"

# Уведомление в Telegram
curl -s -X POST "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" \
  -d chat_id="${TG_CHAT_ID}" \
  -d text="✅ Nextcloud backup completed: ${DATE}" \
  -d parse_mode=HTML

Расписание cron:

# /etc/cron.d/nextcloud-backup
# Полный бэкап ежедневно в 3:00
0 3 * * * root /opt/scripts/nextcloud-backup.sh >> /var/log/nextcloud-backup.log 2>&1

Мониторинг через Zabbix

Мы интегрировали мониторинг Nextcloud в существующий Zabbix-сервер клиента через serverinfo API:

# Проверка статуса Nextcloud
curl -s -H "NC-Token: ${MONITORING_TOKEN}" \
  https://cloud.auditprofi.ru/ocs/v2.php/apps/serverinfo/api/v1/info?format=json | jq '.
'

# Ответ содержит:
# - Количество активных пользователей
# - Использование дискового пространства
# - Нагрузка на CPU и память
# - Количество файлов и расшариваний
# - Статус базы данных и кэша

В Zabbix мы настроили алерты:

  • Диск заполнен > 80% — предупреждение IT-отделу
  • Nextcloud недоступен > 2 мин — критическое уведомление
  • Бэкап не выполнен > 26 часов — предупреждение
  • SSL-сертификат истекает < 14 дней — предупреждение
  • CPU > 90% > 5 мин — предупреждение

Мобильный доступ и миграция данных

Финальным этапом стала настройка мобильного доступа для 30 удалённых сотрудников и миграция 1,8 ТБ данных из Google Drive.

Мобильные приложения и WebDAV

Nextcloud предоставляет нативные приложения для всех платформ:

  • Windows / macOS — десктопный клиент с синхронизацией папок (аналог Google Drive для рабочего стола)
  • Android / iOS — мобильное приложение с автозагрузкой фото и офлайн-доступом
  • WebDAV — для интеграции со сторонними файловыми менеджерами

Мы подготовили MDM-профили (Mobile Device Management) для автоматической настройки:

# Адрес WebDAV для ручной настройки
https://cloud.auditprofi.ru/remote.php/dav/files/USERNAME/

# Пример конфигурации десктопного клиента (nextcloud.cfg)
[Accounts]
0\url=https://cloud.auditprofi.ru
0\authType=webflow
0\user=@Invalid()
0\dav_user=ivanov_aa
0\webflow_user=ivanov_aa

Для удалённых сотрудников доступ осуществлялся через WireGuard VPN — Nextcloud был доступен только из внутренней сети. Внешний доступ без VPN был заблокирован на уровне firewall.

Миграция 1,8 ТБ из Google Drive

Миграцию данных мы провели в три этапа:

Этап 1. Экспорт из Google Drive (2 дня):

# Установка rclone для миграции
sudo apt install -y rclone

# Настройка подключения к Google Drive
rclone config
# → Тип: drive
# → Client ID: (получен через Google Cloud Console)
# → Scope: drive.readonly

# Проверка подключения
rclone lsd gdrive: --max-depth 1

# Полная синхронизация в промежуточную директорию
rclone copy gdrive: /staging/gdrive-export/ \
  --progress \
  --transfers 8 \
  --checkers 16 \
  --drive-acknowledge-abuse \
  --log-file /var/log/rclone-export.log

Этап 2. Реструктуризация (1 день): Мы перестроили структуру папок: из хаотичного набора персональных папок Google Drive создали логичную иерархию по отделам и проектам.

Этап 3. Импорт в Nextcloud (1 день):

# Копирование данных в data-директорию Nextcloud
rsync -av /staging/gdrive-export/Аудиторы/ /srv/nextcloud/data/data/__groupfolders/1/

# Пересканирование файлов
docker exec -u www-data nextcloud-app-1 php occ files:scan --all --verbose

# Генерация превью для всех файлов (в фоне)
docker exec -u www-data nextcloud-app-1 php occ preview:generate-all

Результаты внедрения

Проект был выполнен за 2 недели: одна неделя на развёртывание и настройку, вторая — на миграцию данных и обучение сотрудников.

МетрикаДо (Google Drive)После (Nextcloud)
Контроль данныхДанные за рубежомДанные на своём сервере
Интеграция с ADНетПолная (авто-блокировка при увольнении)
Двухфакторная аутентификацияОпциональноОбязательна для всех
Аудит действийОграниченныйПолный лог каждого действия
Стоимость (год)~480 000 ₽ (Google Workspace)0 ₽ (лицензия) + электричество
Скорость в LANДо 50 Мбит/с (через интернет)До 900 Мбит/с (гигабитная LAN)
Совместное редактированиеGoogle DocsCollabora Online

Ключевые результаты:

  • 0 инцидентов с утечкой данных за 3 месяца после внедрения
  • Экономия 480 000 ₽/год на подписке Google Workspace
  • 100% сотрудников подключены к 2FA
  • 1,8 ТБ данных успешно мигрированы без потерь
  • 99,9% uptime за первый квартал работы
«Теперь мы точно знаем, где лежат данные наших клиентов, и можем это доказать. На последнем аудите у заказчика это стало нашим конкурентным преимуществом» — IT-директор АудитПрофи.

Часто задаваемые вопросы

Да, Nextcloud можно установить классическим способом — через Apache/Nginx + PHP + PostgreSQL/MySQL. Однако Docker-развёртывание значительно упрощает обновления, бэкапы и миграцию на новый сервер. В нашей практике Docker-установки требуют на 40% меньше времени на администрирование.

Collabora Online покрывает 90–95% функций Google Docs для типичного офисного использования: совместное редактирование в реальном времени, комментарии, отслеживание изменений, базовое форматирование. Отставание заметно в сложных скриптах и надстройках. Для аудиторской компании функциональности Collabora было более чем достаточно.

Рекомендуется два подхода: (1) VPN-туннель (WireGuard или OpenVPN), через который сотрудник попадает во внутреннюю сеть — наиболее безопасный вариант; (2) публикация Nextcloud на внешний IP с обязательным 2FA, fail2ban и SSL — подходит для организаций без VPN-инфраструктуры.

Для комфортной работы 100–150 пользователей рекомендуем: 4+ ядер CPU, 16+ ГБ RAM (32 ГБ при использовании Collabora), SSD-хранилище с запасом, PostgreSQL как БД и Redis для кэширования. При нагрузке выше 200 пользователей стоит рассмотреть кластерную конфигурацию с несколькими app-серверами.

Nextcloud как self-hosted решение позволяет полностью соответствовать 152-ФЗ: данные хранятся на территории РФ, доступ контролируется организацией, ведётся полный аудит действий. Это одна из главных причин, по которым организации переходят с облачных сервисов на собственные решения.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#Nextcloud установка Docker#корпоративное файловое хранилище#Nextcloud LDAP Active Directory#Collabora Online Nextcloud#замена Google Drive#Nextcloud PostgreSQL Redis#двухфакторная аутентификация Nextcloud#Nextcloud brute force protection