- Введение
- Вариант 1: настройка ssl с помощью let’s encrypt
- Вариант 2: настройка ssl с сертификатом с собственной подписью
- Вход в веб-интерфейс nextcloud
- Выявленные недостатки:
- Дополнительная «тонкая» настройка nextcloud
- Зачем это надо?
- Защита веб-интерфейса nextcloud с помощью ssl
- Защита для nextcloud
- Конфигурация nextcloud
- Нагрузочное тестирование
- Настроить php7-fpm
- Настроить виртуальный хост для nextcloud в nginx
- Настройка административной учетной записи
- Настройка доверенных доменов
- Настройка доступа к виртуальной машине nextcloud из локальной сети
- Настройки selinux
- Обновление debain
- Обновление mariadb до версии 10.4
- Обновление nextcloud до версии 17
- Обновление php до версии 7.2
- Организация места хранения данных nextcloud
- Подготовка сервера для установки nextcloud
- Получение дополнительной информации о nextcloud snap
- Послесловие
- Предварительные требования
- Предисловие
- Развернуть nextcloud
- Развёртка и настройка зависимостей
- Синхронизация с облаком персонального компьютера
- Синхронизация с облаком смартфонов
- Создайте самоподписанный сертификат ssl для nextcloud
- Установить mariadb
- Установить nginx
- Установить php
- Шаг 1 – установка nextcloud
- Шаг второй. делаем пользователей «read-only»
- Шаг первый. подготовка шаблона аккаунтов сотрудников.
- Шаг третий — заранее чиним zipstreamer
- Шаг четвертый — настраиваем параметры ссылок
- Шаг шестой — запускаем пользователей через ldap
- Заключение
Введение
Nextcloud (ответвление проекта ownCloud) — напоминающий Dropbox файлообменный сервер для централизованного хранения персонального контента, в том числе документов и изображений. Отличие Nextcloud в том, что весь его функционал реализован с открытым исходным кодом.
В этом обучающем модуле мы научимся устанавливать и настраивать экземпляр Nextcloud на сервере Ubuntu 18.04.
Вариант 1: настройка ssl с помощью let’s encrypt
Если с вашим сервером Nextcloud связано доменное имя, веб-интерфейс лучше всего защитить посредством сертификата SSL от Let’s Encrypt.
Для начала откройте порты брандмауэра, которые Let’s Encrypt использует для подтверждения владения доменом. При этом ваша страница входа Nextcloud станет общедоступной, но поскольку мы уже настроили учетную запись администратора, никто не сможет ее взломать:
Затем запросите сертификат Let’s Encrypt с помощью следующей команды:
Вначале вам нужно будет подтвердить, что ваш сервер соответствует условиям запроса сертификата в службе Let’s Encrypt:
Вариант 2: настройка ssl с сертификатом с собственной подписью
Если у вашего сервера Nextcloud нет доменного имени, вы можете защитить веб-интерфейс, создав сертификат SSL с собственной подписью. Этот сертификат обеспечит доступ к веб-интерфейсу через шифрованное соединение, но не сможет подтверждать подлинность вашего сервера, и поэтому ваш браузер может вывести предупреждение при попытке открыть сервер.
Чтобы сгенерировать сертификат с собственной подписью и настроить Nextcloud для его использования, введите:
Output
Generating key and self-signed certificate... done
Restarting apache... done
Показанный выше результат означает, что Nextcloud сгенерировал и активировал сертификат с собственной подписью.
Теперь, когда вы защитили интерфейс, откройте веб-порты брандмауэра, чтобы разрешить доступ к веб-интерфейсу:
Вы готовы к первому входу в Nextcloud.
Вход в веб-интерфейс nextcloud
Мы завершили настройку Nextcloud, и теперь вы можете открыть доменное имя или IP-адрес вашего сервера в браузере:
Выявленные недостатки:
- В NextCloud нету возможности глобального контроля над всеми созданными ссылками. Они отображаются только внутри каждого аккаунта в отдельном разделе.
- Если вы расшарите по ссылке корень подключенного диска — это может служить потенциальной утечкой данных, так как в ссылке расшарятся все доступные вашему аккаунту папки.
- Заметил, что за год использования поднятого сервиса, на данный момент, в базе данных таблица oc_filecache весит ~29Gb и имеет около ~100кк строк (мы используем ванильную MySQL 5.7.x). Это связано с багами #16834, #6395, #7312, #20349. Пока идет наблюдение на втором инстансе.
- С версии php 7.4 с января 2021 года выявлена сильная просадка производительности. Виновником является актуальные версии php-libsmbclient. Текущая версия, которая совместима с php 7.4/8.0 версиями получила конфликт между своей лицензией и php, и была удалена из репозиториев Debian и Ubuntu и перемещена в pecl. Как возможный обход — можно использовать php 7.2 и старую версию библиотеки.
Дополнительная «тонкая» настройка nextcloud
В процессе эксплуатации облака в течение первого месяца работы всплыли некоторые проблемы, которые мне пришлось решить с помощью сообщества или самостоятельно. Надо сказать, что я использовал сервис очень усиленно и по сути проверил его на стрессоустойчивость.
Я бы не сказал, что нижеизложенные решения правильны и красивы, но эти костыли работают по крайней мере для версии 11.0.2, иначе сервисом пользоваться было бы невозможно. В версии 12.х возможно что-то было улучшено и исправлено, поэтому я бы не рекомендовал эти настройки прописывать сразу в рамках стартовой настройки, в то время как для линейки 11.x их можно применять сразу.
Проблема 1
При синхронизации возникает ошибка типа «file is locked». Синхронизация останавливается. Проблема известна — необходимо очистить содержимое таблицы oc_file_locks выполнив из консоли mysql (при авторизации пользователя nextcloud) к ней следующий запрос:mysql > DELETE FROM oc_file_locks WHERE 1
Так как такие ошибки нередки, то я не придумал ничего лучше, как создать скрипт и положить его прямо в папку суперпользователя:# nano /root/empty_oc_file_locks
Содержимое скрипта:
#!/bin/bash
mysql -unextcloud > -pnc123 -D nextcloud <<MY_QUERY
DELETE FROM oc_file_locks WHERE 1
MY_QUERY
Зачем это надо?
Удобная доставка контента конечному пользователю, минуя возню с FTP и невозможность (из-за NDA) воспользоваться публичными сервисами и облаками для передачи файлов (BTsync, Google-Mail-Yandex-DiskDropboxetc).
Защита веб-интерфейса nextcloud с помощью ssl
Прежде чем мы начнем использовать Nextcloud, нам нужно обеспечить защиту веб-интерфейса.
Если с вашим сервером Nextcloud связано доменное имя, пакет Nextcloud snap может помочь вам получить и настроить защищенный сертификат SSL от Let’s Encrypt. Если у вашего сервера Nextcloud нет доменного имени, Nextcloud может настроить сертификат с собственной подписью, который будет шифровать веб-трафик, но не будет подтверждать надежность вашего сервера.
Учитывая это, перейдите к разделу, который соответствует вашей ситуации.
Защита для nextcloud
Защитить наш сервис от подбора паролей к админке можно с помощью fail2ban. Для этого нужно описать характерное выражение, встречающееся в логах nextcloud при неудачной авторизации, по которому будет срабатывать соответствующий триггер.
Создаём файл:# nano /etc/fail2ban/filter.d/nextcloud.conf
С нижеприведённым содержимым:
[Definition]failregex={«reqId»:”.*”,«remoteAddr»:”.*”,«app»:«core»,«message»:«Login failed: ‘.*’ (Remote IP: ”)»,«level»:2,«time»:”.*”}ignoreregex =
Открываем файл:# nano /etc/fail2ban/jail.local
И в конец файла добавляем нижеприведённое:
Конфигурация nextcloud
Браузер открывает IP / nextcloud и входит в конфигурацию:
Нажмите и подождите минуту или две после завершения установки, чтобы войти в список файлов:
Затем загрузите клиент и следуйте подсказкам.
Нагрузочное тестирование
«Как дела с нагрузкой?» — спросите вы напоследок.
Наш инстанс сервиса крутится на ~ 6Gb Ram 6CPU в виртуальной машине среди других VM.
При пике нагрузки на сеть — оперативной памяти использовалось чуть более 2.5Gb, процессор забит не был, а отдача в среднем была около 5Gbit/s (рекорд — доходило и до 8Gbit/s).
Единственное, что заметили — при отдаче сверх 6Gbit/s во внешний мир, у нас периодически отваливается web-интерфейс, но сами загрузки у пользователей продолжают идти.
Настроить php7-fpm
На этом этапе мы настроим php-fpm для работы с Nginx. Php7-fpm будет использоватьnginx Пользователь для запуска и мониторинга9000 порт.
Используйте vim для редактирования файла конфигурации php7-fpm по умолчанию:
vim /etc/php-fpm.d/www.confНастроить виртуальный хост для nextcloud в nginx
В Nginxconf.d Создайте новый файл конфигурации виртуального хоста в каталогеnextcloud.conf:
cd /etc/nginx/conf.d/
vim nextcloud.confВставьте следующее в файл конфигурации виртуального хоста:
Настройка административной учетной записи
Существует несколько разных способов, которыми вы можете настроить Nextcloud snap. В этом руководстве мы не будем рассматривать создание пользователя с правами администратора через веб-интерфейс. Вместо этого мы создадим такого пользователя через командную строку, чтобы избежать появления небольшого окна, в котором страница регистрации администратора будет доступна любому посетителю IP-адреса или домена вашего сервера.
Чтобы настроить Nextcloud с новой учетной записью администратора, используйте команду nextcloud.manual-install. В качестве аргументов следует задать имя пользователя и пароль:
Следующее сообщение указывает, что настройка Nextcloud выполнена правильно:
Output
Nextcloud is not installed - only a limited number of commands are available
Nextcloud was successfully installedПосле установки Nextcloud нам необходимо настроить доверенные домены, чтобы Nextcloud реагировал на запросы с использованием доменного имени или IP-адреса сервера.
Настройка доверенных доменов
При установке из командной строки Nextcloud ограничивает имена хостов, на которые будет реагировать устанавливаемый экземпляр. По умолчанию служба отвечает только на запросы, обращенные к хосту с именем localhost. Для доступа к Nextcloud мы будем использовать доменное имя сервера или IP-адрес, и поэтому нам нужно изменить эту настройку, чтобы можно было применять запросы этого типа.
Вы можете просмотреть текущие настройки, запросив значение массива trusted_domains:
Output
localhostВ настоящее время в массиве содержится только первое значение localhost. Мы можем добавить запись для доменного имени или IP-адреса нашего сервера, введя следующее:
Настройка доступа к виртуальной машине nextcloud из локальной сети
У нас нет проблем с открытием сайтов внутри виртуальной машины или с хостовой системы. Но как открыть созданный сайт с другого компьютера в локальной сети? Посмотрим на структуру нашей сети, изображённой ниже.
На картинке видно, что маршрутизатор подключен к интернету напрямую и сконфигурирован так, что автоматически раздаёт IP адреса подключенным устройствам в диапазоне 192.168.0.2-192.168.0.254. Адрес 192.168.0.2 получил наш компьютер, а 192.168.0.3 – второй компьютер, на котором мы делаем сервер.
Я без проблем могу открыть сайт внутри виртуальной машины 192.168.233.138. Я без проблем могу открыть сайт с машины 192.168.0.3 просто введя нужный IP адрес в браузере – софт виртуализации уже позаботился о правильном конфигурировании сетевого окружения на хостовой машине.
Но как мне добраться до сайта с компьютера 192.168.0.2? Если я введу IP адрес 192.168.233.138, то мне ничего не откроется, так как ни мой компьютер, ни реальный маршрутизатор ничего не знают об этой подсети. Если я введу адрес 192.168.0.3, то мне так же ничего не откроется, так как на этом компьютере реально нет никакого сайта – он внутри его виртуальной машины.
Для решения этого вопроса нужно настроить виртуальный маршрутизатор компьютера 192.168.0.3. Мы уже знаем, что обращение к сайтам идёт по портам 80 и 443. При обращении на эти порты к машине 192.168.0.3 нужно построить маршрутизацию так, чтобы запросы переправлялись на виртуальную машину 192.168.233.138.
Этот инструмент позволяет довольно гибко управлять сетевыми параметрами. Нам нужно выделить виртуальную сетевую карту VMNet8 и щелкнуть по ставшей доступной кнопке «NAT Settings…». В открывшемся окне нужно добавить правила для создания нужной нам маршрутизации.
Настройки selinux
Отключите SELinux:
# Окончательно закрыть SELinux (требуется перезагрузка)
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
# Временно закрыть SELinux
setenforce 0Или измените настройки:
Обновление debain
Останавливаем веб-сервер:
# service apache2 stopИ обновляемся:
# apt-get update
# apt-get dist-upgradeПосле обновления можно проверить версию ОС и сделать контрольную перезагрузку, чтобы убедиться в том, что после обновления всё нормально стартует:
# cat /etc/debian_version
# reboot
Обновление mariadb до версии 10.4
На сайте проекта есть
, на которой нужно указать свою ОС, её релиз и выбрать версию базы данных. После выбора сгенерируется код для добавления репозитория.
Останавливаем веб-сервер:
# service apache2 stopДобавляем репозиторий и обновляем пакеты:
Обновление nextcloud до версии 17
Для запуска обновления нужно авторизоваться на сервисе под административной записью, проследовать в настройки и открыть «Общие настройки» в административном разделе. Nextcloud показывает установленную версию и версию доступную для обновления, которое можно запустить нажав кнопку «Открыть окно обновления».
После инициации Nextcloud делает резервную копию, скачивает и проверяет целостность файлов обновления, включает режим обслуживания и обновляет файлы. Далее следует вопрос «Keep maintenance mode active»? Здесь нужно быть внимательным. Положительный ответ оставит сайт в режиме обслуживания — предполагается, что администратор знает что дальше делать и сделает это вручную. В противном случае Nextcloud сделает всё сам, поэтому для продолжения нажимаем кнопку «No».
Обновления выполняются итерационно. Сначала Nextcloud 13.x обновится до крайней версии ветки 14.x. После этого нужно будет снова зайти в админцентр и запустить обновление, теперь уже с 14.х до 15.x. И так далее пока не будет достигнута последня возможная актуальная версия.
До обновления
На последних версиях Nextcloud рекомендуется включить PHP OPcache для улучшения производительности. Странно, что этот момент я как-то упустил пару лет назад, так как OPcache появился ещё в PHP 5. В /etc/php/7.2/apache2/php.ini нужно раскомментировать и отредактировать следующие параметры:
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
pcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1Обновление 13.x -> 14.x
Восстанавливаем индексы таблиц:
# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indicesОбновление 14.x -> 15.x
Подготавливаем базу данных nextcloud для включения четырёхбайтовой кодировки:
# mysql -u root -p
MariaDB [(none)]> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MariaDB [(none)]> quitВключаем поддержку четырёхбайтовой кодировки в Nextcloud:
# sudo -u www-data php /var/www/nextcloud/occ config:system:set mysql.utf8mb4 –type boolean –value=”true”Преобразовываем таблицы:
# sudo -u www-data php /var/www/nextcloud/occ maintenance:repairВосстановливаем потерянные индексы таблиц:
# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indicesПреобразовываем индексы таблиц в bigint:
# sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigintОбновление 15.x -> 16.x
Восстановливаем потерянные индексы таблиц:
# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indicesПреобразовываем индексы таблиц в bigint:
# sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigintОбновление 16.x -> 17.x
Никаких дополнительных действий не требуется.
Обновление php до версии 7.2
Останавливаем веб-сервер:
# service apache2 stopДобавляем сертификат и ключи PPA, репозиторий PHP:
Организация места хранения данных nextcloud
Эта часть факультативная и может без проблем пропускаться – работать всё будет и без неё. Однако, если вы заходите выносить директорию с данными вне виртуальной машины, то рекомендую ознакомиться с ней.
Подготовка сервера для установки nextcloud
Nextcloud – это веб-приложение, которое имеет набор файлов и работает с базой данный MySQL. Веб-приложение устанавливается как обычный сайт, для установки которого нужно загрузить файлы «движка» на сервер, запустить установочный файл и при установке указать реквизиты доступа к базе данных, заранее созданной для этого сайта.
Создаём директорию, в которой будут размещены файлы Nextcloud:# mkdir /var/www/nextcloud
Получение дополнительной информации о nextcloud snap
Если вам нужна дополнительная информация о Nextcloud snap, вам могут помочь несколько полезных команд.
Команда snap info показывает описание, доступные команды управления Nextcloud, установленную версию и отслеживаемый канал snap:
snap info nextcloudПакеты snap могут определять поддерживаемые ими соединительные интерфейсы, включающие элементы slot и plug, сочетание которых дает snap определенные уровни доступа. Например, если пакет snap требуется использовать в качестве сетевого клиента, у него должен быть соединительный интерфейс network. Чтобы увидеть, какие соединительные интерфейсы задает этот пакет snap, введите:
snap connections nextcloudOutput
Interface Plug Slot Notes
network nextcloud:network :network -
network-bind nextcloud:network-bind :network-bind -
removable-media nextcloud:removable-media - -Чтобы узнать обо всех конкретных службах и приложениях, предоставляемых этим пакетом snap, вы можете посмотреть файл определения snap, для чего нужно ввести следующее:
cat /snap/nextcloud/current/meta/snap.yamlЭто позволит вам увидеть отдельные компоненты, входящие в пакет snap, если вам потребуется помощь с отладкой.
Послесловие
По данной инструкции была обновлена виртуальная машина с Nextcloud 13. Использование виртуальной машины позволяет не делать резервных копий файлов Nextcloud и его базы данных, так как в случае проблем можно просто вернуть заранее сохранённый файл виртуальной машины и начать всё сначала.
Однако это не касается папки с пользовательскими данными, которую я рекомендую так же забэкапить вместе с виртуальной машиной с Nextcloud. В моём случае «облако» используется в качестве удалённой папки с автоматической версионностью, причём с направлением синхронизации «только туда», и мне потрея этих данных была некритична — пришлось бы просто несколько часов опять делать синхронизацию.
Несмотря на моё пренебрежение выработанным жизнью правилом «сохранись на всякий случай», обновление прошло без проблем и все клиенты так же без проблем заработали с Nextcloud 17. Я впечатлён, Фрэнк Карлитшек — Вы со своей командой делаете отличную работу!
После обновления я решил почистить пользовательские данные, которые, судя по статистике, занимали под два терабайта. Столько оперативных данных у меня не было — большинство объёма занимали файлы версий и удалённые файлы. Проблема с которой я столкнулся заключалась в том, что для одного пользователя удалённых данных было настолько много (дело даже не в объёме, а именно в количестве — очень много мелких файлов)
Предварительные требования
Чтобы выполнить перечисленные в настоящем руководстве шаги, вам потребуется следующее:
Выполнив вышеперечисленные шаги, изучите возможности настройки Nextcloud на своем сервере.
Предисловие
Изначально хотелось на Debian 10 установить и настроить Nginx, поверх чего без проблем бы установился актуальный Nextcloud 17. Но для всего этого у меня не получилось выбрать время, поэтому эта статья представляет из себя набор инструкций по обновлению Nextcloud с 13 до актуальной версии 17 с предварительной подготовкой веб-сервера.
Для начала нужно пояснить зачем потребовались радикальные изменения на стороне веб-сервера. Наш сервер основан на актуальном и поддерживаемом Debian 9. Можно просто обновить операционную систему и все компоненты веб-сервера получат как минимум обновления безопасности.
Всё было бы замечательно если бы мы дальше использовали Nextcloud 13 или обновились только до версии 14. Но Nextcloud 13 уже не поддерживается, а поддержка 14-ой версии «на излёте». Начиная с 15-ой версии Nexctcloud будет предлагать преобразовать базу данных в big int для поддержки четырёхбайтовой кодировки и с MariaDB 10.
1 сделать это будет весьма проблематично. Nexctcloud 17 требует PHP 7.1-7.3, в то время как Debian 9 в своих родных репозиториях содержит только версию 7.0. Правильнее, в плане надежности и предсказуемости, было бы обновиться до предпоследней версии Nextcloud, но за пару лет я настолько уверился в надёжности этого сервиса, что мне хотелось обновиться до последней версии и обновить веб-сервер с заделом на будущее.
Поэтому, для обновления до Nexctcloud 17 оптимально обновить MariaDB до актуальной стабильной версии 10.4, а PHP — до 7.2. Именно 7.2, а не актуальной 7.4. Дело в том, что Nextcloud 13 требует PHP 5.6, 7.0 — 7.2, а для Nexctcloud 17 требуется PHP 7.1 — 7.3.
Использовать PHP 7.2 удобно с целью минимизации действий по обновлению. Сервер Apache обновлять не потребуется — достаточно установить обновления безопасности, которые распространяет команда поддержки Debian. А вот для обновлений MariaDB и PHP придётся подключать внешние репозитории.
Когда я только знакомился с Nextcloud я обновлял его «руками»: из консоли специальной командой сайт переводился в режим обслуживания, вручную скачивался и распаковывался архив с новой версией сайта, обновлялись файлы и запускалась процедура обновления.
Такое обновление обычно приводило к ожидаемым результатам, хотя я не ленился делать резервную копию сайта, базы и пользовательских данных. А вот автоматическое обновление порой приводило к всяким сюрпризам. Но это было давно, стабильность движка с тех пор сильно возросла и на этот раз я делал обновления исключительно через веб-интерфес.
Правда от командной строки отвертеться всё равно не удалось. При итерационном обновлении на каждую новую версию в панели управления будут появляться различные предупреждения и уведомления, которые необходимо будет «убирать», осмысленно выполняя команды в командной строке.
Развернуть nextcloud
Загрузите сервер Nextcloud и разархивируйте его:
Развёртка и настройка зависимостей
Для начала, нам надо иметь отдельную виртуалку или сервер, где можно установить операционную систему, и после — NextCloud.
На Хабре есть не одна статья, посвященная развёртке системы и сервиса.
AlexanderS достаточно хорошо и подробно описал процесс от установки системы до самой настройки облака (включая актуализацию статей по годам). Не вижу смысла в очередной раз это всё повторять.
1. Так как мы подключаем в NextCloud сетевой диск, то нам понадобятся пакеты в систему: smbclient, libsmbclient , php-ldap, и php-smbclient.
2. Из-за особенностей настроек нашего сервера samba (отключена поддержка smb1), на машине с nextcloud, в файлах
/etc/samba/smb.conf/usr/share/samba/smb.conf
пришлось поменять строки, отвечающие за протокол:
[global]
client min protocol = SMB2
client max protocol = SMB3
В ином случае, nextcloud так и не смог подключиться к диску.
Синхронизация с облаком персонального компьютера
Я не считаю себя настоящим программистом. Последние десять лет я программирую на таких языках программирования, которые применяются разве что при разработке процессоров или чипсетов. Ввиду того, что я уже как лет 15 ничего не делал на Си/Си , но что-то автоматизировать на компьютере мне требовалось, я довольно активно применял скриптовые языки типа BAT/CMD или такой софт как Sign 0f Mistery или xStarter. Когда-то я узнал и попробовал что такое AutoIt и это стало новой эрой в моей автоматизации на ПК.
После того как я убедился в стабильности и надёжности системы синхронизации на смартфонах я подумал, что неплохо было бы синхронизировать данные на своём домашнем компьютере. У Nextcloud есть свой клиент для Windows и, естественно, он стал первым кандидатом для испытаний.
Синхронизировать я собирался объём данных порядка терабайта, состоявший из сотен тысяч файлов разного размера. Данные были различны: музыка, картинки, документы, электронные книги, дистрибутивы, резервные копии сайтов и прочее и подобное. Всё это разумно было бы свести к синхронизации более критических данных, например, таких как документы, но мной овладел азарт и хотелось проверить сделанный сервис на прочность.
Спустя десяток часов после начала синхронизации, а по сути первой закачки контента на сервер, клиент запнулся о файл с длинным именем. В то время на сервере я еще использовал подключение внешнего хранилища через VMWare Shared Folders и мне пришлось перепробовать с десяток клиентов, а потом ставить простые эксперименты по ручному копированию файлов на сервер, чтобы понять, что проблема – на стороне сервера.
Так, спустя неделю удачного запуска сервиса, пришлось откатываться на резервную виртуальную машину и отказаться от механизма VMWare Shared Folders, начиная всё сначала. В конце концов, я убрал это узкое место на стороне сервера, протестировал надёжность решения неделей синхронизации смартфонов и решил вновь вернуться к домашнему компьютеру.
На этот раз клиент не споткнулся о злополучный файл и я уже было возрадовался, однако спустя полсуток синхронизации мелких файлов клиент опять подвис. Теперь выяснилось, что слишком длинный путь именно на стороне домашнего компьютера и клиент Nextcloud не может его корректно обработать.
Какое-то время я потратил на то, чтобы найти удобную программу для синхронизации, поддерживающее управление через командную строку. Мне хотелось на каждую крупную папку на компьютере сделать своё задание и запускать их в пакетном режиме. Ранее у меня уже был сделан и отработан набор BAT файлов для синхронизации, используя сценарии и управление FreeFileSync через командную строку.
Проблема длинных путей или имён файлов решалась заданием локальных папок вида «\?D:Info», т.е. по сути обращением к локальной папке как к сетевой. Однако, что такое webdav FreeFileSync не знает. Полных аналогов FolderSync для Windows, к сожалению, не нашлось, но не раз на форумах вместо неё рекомендовали GoodSync и, после кастинга десятка других программ, я решил попробовать его.
GoodSync оказался довольно дружелюбным софтом. Имеется специальная портабельная версия, которая называется GoodSync2Go. Вот она меня и заинтересовала. При установке нужно выбрать букву диска и программа устанавливается на него в папку GoodSync. Я создал папку Sync в корневом каталоге диска, допустим D, и переместил туда созданную папку GoodSync со всем содержимым.
Синхронизация с облаком смартфонов
Для синхронизации содержимого телефонов, работающих под Android, существует замечательное приложение FolderSync. Программа полностью оправдывает свою небольшую цену.
Создайте самоподписанный сертификат ssl для nextcloud
Вы можете использовать бесплатный сертификат SSL, например let’s encrypt, или создать самоподписанный сертификат SSL. Здесь я использую OpenSSL для создания собственного самозаверяющего SSL-сертификата.
Создайте новый каталог для файлов SSL:
mkdir -p /etc/nginx/cert/Как показано ниже, используйтеopenssl Создайте новый сертификат SSL:
openssl req -new-x509-days365-nodes-out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.keyНаконец использовалchmod Команда для установки разрешений для всех файлов сертификатов на600:
chmod700 /etc/nginx/cert
chmod600 /etc/nginx/cert/*Установить mariadb
yum -y install mariadb-serverЗапустите службу MariaDB:
systemctl start mariadb
systemctl enable mariadbНастройте MariaDB:
mysql_secure_installationУстановить nginx
использоватьyumУстановите nginx:
yum -y install nginxзапускатьnginxИ настроим его на загрузку:
systemctl start nginx
systemctl enable nginxИзменить правила брандмауэра, добавить80порт:
# Брандмауэр добавляет порт 80 (постоянный: постоянный)
firewall-cmd --zone=public --add-port=80/tcp --permanent
# Обновить правила брандмауэра
firewall-cmd --reloadУстановить php
Использоватьyum Установите php-fpm:
yum -y install php71w-fpm php71w-cli php71w-gd php71w-mcrypt php71w-mysql php71w-pear php71w-xml php71w-mbstring php71w-pdo php71w-json php71w-pecl-apcu php71w-pecl-apcu-develЗапустите php-fpm и установите его для запуска при загрузке:
systemctl start php-fpm
systemctl enable php-fpmШаг 1 – установка nextcloud
Мы выполним установку Nextcloud с помощью системы пакетов snappy. Эта система пакетов доступна в Ubuntu 18.04 по умолчанию. Она позволяет организациям поставлять программное обеспечение со всеми зависимостями и конфигурациями в самодостаточном блоке с автоматическими обновлениями.
Чтобы загрузить пакет Nextcloud snap и установить его в системе, введите:
Пакет Nextcloud будет загружен и установлен на ваш сервер. Вы можете проверить успешность установки посредством вывода изменений, связанных с пакетом snap:
Output
ID Status Spawn Ready Summary
2 Done today at 16:12 UTC today at 16:12 UTC Install "nextcloud" snapИнформация о состоянии и сводная информация показывают, что установка была выполнена без проблем.
Шаг второй. делаем пользователей «read-only»
Достаточно указать квоту в «1 B» (1 байт) в разделе настроек пользователей (
Шаг первый. подготовка шаблона аккаунтов сотрудников.
Поскольку у нас будет не один сотрудник в системе, а постепенно их количество будет меняться — если заранее не настроить шаблон создаваемого пользователя — у каждого будет в домашней папке несколько файлов-примеров. Хорошо что по этому поводу у nextcloud есть отдельная настройка —
, которая настраивается в
config.php
'skeletondirectory' => '/var/www/html/data/donotdeletme',
То есть, можно создать пустую папку и указать в конфиге полный путь к ней.
Шаг третий — заранее чиним zipstreamer
— библиотека,
в бекенде NextCloud, она служит для создания архивов «на лету», то есть во время скачивания пачки файлов.
Если вы перейдя по шареной ссылке, нажали кнопку “
Dowload All Files
“/”
Скачать все файлы
“, то вы заметите, что вам не показывается в браузере (или в менеджере загрузок) конечный вес архива, а полоса загрузки будет неопределенной.

Это связано с тем, что по этой кнопке система в режиме реального времени создает и отдает вам на скачивание архив (в большинстве случаев .zip, в редких кейсах — .tar)
Кстати, в силу особенности этой технологии, возобновление приостановленных загрузок в этом случае невозможно.
Похожее поведение есть у и аналогичных сервисов: Google Drive, Яндекс.Диск, и т.д.
Проблема кроется в том, что по неизвестным причинам, заложенная в NextCloud логика переключения
в zip64 сбоит, и при случае, если в папке больше 65536 файлов, иили их общий вес будет превышать 4гб — скорее всего вы столкнетесь с проблемой, что скачанный файл будет либо побит, либо загрузка будет прерываться после скачанных 4гб.
Данной проблеме выделяли достаточное время, на GitHub даже есть, и не один, закрытый тикет (#1755, #15871, #8798), но несмотря на то, что якобы проблема решена — у нас она так и осталась, и с переменным успехом воспроизводилась, очень мешая работе. Пришлось решать её более радикально.
Шаг четвертый — настраиваем параметры ссылок
настраиваем правила так, как будет удобно. Например, делаем обязательную защиту паролем и ставим обязательный срок жизни.
Шаг шестой — запускаем пользователей через ldap
Теперь, когда мы все подготовили — ставим из маркетплейса плагин, и сразу после
LDAP. В нашей системе, мы давали доступ сотрудникам, которые находятся в группе
NextcloudAccess
. Можете сделать аналогично.
Заключение
Nextcloud позволяет воспроизводить возможности популярных облачных сервисов хранения файлов. Контентом можно делиться с другими пользователями или делать его общедоступным через публичные URL. Преимущество Nextcloud заключается в том, что информация хранится в надежном месте, которое вы контролируете.
Изучите интерфейс и установите плагины из магазина приложений Nextcloud, если вам требуются дополнительные возможности.
