Разворачиваем Nextcloud в Docker Compose — чтобы личное облако летало

Правильная установка Nextcloud в 2026 году взамен Google Drive

Скажу честно: стандартное облако Nextcloud, установленное на Ubuntu (через snap install nextcloud) или Debian по первой ссылке из гугла, часто работает не идеально. Фотографии открываются медленно, интерфейс подвисает при загрузке файлов, а синхронизация контактов быстро разряжает телефон.

Почему так происходит? Потому что большинство инструкций упускают три важных компонента производительности: Кэширование Redis, Базу Данных MariaDB и Фоновые задачи Cron.

Сегодня мы не просто установим облако. Мы построим готовую к работе систему на вашем VPS или домашнем сервере (Home Lab), которая работает быстро, надежно и действительно способна заменить Google Drive или Яндекс.Диск. Это будет полноценное решение в Docker Compose с базой MariaDB, ускорителем Redis и правильным планировщиком задач.

Архитектура правильного облака

Чтобы система работала быстро даже на недорогом тарифе хостинга, нам понадобятся три компонента в одной связке Docker Compose:

  1. Nextcloud (App): Само приложение.
  2. MariaDB: Быстрая база данных. Никогда не используйте SQLite, если у вас больше десятка файлов.
  3. Redis: Кэш-сервер. Он берет на себя блокировки файлов и хранение сессий. Без него Nextcloud будет постоянно обращаться к диску, создавая задержки.

Файл docker-compose.yml

Создайте папку my-cloud, а внутри — файл docker-compose.yml. Используйте этот конфиг:

version: '3.8'

services:
  db:
    image: mariadb:10.11
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - db_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=super_secure_root_pass  # Придумайте сложный пароль!
      - MYSQL_PASSWORD=cloud_db_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  redis:
    image: redis:alpine
    restart: always

  app:
    image: nextcloud:latest
    restart: always
    ports:
      - 8080:80
    volumes:
      - nextcloud_data:/var/www/html
    environment:
      - MYSQL_PASSWORD=cloud_db_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
      - REDIS_HOST=redis
    depends_on:
      - db
      - redis

  cron:
    image: nextcloud:latest
    restart: always
    entrypoint: /cron.sh  # Запускает только фоновые задачи, а не веб-сервер
    volumes:
      - nextcloud_data:/var/www/html
    depends_on:
      - db
      - redis

volumes:
  db_data:
  nextcloud_data:

Почему два раза image: nextcloud:latest?

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

  1. Контейнер app работает как веб-сервер и отвечает только за интерфейс.
  2. Контейнер cron использует те же системные файлы Nextcloud (поэтому образ одинаковый), но выполняет тяжелые фоновые задачи (индексацию, превью, очистку).

Такое разделение гарантирует, что даже во время тяжелой обработки файлов ваш интерфейс останется быстрым и отзывчивым.

Запускаем наш docker-стек на сервере:

docker-compose up -d

Оптимизация PHP в Docker контейнере

После того как вы зашли по адресу http://ваш-ip:8080 (или домену с SSL через Nginx/Traefik) и создали админа, не спешите загружать терабайты фото. Нам нужно подкрутить настройки PHP.

Nextcloud в стандартной конфигурации слишком скромен в потреблении ресурсов, что плохо для современных серверов.

  1. Зайдите в консоль контейнера:
    docker exec -it my-cloud-app-1 bash
  2. Установите редактор (если его нет) и откройте конфиг PHP (обычно /usr/local/etc/php/conf.d/nextcloud.ini):
    apt-get update && apt-get install nano
    nano /usr/local/etc/php/conf.d/nextcloud.ini
  3. Добавьте или измените эти строки для повышения лимитов (Memory Limit и Upload Max Size):
    memory_limit=1024M
    upload_max_filesize=16G
    post_max_size=16G
    max_execution_time=3600
  • memory_limit — Лимит ОЗУ для скриптов. 1024M достаточно для генерации превью и работы без ошибок.
  • upload_max_filesize — Максимальный размер загружаемого файла. Ставьте с запасом (16 ГБ+), чтобы грузить большие архивы или видео.
  • post_max_size — Максимальный размер POST-запроса. Должен быть равен или больше upload_max_filesize.
  • max_execution_time — Время выполнения скрипта в секундах (3600 = 1 час). Важно при загрузке больших файлов, чтобы соединение не обрывалось.

Теперь ваше облако сможет обрабатывать загрузку больших видеофайлов и не вылетать с ошибкой “Out of memory” при генерации превьюшек для галереи.

Настройка Redis в config.php

Чтобы Nextcloud узнал о существовании кэширования Redis и перестал зависать, нужно явно прописать это в его конфиге. Это критический этап оптимизации Nextcloud. Файл конфигурации находится по пути volumes/nextcloud_data/config/config.php (на хост-машине).

Добавьте туда этот блок с параметрами Memcache:

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
     'host' => 'redis',
     'port' => 6379,
],
'default_phone_region' => 'RU',

После сохранения перезапустите контейнер: docker-compose restart app. Теперь ваше облако работает на максимальной скорости.

Подключение внешних дисков (External Storage)

Частая ошибка — хранить все данные внутри Docker-контейнера на системном диске сервера. Место на SSD хостинга (особенно VPS) обычно стоит дорого и быстро заканчивается.

Nextcloud имеет отличную функцию: External Storage Support (S3, HDD, WebDAV). Вы можете подключить недорогое S3-хранилище (например, Cloudflare R2 или Яндекс.Облако) или примонтировать объемный HDD диск /mnt/hdd к серверу, и пробросить его в контейнер.

Для этого:

  1. Включите приложение “External storage support” в настройках Apps (внутри панели администратора).
  2. В панели слева появится раздел “Внешние хранилища”.
  3. Добавьте туда свои S3 бакеты, FTP сервера или локальные папки.

Теперь у вас есть огромное облачное пространство для архивов и бэкапов.

Заключение и выводы

Мы развернули мощную платформу для хранения данных на базе Nextcloud + Docker Compose.

  • С Redis интерфейс и галерея открываются мгновенно.
  • С Cron задачи выполняются в фоне, не нагружая веб-сервер.
  • С MariaDB база данных выдержит любую нагрузку и тысячи файлов.

Эта инструкция подходит для установки на любой Linux сервер (Ubuntu 22.04/24.04, Debian 12) и даже для Portainer. Именно так строят надежные системы профессионалы. Теперь и у вас есть свое безопасное облако.