Перевірка налаштувань Nextcloud, виправлення помилок безпеки, налаштування кешування [ч. 3]

Оптимізуємо роботу Nextcloud

Після встановлення Nextcloud (ч.1) та налаштування HTTPS (ч.2) ввійти в профіль адміністратора, зайти в меню 'Додатки', вибрати розділ оновлення та оновити програми/додатки.

Для перевірки налаштувань серверу Nextcloud та виявлення проблем, пов'язаних з безпекою, необхідно ввійти в профіль адміністратора, зайти у меню 'Налаштування' (Settings), далі розділ 'Адміністрування', вибрати вкладку 'Overview'. Система деякий час робитиме перевірку і видасть звіт про існуючі проблеми.

Додатково просканувати свій домен, до якого прив'язано Nextcloud, на сайті Nextcloud Security Scan

Усунення проблем в налаштуваннях та безпеці сервера

Тут наведено ті проблеми, з якими я стикнувся (як правило, після встанновлення, такі ж проблеми з'являються у більшості користувачів).

  • попередження на зразок Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the documentation.

    У версії Nextcloud 16 і далі це попередження в основному стосується програми 'rightclick' (помилка '- files_rightclick' -> '- FILE_MISSING').

    Хоча загальна рекомендація з документації Nextcloud говорить про те, що потірбно заново завантажити ті файли, що до яких є така помилка, в даному випадку рекомендується вилучити файли, щодо яких вказано помилку 'file_missing' (див. тут)

    sudo rm -r /usr/share/webapps/nextcloud/apps/files_rightclick/files_rightclick/*
    

    після цього зробити повторне сканування.

    В принципі можна ігнорувати цю проблему, бо це баг, який буде згодом виправлений в нових версіях програми rightclick та Nextcloud.

  • проблема: 'X-Frame-Options not set to SAMEORIGIN'

    Для вирішення необхідно у файлі /etc/nginx/sites-available/nextcloud.conf добавити

    fastcgi_hide_header X-Frame-Options;
    proxy_hide_header X-Frame-Options;
    

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

  • Проблема: Ваш веб-сервер не налаштований як треба для вирішення "/.well-known/caldav" / Ваш веб-сервер не налаштований як треба для вирішення "/.well-known/carddav"

    Для цього в налаштування серверу nginx (файл /etc/nginx/sites-available/nextcloud.conf) в розділ server, де є директива listen 443, добавити директиви такого змісту

    location = /.well-known/carddav {
      return https://$server_name:443/remote.php/dav; 	
    }
    
    location = /.well-known/caldav {
      return https://$server_name:443/remote.php/dav; 	
    }
    

    Рішення для веб-серверу nginx зроблено на основі цього і цього та інструкції DigitalOcean по налаштуванню nginx.

  • Повідомлення: This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them.

    Для вирішення достатньо лише встановити відсутні модулі. В нашому випадку це були

    intl
    imagick
    

    Встановлюємо

    sudo pacman -S php-intl php-imagick
    

Налаштування кешування

Для кешування використовуватиму Redis - як на мене одна з найшвидших та найоптимальніших баз даних для кешування. Крім цього, є досвід практичного застосування цієї БД не лише для кешування.

Найперше встановлюємо Redis (сервер та модуль) та APCu-модуль.

sudo pacman -S redis php-redis php-apcu
APCu

Встановлення та налаштування APCu взято тут і тут.

  • до файлу /etc/php/php.ini додати

    extension=apcu
    
    ...
    
    [APCu]
    ;apc.enabled=1
    ;apc.shm_size=32M
    apc.ttl=7200
    apc.enable_cli=1
    
Redis

Встановлення та налаштування Redis взято тут і тут.

  • змінити такі налаштування в файлі /etc/redis.conf (коментарі позначено знаком '#')

    sudo vim /etc/redis.conf
    
    #заборонити доступ по TCP
    port 0
    #дозволити сокети
    unixsocket /var/run/redis/redis.sock
    unixsocketperm 770 #ВіКі на ArchLinux вказує 700. Але сервер не працюватиме, тому потрібно вказувати рівень доступу 770.
    

    зберегти та закрити.

  • додати користувача веб-сервера до групи redis

    sudo usermod -a -G redis http
    
  • копіюємо файл redis.service

    sudo cp /usr/lib/systemd/system/redis.service /etc/systemd/system/redis.service
    
  • редагуємо /etc/systemd/system/redis.service

    sudo vim /etc/systemd/system/redis.service
    

    замість

    ExecStop=/usr/bin/redis-cli shutdown
    

    вказуємо

    ExecStop=/usr/bin/redis-cli shutdown -s /var/run/redis/redis.sock
    

    закриваємо і зберігаємо файл.

  • додаємо такі налаштування до кофігурації php (/etc/php/php.ini)

    ;ensure igbinary loads before redis
    ;look here https://bugs.archlinux.org/task/63157 
    extension=igbinary #цей модуль зазначається першим над redis
    extension=redis
    

    зберегти та закрити файл.

    Важливо! Для роботи Redis з PHP крім встановлення модулю php-redis повинен ще бути встановлений модуль php-igbinary і цей модуль повинен запускатись раніше redis (див. налаштування вище). Цю проблему описано тут.

    Для надійності встановити/перестановити igbinary

    sudo pacman -S php-igbinary
    
  • додаємо такі налаштування до файлу конфігураці Nextcloud

    sudo vim /usr/share/webapps/nextcloud/config/config.php
    
    'memcache.local' => '\OC\Memcache\Redis',
    'memcache.locking' => 'OC\Memcache\Redis',
    'memcache.distributed' => '\OC\Memcache\Redis',
    'redis' => [
         'host'  => '/var/run/redis/redis.sock',
         'port'  => 0,
    ],
    

    зберегти та закрити файл.

  • додаємо наступне налаштування до файлу /etc/sysctl.conf (за відсутності - створюємо файл; дане налаштування потрібне для нормальної роботи Redis на RPi)

    vm.overcommit_memory = 1
    
  • дозволяємо службу redis.service і запукаємо сервер

    sudo systemctl enable redis
    sudo systemctl start redis
    
  • перезапускаємо веб-сервер

    sudo systemctl restart nginx
    
  • також обов'язково перезапускати службу php-fpm (цю проблему описано тут; лише стосується випадку, коли використовується служба php-fpm).

    sudo systemctl restart php-fpm
    
  • перезапускаємо RPi (щоб зміни по Redis запрацювали)

    sudo reboot
    

Чекаємо на перезавантаження, заходимо на свій домен Nextcloud і логінимось. Якщо видає помилку, що сервер не доступний (помилки 500, 501, 502), тоді необхідно дивитись в налаштування Nextcloud (/usr/share/webapps/nextcloud/config/config.php) і змінити кешування з Redis на APCu

'memcache.local' => '\OC\Memcache\APCu',

Всі інші налаштування Redis в цьому файлі вилучити. Зберегти зміни, закрити файл. Перезапустити веб-сервер (nginx) та службу php-fpm.

Оновити сторінку Nextcloud. Якщо все запрацювало, можна так і залишати (кешування працюватиме, хоча й не на основі Redis).


Весь процес по встановленню та налаштуванню Nextcloud на Raspberry Pi на ArchLinux ARM

ч.1: Встановлення Nextcloud локально

ч.2: Налаштування https та підключення домену для віддаленого доступу