Настройка Nextcloud на Synology DS220+
Прежде чем начать⌗
Сразу расскажу, что у меня так и не получилось подружить HEIF (формат фото на iOS) с Nextcloud, самый рабочий способ - конвертация в JPEG. Кроме того, Nextcloud при всех своих фичах очень плохо подходит как замена iCloud, просто потому, что там больше вычислительных мощностей и синхронизация между устройствами Apple нормально работает только с облаком Apple. В общем-то, после месяца тестов и осознание того, что при моих паттернах использования, на устройствах с iOS, получаешь больше проблем чем профита, забил и вернулся в iCloud. А для шеринга фоточек (а-ля Instagram) выбрал Piwigo.
Мое мнение, что Nextcloud имеет смысл ставить если есть желание перетянуть свои данные с более медленного облака (например, OneDrive). А так же, тем у кого основная мобильная платформа - Android или кроме фоток нужно хранить и шерить разные документы, а может даже музыку :)
Установка⌗
Сам дистрибутив взял с официального сайта и распаковал в /volume1/web/. В качестве сервера выбрал Apache 2.4 + PHP 7.4.
Зависимости⌗
Железо⌗
Nextcloud более-менее нормально ворочается на 2Гб, но как только начинается индексация или генерация превью, то могут появляться тормоза как раз из-за того, что сервер упирается в память. Потому, лучше всего докинуть памяти до 6Гб для более стабильной и плавной работы.
Хранилище данных⌗
Для хранения всяких пользовательских данных я использовал готовые образы MySql - MariaDB. И для кеша - Redis.
PHP пакеты⌗
Для работы Nextcloud нужны следующие модули
- bcmath
 - bz2
 - curl
 - exif
 - ftp
 - gd
 - gettext
 - iconv
 - intl
 - gmp
 - imagick
 - mailparse
 - mysqli
 - openssl
 - pdo_mysql
 - posix
 - soap
 - sodium
 - sockets
 - zip
 - zlib
 
Подключение Redis-кеша⌗
По какой-то причине php-модуль redis не доступен для выбора, но его можно включить окольными путями. Проверяем доступность модуля для нашей версии рhp
ls /volume1/@appstore/PHP7.4/usr/local/lib/php74/modules/redis.so
Затем добавляем строчку (сразу после posix.so)
extension = redis.so
в файл /usr/local/etc/php74/cli/conf.d/extension.ini.
И наконец добавляем элемент в список для отображения модуля в UI
"redis": {
    "enable_default": true,
    "desc": "The phpredis extension provides an API for communicating with the Redis key-value store."
},
тут так же лучше сохранить последовательность и добавить запись после модуля posix.
Так же, надо добавить соответствующие настройки в config.php
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
  array (
    'host' => '127.0.0.1',
    'port' => 6379,
    'timeout' => 1.5,
  ),
Обновляем страницу и все работает!
Генерация превью⌗
Подключить типы картинок/видео в config.php
<?php
$CONFIG = array (
  'enable_previews' => true,
  'ffmpeg' => '/bin/ffmpeg',
  'preview_max_x' => '2048',
  'preview_max_y' => '2048',
  'enabledPreviewProviders' =>
  array (
    0 => 'OC\\Preview\\Image',
    1 => 'OC\\Preview\\Movie',
    2 => 'OC\\Preview\\GIF',
    3 => 'OC\\Preview\\BMP',
    4 => 'OC\\Preview\\XBitmap',
    5 => 'OC\\Preview\\MP3',
    6 => 'OC\\Preview\\TXT',
    7 => 'OC\\Preview\\MarkDown',
    8 => 'OC\\Preview\\OpenDocument',
    9 => 'OC\\Preview\\PDF',
    10 => 'OC\\Preview\\MP4',
    11 => 'OC\\Preview\\MOV',
    12 => 'OC\\Preview\\MKV',
    13 => 'OC\\Preview\\HEIC',
    14 => 'OC\\Preview\\JPEG',
    15 => 'OC\\Preview\\PNG',
    16 => 'OC\\Preview\\AVI',
  ),
  ...
Еще надо установить модуль Preview Generator и запустить с конфигом приложения
sudo -u http php74 -c /usr/syno/etc/packages/WebStation/php_profile/<Profile-ID>/conf.d/user_settings.ini -d memory_limit=1024M /volume1/web/nextcloud/occ preview:generate-all -vvv -p /<user>/files/Photos/ <user>
посмотреть свой ProfileID можно в файле /usr/syno/etc/packages/WebStation/PHPSettings.json там он будет ключем вида “f28a94be-d803-4769-b359-b5146e657d6f”, а в значение, в объекте, будет profile_name по которому можно идентифицировать.
После этого, надо так же добавить команду в cron
sudo -u http php74 -c /usr/syno/etc/packages/WebStation/php_profile/<Profile-ID>/conf.d/user_settings.ini -d memory_limit=1024M /volume1/web/nextcloud/occ preview:pre-generate
Reverse-proxy⌗
Т.к. у меня сервер находится внутри домашней локальной сети, нужно было пробросить трафик с домена. На входной тачке Nginx и настройка не заняла много времени, тем более Nextcloud сам подсказывает, что нужно поправить в настройках.
server {
	server_name <SERVER>;
	listen 80;
	listen [::]:80;
	return 301 https://<SERVER>$request_uri;
}
server {
	server_name <SERVER>;
	listen [::]:443 ssl http2;
	listen 443 ssl http2;
	ssl_certificate /etc/letsencrypt/live/<SERVER>/fullchain.pem; # managed by Certbot
	ssl_certificate_key /etc/letsencrypt/live/<SERVER>/privkey.pem; # managed by Certbot
	ssl_trusted_certificate /etc/letsencrypt/live/<SERVER>/chain.pem;
	location / {
		proxy_pass http://<HOST>:<PORT>/;
		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 $scheme;
		proxy_headers_hash_max_size 512;
		proxy_headers_hash_bucket_size 64;
		proxy_redirect off;
		proxy_max_temp_file_size 0;
		client_max_body_size 0;
		add_header Front-End-Https on;
		add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
		add_header Referrer-Policy "same-origin";
		access_log /var/log/nginx/nextcloud-access.log custom;
		error_log /var/log/nginx/nextcloud-error.log warn;
	}
	location ^~ /.well-known {
        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }
        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }
        return 301 /index.php$request_uri;
    }
}