Настройка 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;
}
}