Перейти до вмісту
EuroVPSEuroVPS

Чому Nextcloud здається повільним і що насправді це виправляє

Повільний Nextcloud рідко потерпає від браку обладнання. Фонові завдання, кешування, блокування, індекси та офісний редактор, перевірені по порядку.

Автор EuroVPS Engineering

5 хв читання
Why Nextcloud feels slow, and what actually fixes it

Коли інстанс Nextcloud здається млявим, перший інстинкт полягає в тому, щоб дати йому більше CPU і пам’яті. Зазвичай це нічого не змінює, бо час іде кудись інде: на фонові завдання, що виконуються не там, де треба, на кеш, який не налаштовано, на блокування файлів, що б’ють у базу даних, на таблицю без індексу. Ось порядок, у якому ми перевіряємо речі, з налаштуваннями, що виправляють кожну з них. Усе тут застосовне незалежно від того, чи працює Nextcloud на звичайному сервері, чи в контейнерах.

Почніть з того, що Nextcloud уже вам каже

Nextcloud постачається з власними перевірками стану. Запустіть їх, перш ніж щось змінювати:

sudo -u apache php occ setupchecks
sudo -u apache php occ status

Використовуйте користувача вебсервера (apache, www-data або nginx, залежно від вашої системи). Ті самі результати з’являються в налаштуваннях адміністрування, розділ Overview. Кожне попередження там є справжньою знахідкою. Виправте їх спочатку; кілька пунктів нижче з’являться в тому списку.

Фонові завдання не повинні їхати на завантаженнях сторінок

Nextcloud має прибиральну роботу: сканування файлів, прев’ю, сповіщення, очищення, видалення застарілої активності. За замовчуванням, у режимі AJAX, він виконує одне завдання щоразу, коли користувач завантажує сторінку. Користувачі платять за прибирання власними завантаженнями сторінок, а на тихому інстансі завдання відстають.

Перемкніться на системний cron:

sudo -u apache php occ background:cron

Потім запускайте cron.php кожні п’ять хвилин. Таймер systemd чистіший за запис у crontab, бо він логує збої:

# /etc/systemd/system/nextcloud-cron.service
[Service]
Type=oneshot
User=apache
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php

# /etc/systemd/system/nextcloud-cron.timer
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target

Увімкніть його через systemctl enable --now nextcloud-cron.timer. Поки ви там, задайте вікно обслуговування, щоб важкі завдання виконувалися вночі:

sudo -u apache php occ config:system:set maintenance_window_start --type=integer --value=1

Значення є годиною в UTC; важкі завдання виконуватимуться протягом чотирьох годин після неї.

Кешування і блокування файлів

Без кешу в пам’яті Nextcloud знову і знову питає базу даних про ті самі речі. Без належного бекенду блокувань кожна файлова операція теж бере блокування в базі даних. Налаштуйте обидва в config.php:

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
  'host' => '/run/redis/redis.sock',
  'port' => 0,
],

APCu є швидким локальним кешем усередині кожного процесу PHP. Redis тримає спільний стан і блокування файлів. Використовуйте Unix socket, якщо Redis на тій самій машині, і переконайтеся, що користувач вебсервера може його відкрити.

APCu також потрібно ввімкнути для командного рядка, інакше occ скаржитиметься:

; /etc/php.d/40-apcu.ini
apc.enable_cli=1

Сам PHP: OPcache і пул FPM

Nextcloud є великим застосунком на PHP. Без достатнього OPcache PHP перекомпільовує його частини на кожен запит. Типові початкові значення:

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60

setupchecks скаже вам, якщо буфер interned strings замалий. Потім підберіть розмір пулу PHP-FPM під пам’ять, яку ви насправді маєте: pm.max_children, помножене на типову пам’ять одного воркера PHP, має вміститися в RAM із запасом для бази даних і Redis. Виміряйте реальну пам’ять воркера під навантаженням, перш ніж обирати, замість копіювати число з форуму.

База даних: індекси та великі цілі

Оновлення іноді додають індекси та колонки, яких наявні інсталяції не отримують автоматично, бо їх створення на великій таблиці займає час. Nextcloud залишає цей крок вам:

sudo -u apache php occ db:add-missing-indices
sudo -u apache php occ db:add-missing-columns
sudo -u apache php occ db:add-missing-primary-keys
sudo -u apache php occ db:convert-filecache-bigint

Запускайте їх після кожного мажорного оновлення, у вікні обслуговування, бо вони можуть блокувати великі таблиці. Відсутній індекс на таблиці файлового кешу є однією з найпоширеніших причин, чому великий інстанс здається повільним під час перегляду тек.

Прев’ю: генеруйте їх заздалегідь

Мініатюри генеруються першого разу, коли хтось відкриває теку. Тека з фотографіями високої роздільності означає повільний перший візит для того, хто потрапить туди першим. Допомагають дві речі. Обмежте розміри прев’ю:

sudo -u apache php occ config:system:set preview_max_x --value=2048 --type=integer
sudo -u apache php occ config:system:set preview_max_y --value=2048 --type=integer

І, якщо ваші користувачі зберігають багато зображень, використовуйте застосунок Preview Generator, щоб створювати прев’ю у фоновому завданні, а не на вимогу.

Офісний редактор є окремим навантаженням

Редагування в браузері через Collabora працює як окремий сервіс. Nextcloud надсилає йому документ, а Collabora рендерить і редагує його. Коли люди кажуть «Nextcloud повільний» під час редагування, вузьким місцем зазвичай є Collabora, а не Nextcloud. Спостерігайте за його CPU і пам’яттю окремо, поки кілька людей одночасно редагують великі електронні таблиці, і підбирайте розмір за цими вимірюваннями.

Два пункти конфігурації важать і для швидкості, і для безпеки. Спрямуйте Nextcloud на Collabora шляхом, який є швидким і близьким. І обмежте, яким серверам дозволено звертатися до інтерфейсу WOPI Collabora:

sudo -u apache php occ config:app:set richdocuments wopi_allowlist --value="10.0.0.0/24"

Використайте там діапазон адрес власного сервера Nextcloud, щоб лише ваш Nextcloud міг відкривати документи через ваш редактор.

Закріпіть те, що працює

Якщо ви запускаєте Nextcloud у контейнерах, закріпіть кожен образ (Nextcloud, базу даних, Redis, Collabora) за тегом, який обрали ви.

Порядок, коротко

  1. occ setupchecks і виправити кожне попередження.
  2. Системний cron через таймер плюс вікно обслуговування.
  3. APCu локально, Redis для блокувань і спільного кешу.
  4. OPcache належного розміру і пул FPM, підібраний за вимірюваннями.
  5. Відсутні індекси, колонки і ключі додані після кожного оновлення.
  6. Прев’ю обмежені і генеруються у фоні.
  7. Collabora виміряна і підібрана як окремий сервіс, з allow list для WOPI.
  8. Кожен компонент закріплено за версією, яку обрали ви.

Лише після всього цього додавання обладнання каже вам щось корисне. Ми саме так запускаємо Nextcloud з Collabora для наших клієнтів на виділених інстансах і радо подивимося на ваш.

Поговоріть з інженером

Related (rows[1])

Пов’язане: Managed офісні документи на Nextcloud · Приватний архів пошти з локальним AI-пошуком

Опубліковано 7 жовтня 2026 р..

Усі нотатки з практики