NextCloud установка и настройка

Будем ставить на 18,04 убунте. В итоге должна получится установка с высокой скоростью работы и рабочим модулем онлайн документов. Сервис проверки безопасности https://scan.nextcloud.com/

Обновляем систему

# apt update & apt upgrade -y

Ставим mariadb

# apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
 
# add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mariadb.mirror.liquidtelecom.com/repo/10.5/ubuntu bionic main'
 
# apt update & apt install mariadb-server mariadb-client -y

Создаем БД

# mysql -uroot -p
 
MariaDB [(none)]> CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit

Ставим php и нужные модули. Отключаем апач. Будем юзать nginx

# add-apt-repository ppa:ondrej/php
 
# apt update
 
# apt install php7.4 -y
 
# systemctl disable --now apache2
 
# apt install php-imagick php7.4-common php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-fpm php7.4-mysql -y
 
# apt install nginx -y

Правим конфиг php

Находим и редактируем следующие строки

# nano /etc/php/7.4/fpm/php.ini
 
max_execution_time = 300
max_input_time = 600
memory_limit = 512M
post_max_size = 20M
upload_max_filesize = 40M

Раскоментируем следующие строки 

# nano /etc/php/7.4/fpm/pool.d/www.conf
 
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

Перезапустим php

service php7.4-fpm restart

Качаем и распаковывем nextcloud

# wget https://download.nextcloud.com/server/releases/latest.tar.bz2
 
# tar -xjf latest.tar.bz2 -C /usr/share/nginx/
 
# chown www-data. /usr/share/nginx/nextcloud/ -R

Настраиваем nginx

# nano /etc/nginx/conf.d/nextcloud.conf
 
server
 {
     listen 443 ssl http2;
     server_name sd.suhar.su;
    ssl_certificate /etc/nginx/cert/server.crt;
    ssl_certificate_key /etc/nginx/cert/server.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "HIGH:!RC4:!aNULL:!MD5:!kEDH";
 
     # Add headers to serve security related headers
     add_header X-Content-Type-Options nosniff;
     add_header X-XSS-Protection "1; mode=block";
     add_header X-Robots-Tag none;
     add_header X-Download-Options noopen;
     add_header X-Permitted-Cross-Domain-Policies none;
 
     #This header is already set in PHP, so it is commented out here.
     #add_header X-Frame-Options "SAMEORIGIN";
 
     # Path to the root of your installation
     root /usr/share/nginx/nextcloud/;
 
     location = /robots.txt {
         allow all;
         log_not_found off;
         access_log off;
     }
 
     # The following 2 rules are only needed for the user_webfinger app.
     # Uncomment it if you're planning to use this app.
     #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
     #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
     # last;
 
     location = /.well-known/carddav {
         return 301 $scheme://$host/remote.php/dav;
     }
 
     location = /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
     }
 
     location ~ /.well-known/acme-challenge {
       allow all;
     }
 
     # set max upload size
     client_max_body_size 512M;
     fastcgi_buffers 64 4K;
 
     # Disable gzip to avoid the removal of the ETag header
     gzip off;
 
     # Uncomment if your server is build with the ngx_pagespeed module
     # This module is currently not supported.
     #pagespeed off;
 
     error_page 403 /core/templates/403.php;
     error_page 404 /core/templates/404.php;
 
     location / {
        rewrite ^ /index.php$uri;
     }
 
     location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
     }
 
     location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
      }
 
     location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
     }
 
     location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
     }
 
     # Adding the cache control header for js and css files
     # Make sure it is BELOW the PHP block
     location ~* \.(?:css|js)$ {
         try_files $uri /index.php$uri$is_args$args;
         add_header Cache-Control "public, max-age=7200";
         # Add headers to serve security related headers (It is intended to
         # have those duplicated to the ones above)
         add_header X-Content-Type-Options nosniff;
         add_header X-XSS-Protection "1; mode=block";
         add_header X-Robots-Tag none;
         add_header X-Download-Options noopen;
         add_header X-Permitted-Cross-Domain-Policies none;
         # Optional: Don't log access to assets
         access_log off;
    }
 
    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
         try_files $uri /index.php$uri$is_args$args;
         # Optional: Don't log access to other assets
         access_log off;
    }
 }
# mkdir /etc/nginx/cert
# cd /etc/nginx/cert
# openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -nodes -days 3650 -subj '/CN=localhost'
# systemctl reload nginx
# mkdir /usr/share/nginx/nextcloud-data
# chown www-data. /usr/share/nginx/nextcloud-data -R

Заходим на сайт и заполняем. В поле Каталог с данными вводим предварительно созданную директорию /usr/share/nginx/nextcloud-data

БД заполняем как создали.  Заходим в админку. Устанавливаем через панель приложений Preview Generator

Подключаем офисный пакет и включаем нормальную генерацию предпросмотровых изображений 

# apt install libreoffice libreoffice-l10n-ru libreoffice-help-ru
 
# apt install ffmpeg imagemagick ghostscript

Перед $CONFIG = array ( вставляем

# nano /usr/share/nginx/nextcloud/config/config.php
 
'preview_libreoffice_path' => '/usr/bin/libreoffice',
'enable_previews' => true,
'enabledPreviewProviders' =>
 array (
    0 => 'OC\\Preview\\TXT',
    1 => 'OC\\Preview\\MarkDown',
    2 => 'OC\\Preview\\OpenDocument',
    3 => 'OC\\Preview\\PDF',
    4 => 'OC\\Preview\\MSOffice2003',
    5 => 'OC\\Preview\\MSOfficeDoc',
    6 => 'OC\\Preview\\Image',
    7 => 'OC\\Preview\\Photoshop',
    8 => 'OC\\Preview\\TIFF',
    9 => 'OC\\Preview\\SVG',
   10 => 'OC\\Preview\\Font',
   11 => 'OC\\Preview\\MP3',
   12 => 'OC\\Preview\\Movie',
   13 => 'OC\\Preview\\MKV',
   14 => 'OC\\Preview\\MP4',
   15 => 'OC\\Preview\\AVI',
 ),

Запускаем предварительную генерацию

# sudo -u www-data php /usr/share/nginx/nextcloud/occ preview:generate-all -vvv

Добавим в крон задачу для генерации картинок

# crontab -e -u www-data

*/5 * * * * /usr/bin/php /usr/share/nginx/nextcloud/occ preview:pre-generate > /dev/null 2>&1

Что получилось

Система вполне имеет право на жизнь. Если ее допилить напильником она неплохо работает. Из минусов это ее тормоза. Генерация картинок делает на одном ядре цпу. Наверно это можно как то поправить но я не нашел. То есть если у вас пару десятков тысяч картинок то это будет мягко говорят долго.

Подлагивает при скролинге большой галереи картинок. Видимо надо что то делать с настройками php. Он почему то использует только 4 ядра цпу.

Не удалось подключить папку с фотками расположенными на Synology через nfs. Очень геморно там разбираться с правами. То есть подключить папку легко, а вот заставить Nextcloud увидеть эту папку мне так и не удалось.

Удивительно, но выделив виртуалке 48 потоков цпу и 8гб памяти думаешь, что все будет летать. Но к сожалению из коробки вы такого не увидите.

Тот же Synology имея в разы меньше ресурсов, делает все гораздо быстрее. В общем если бюджет не позволяет и есть куча свободного времени для оптимизации, то Nextcloud очень хорошая система.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *