Содержание
Статья не закончена!
Дата написания: июль 2018 г.
Автор: Graf
Сервер облачного хранилища на базе Nextcloud |
---|
Установка
Локальный IP-адрес сервера куда всё устанавливаем и где настраиваем - 192.168.10.217
IP-адрес шлюза - 192.168.10.1
Внешний IP-адрес - 77.77.77.77 (Вымышленный. Придуманный, только лишь, в качестве примера.)
Доменное имя - my-cloud.ru (Вымышленное. Придуманное, только лишь, в качестве примера.)
Nextcloud версии 13.0.4 (Обновлено с 13.0.2)
Согласно системным требованиям рекомендуется:
- 512 MB ОЗУ
- Red Hat Enterprise Linux 7 или Ubuntu 16.04 LTS
- MySQL/MariaDB
- Apache 2.4 с mod_php
- PHP 7+
По поводу п.1 - Испытывалось на 16 GB.
По поводу п.2 - У нас система будет круче! :) А именно - Slackware Linux 14.2 64-bit без DE и всем, что с ними связанно. После обновления всех доступных пакетов, посредством slackpkg, с ядром 4.4.132.
п.3 и п.4 - в системе уже установлены, просто настроим их.
По поводу п.5 - В Slackware Linux 14.2 установлен PHP версии 5.6, с которой текущая версия Nextcloud, будет работать. Но при запуске выдаст предупреждение о том, что текущая версия Nextcloud является последней, которая поддерживает PHP 5.6 и рекомендует обновить версию PHP до версии 7.0+, для возможности перехода на Nextcloud 14.
Поэтому, первым делом, обновим версию PHP до 7+.
PHP 7
Последнюю версию PHP можно посмотреть на http://php.net/downloads.php и скачать её с ближайшего зеркала.
Для автоматизации сборки пакета, я написал скрипт который скачает всё необходимое и запустить сборку пакета в каталоге со скриптом.
Назовём скрипт ./build.php7
#!/bin/bash # Версия alpine AV="2.21" # Версия php PHPV="7.2.6" # Скачиваем php.SlackBuild и причитающееся wget -r -nd -np -R index*,php-5* \ -e robots=off https://mirror.slackbuilds.org/slackware/slackware64-14.2/source/n/php/ # Скачиваем последнюю версию php wget -O php-$PHPV.tar.xz http://pl1.php.net/get/php-$PHPV.tar.xz/from/this/mirror # Для сборки php нужен пакет alpine # Скачиваем alpine.Slackbuild и причитающееся wget -r -nd -np -R index*,alpine-2* \ -e robots=off https://mirror.slackbuilds.org/slackware/slackware64-14.2/source/n/alpine/ -P ./alpine # Скачиваем последнюю версию alpine wget http://alpine.x10host.com/alpine/release/src/alpine-$AV.tar.xz -P ./alpine # В php.Slackbuild меняем версию alpine c 2.20 на последнюю и правим путь к исходникам. sed -i \ -e "s/ALPINE=2.20/ALPINE=$AV/" \ -e 's:CWD/../alpine:CWD/alpine:' ./php.SlackBuild # В alpine.Slackbuild меняем версию c 2.20 на последнюю sed -i "s/VERSION:-2.20/VERSION:-$AV/" ./alpine/alpine.SlackBuild # Распаковываем diff по man-страницам gzip -d ./alpine/alpine.manpage.diff.gz # В новых версия путь к man-страницам поменялся, исправляем. sed -i 's:doc/alpine.1:doc/man1/alpine.1:' ./alpine/alpine.manpage.diff # Запаковываем обратно gzip ./alpine/alpine.manpage.diff # Вытаскиваем из архива файлы php.ini-development и php-fpm.conf.in в текущий. tar -xpvf ./php-$PHPV.tar.xz php-$PHPV/php.ini-development php-$PHPV/sapi/fpm/php-fpm.conf.in # Переходим в каталог php-версия. cd ./php-$PHPV ############# работаем с php.ini-development ############ # Предварительно скопировав файл ./php.ini-developmentс расширением orig, # убираем знак комментария с параметра session.save_path с указанием пути, sed -i'.orig' \ 's:;session.save_path = \"/tmp\":session.save_path = \"/var/lib/php\":' \ ./php.ini-development # Добавляем необходимые extension в файл ./php.ini-development начиная с 908 строки. sed -i '908a\extension=pspell \ extension=bcmath \ extension=bz2 \ extension=calendar \ extension=ctype \ extension=curl \ extension=dba \ extension=dom \ extension=enchant \ extension=exif \ extension=ftp \ extension=gd \ extension=gettext \ extension=gmp \ extension=iconv \ extension=intl \ extension=ldap \ extension=mbstring \ extension=mysqli \ extension=odbc \ extension=openssl \ zend_extension=opcache \ extension=pdo \ extension=pdo_mysql \ extension=pdo_sqlite \ extension=pdo_odbc \ extension=shmop \ extension=snmp \ extension=soap \ extension=sqlite3 \ extension=tokenizer \ extension=wddx \ extension=xmlreader \ extension=xsl \ extension=zip \ extension=zlib' ./php.ini-development # Разницу между двумя файлами ./php.ini-development и ./php.ini-development.orig # записываем в ./php.ini-development.diff diff -u ./php.ini-development{.orig,} > ./php.ini-development.diff # сжимаем ./php.ini-development.diff в ./php.ini-development.diff.gz gzip ./php.ini-development.diff # # ############ закончили с php.ini-development ################ ########## работаем с php-fpm.conf.in ################### # # # Правим файл php-fpm.conf.in sed -i'.orig' \ -e s'/;pid =/pid =/' \ -e s'/;error_log =/error_log =/' \ -e s'/include=@/;include=@/' \ -e '$a;include=etc/php-fpm.d/*.conf' ./sapi/fpm/php-fpm.conf.in # Разницу между двумя файлами php-fpm.conf.in и php-fpm.conf.in.orig # записываем в php-fpm.conf.diff diff -u ./sapi/fpm/php-fpm.conf.in{.orig,} > ./sapi/fpm/php-fpm.conf.diff # сжимаем php-fpm.conf.diff gzip ./sapi/fpm/php-fpm.conf.diff # # ############ закончили с php-fpm.conf.in ################ # Переходим в каталог с php.SlackBuild cd .. ############ Подменяем diff'ы ##################### # # # Переименовываем старый ./php.ini-development.diff.gz в ./php56.ini-development.diff.gz mv ./php.ini-development.diff.gz ./php56.ini-development.diff.gz # Переименовываем старый ./php-fpm.conf.diff.gz в ./php56-fpm.conf.diff.gz mv ./php-fpm.conf.diff.gz ./php56-fpm.conf.diff.gz # Копируем недавно созданный php.ini-development.diff.gz в каталог с php.SlackBuild cp ./php-$PHPV/php.ini-development.diff.gz ./ # Копируем недавно созданный php-fpm.conf.diff.gz в каталог с php.SlackBuild cp ./php-$PHPV/sapi/fpm/php-fpm.conf.diff.gz ./ # Удаляем более не нужный каталог ./php-версия rm -rf ./php-$PHPV # # ############ закончили подмену diff'ов ############## # Меняем версии php в файле ./mod_php.conf.example предварительно переименовав с расширением orig sed -i'.orig' s'/php5/php7/g' ./mod_php.conf.example # Меняем версии php в файле ./fetch-php.sh sed -i'.orig' "s/php-5.6.23/php-$PHPV/" ./fetch-php.sh # Присваиваем бит запуска alpine.SlackBuild и php.SlackBuild chmod +x ./alpine/alpine.SlackBuild chmod +x ./php.SlackBuild # запускаем сборку пакета и по окончании обновляем собранный пакет. ./php.SlackBuild && upgradepkg /tmp/php-$PHPV-*.t?z # переименовываем соответствующие файлы. mv /etc/php.ini /etc/php56.ini mv /etc/php.ini.new /etc/php.ini mv /etc/httpd/mod_php.conf /etc/httpd/mod_php56.conf mv /etc/httpd/mod_php.conf.example /etc/httpd/mod_php.conf
Добавим скрипту бит запуска и запустим его с выводом сообщений в файл ./build.php7.log для дальнейшего просмотра и выявления ошибок. В принципе, существенных ошибок я не нашёл, поэтому можно запустить и без использования tee. После завершения скрипта проверим версию.
# chmod +x ./build.php7 # ./build.php7 | tee -a ./build.php7.log ... Slackware package /tmp/php-7.2.6-x86_64-1.txz created. Package php-5.6.23-x86_64-1 upgraded with new package /tmp/php-7.2.6-x86_64-1.txz. # php -v PHP 7.2.6 (cli) (built: Jun 8 2018 16:16:08) ( ZTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.6, Copyright (c) 1999-2018, by Zend Technologies
Всё, PHP 7 установлен. Теперь установим сам Nextcloud и, для устранения ошибок кэширования, redis.
Nextcloud и Redis
Устанавливаем sbopkg, синхронизируемся с его репозиторием попутно соглашаясь с созданием отсутствующих каталогов.
# wget https://github.com/sbopkg/sbopkg/releases/download/0.38.1/sbopkg-0.38.1-noarch-1_wsr.tgz # upgradepkg --install-new ./sbopkg-0.38.1-noarch-1_wsr.tgz # sbopkg -r
Устанавливаем Nextcloud и Redis.
# sbopkg -Bi "redis nextcloud-server" # pecl install redis (на последующие вопросы - "no") # echo "extension=redis.so" > /etc/php.d/redis.ini
Для безошибочной работы Redis изменим параметры ядра
# echo never > /sys/kernel/mm/transparent_hugepage/enabled # echo "512" > /proc/sys/net/core/somaxconn # echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
Применим параметры ядра без перезагрузки.
# sysctl -p
Запускаем Redis.
# chmod +x /etc/rc.d/rc.redis # /etc/rc.d/rc.redis start # ps aux | grep redis root 6843 0.0 0.1 43116 8448 ? Ssl 19:24 0:00 /usr/bin/redis-server 127.0.0.1:6379
Для автоматической загрузки при запуске сервера, добавим в /etc/rc.d/rc.local три строчки:
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo "512" > /proc/sys/net/core/somaxconn /etc/rc.d/rc.redis start
Apache и MySQL
Внесём кое-какие правки в /etc/httpd/httpd.conf, а именно:
- удалим знак комментария с модулей cgi, cgid, rewrite
- удалим знак комментария со строки подключения mod_php.conf
- В DirectoryIndex добавим index.php
и запустим апач.
# sed -i'.orig' \ -e '/mod_php/s/#/ /' \ -e '/mod_cgi.so/s/#/ /' \ -e '/mod_cgid.so/s/#/ /' \ -e '/mod_rewrite/s/#/ /' \ -e '/DirectoryIndex index.html/ s/$/ index.php/' \ /etc/httpd/httpd.conf # chmod +x /etc/rc.d/rc.httpd # /etc/rc.d/rc.httpd start
Инициализируем каталог данных MySQL и создадим системные таблицы. Запустим MySQL и дадим пользователю root пароль.
# mkdir /var/lib/mysql/mysql # mysql_install_db # chown -R mysql.mysql /var/lib/mysql # chmod +x /etc/rc.d/rc.mysqld # /etc/rc.d/rc.mysqld start # mysql -u root MariaDB [(none)]> set password for 'root'@'localhost' = password('mypassword'); Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> \q Bye
Добавим в /etc/my.cnf.d/server.cnf
[mysqld] max_allowed_packet = 8M table_open_cache = 2048 tmp_table_size = 256M max_heap_table_size = 256M thread_cache_size = 8 query_cache_size = 16M sql_mode = NO_ENGINE_SUBSTITUTION skip-external-locking innodb_log_buffer_size = 32M innodb_buffer_pool_size = 512M innodb_flush_log_at_trx_commit = 2 innodb_large_prefix = on innodb_flush_method = O_DIRECT innodb_buffer_pool_instance = 1 innodb_max_dirty_pages_pct = 90
Рестарт Mysql
# /etc/rc.d/rc.mysqld restart
Настройка
Первый запуск
Продолжим настройку в веб-интерфейсе. Запустим наше облако локально, по адресу http://192.168.10.217/nextcloud/ и введём необходимые данные.
Первые два поля это:
пользователь с правами админа - например, admin :) ;
пароль пользователя с правами админа.
Если вдруг забыли пароль или его нужно сменить какому-либо пользователю:
# chmod +x /var/www/htdocs/nextcloud/occ # sudo -u apache /var/www/htdocs/nextcloud/occ user:resetpassword admin Enter a new password: Confirm the new password: Successfully reset password for admin
Далее. Раскрываем «Хранилище и база данных» и заполняем:
Каталог с данными - Здесь создастся каталог data, место, где будут храниться ВСЕ данные ВСЕХ пользователей, а так же логи Nextcloud. Лучше для этого выделить отдельный винчестер и в этом поле указать путь к его точке монтирования. Не забыв сделать её владельцем apache:apache.
Выбираем базу данных - MySQL/MariaDB и в поля ниже вводим соответствующие значения:
пользователь с правами администратора MySQL, у нас это - root;
пароль пользователя с правами администратора MySQL;
название создаваемой базы данных, у нас это - nextcloud;
путь к компьютеру, где установлена MySQL.
Нажимаем на «Завершить установку» и, если всё прошло гладко, увидим веб-интерфейс Nextclod.
Перейдём в основные настройки и посмотрим на ошибки.
Исправление ошибок
Исправление ошибок, связанных с HTTPS и .htaccess, описал в отдельном разделе.
Кэш
В /etc/php.ini добавим рекомендуемые параметры opcache, а для приемлемой работы с файлами большого объёма, кое-какие параметры изменим:
opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.memory_consumption=256 opcache.save_comments=1 opcache.revalidate_freq=0 post_max_size = 16G upload_max_filesize = 0 memory_limit = 2G sys_temp_dir = "/var/tmp" date.timezone = Europe/Moscow
Далее, добавим в конец файла /var/www/htdocs/nextcloud/config/config.php
// Кэширование памяти для локально сохраненных данных. 'memcache.local' => '\\OC\\Memcache\\Redis', // Кэширование памяти для блокировки файлов. 'memcache.locking' => '\\OC\\Memcache\\Redis', // Разрешаем блокировку файлов к которым происходит одновременный доступ. 'filelocking.enabled' => 'true', // URL без "/index.php". Должны быть установлены - mod_rewrite и mod_env 'htaccess.RewriteBase' => '/', // Настройка redis 'redis' => array ( 'host' => 'localhost', 'port' => 6379, ), // Выключить режим обслуживания 'maintenance' => false, // Используем тему по умолчанию. Темы лежат в /var/www/htdocs/nextcloud/themes 'theme' => '', // Логи // Расположение файла. 'logfile' => '/var/log/nextcloud.log', // Формат даты и времени в логах. 'logdateformat' => 'd-m-Y H:i:s', // Уровень логирования. 0 = Debug, 1 = Info, 2 = Warning, 3 = Error и 4 = Fatal. 'loglevel' => 2, // Ограничиваем общий размер лог-файла 10 Мб, после которого произойдет ротация и будет создан новый. // (в байтах) 'log_rotate_size' => 10485760, // Часовой пояс, по умолчанию UTC. 'logtimezone' => 'Europe/Moscow'
Назначаем хозяином логов apache.
# chown apache:apache /var/log/nextcloud.log
Запускаем обновление .htaccess
# sudo -u apache php occ maintenance:update:htaccess
Рестарт apache
# /etc/rc.d/rc.httpd restart
Медленная проверка
Автоматическая проверка ошибок проходит очень и очень долго. На видео выше я не показываю всё время затраченное на проверку, я останавливаю запись, а по завершению проверки её продолжаю. Идём в «Журналирование» и видим такую ошибку:
"GuzzleHttp\Exception\ConnectException: cURL error 7: Failed to connect to www.nextcloud.com port 80: Connection timed out"
Заходим на http://blocklist.rkn.gov.ru/ и видим:
Для исправления есть два варианта:
1. исправить в файле /var/www/htdocs/nextcloud/settings/Controller/CheckSetupController.php блок $siteArray заменив в нем www.nextcloud.com, например, на www.yandex.ru. При этом не забыть, что при обновлении файл будет заменен и исправление вновь нужно внести вручную. Хотя, есть вероятность того, что к очередному обновлению, IP-адрес nextcloud разблокируют;
2. В /var/www/htdocs/nextcloud/config/config.php добавить
'has_internet_connection' => false ,
Правда, ускорив таким способом загрузку, мы получим новое предупреждение в основных настройках:
«Этот сервер не подключён к Интернету: множество конечных устройств не могут быть доступны. Это означает, что не будут работать некоторые функции, такие как подключение внешнего хранилища, уведомления об обновлениях или установка сторонних приложений. Так же могут не работать удалённый доступ к файлам и отправка уведомлений по электронной почте. Для использования всех возможностей рекомендуем разрешить серверу доступ в Интернет.»
Так же пропадёт список категорий приложений с помощью которого можно установить новые приложения. Установить новые приложения будет возможно, лишь, в ручную, скачав их с сайта магазина NC.
После всех операций над php-файлами не забываем рестартануть apache.
Cron
Как советуют в пункте «Фоновые задания»:
Для оптимальной производительности важно правильно настроить выполнение задач в фоновом режиме. Для крупных развёртываний рекомендуется использовать параметр «Cron».
и, дабы не получить сообщение об ошибке:
«Последнее задание было выполнено СТОЛЬКО-ТО часов назад. Похоже, что-то не в порядке.»
настроим cron на выполнение таких заданий в фоне.
Для этого выполним:
# crontab -u apache -e
В открывшемся редакторе добавим задание, которое будет выполняться каждые 15 минут.
*/15 * * * * php -f /var/www/htdocs/nextcloud/cron.php
В веб-интерфейсе выставим переключатель на «Cron».
Обновление
Обновление проходит быстро и не сложно. Главное, не забыть внести изменения в те файлы, которые изменялись в ручную до обновления (config.php к этому не относится), например, как ТУТ пункт 1.
Видео по обновлению.
- После обновления до 14+ версии получаем ошибки:
Исправляем:
# chmod +x /var/www/htdocs/nextcloud/occ # sudo -u apache /var/www/htdocs/nextcloud/occ db:add-missing-indices Check indices of the share table. Adding additional parent index to the share table, this can take some time... Share table updated successfully. Adding additional mtime index to the filecache table, this can take some time... Filecache table updated successfully.
Иногда, исправляется автоматически, после обновления и ошибки нет. Но, если ошибка появляется, как в моем случае, то в /var/www/htdocs/nextcloud/.htaccess добавляем строку Header set Referrer-Policy «no-referrer», в итоге получаем:
<IfModule mod_env.c> Header set Referrer-Policy "no-referrer" SetEnv front_controller_active true <IfModule mod_dir.c> DirectorySlash off </IfModule> </IfModule> </IfModule>
Всё, ошибки исправлены!
- После обновления до 15+ версии получаем ошибки:
Исправляем:
# chmod +x /var/www/htdocs/nextcloud/occ # sudo -u apache /var/www/htdocs/nextcloud/occ db:add-missing-indices Check indices of the share table. Adding additional parent index to the share table, this can take some time... Share table updated successfully. Adding additional mtime index to the filecache table, this can take some time... Filecache table updated successfully.
Переводим облако в режим «Обслуживания», для этого в /var/www/htdocs/nextcloud/config/config.php меняем 'maintenance' ⇒ false, на 'maintenance' ⇒ true, и запускаем исправление:
# # sudo -u apache /var/www/htdocs/nextcloud/occ db:convert-filecache-bigint Nextcloud is in maintenance mode - no apps have been loaded Following columns will be updated: * filecache.mtime * filecache.storage_mtime This can take up to hours, depending on the number of files in your instance! Continue with the conversion (y/n)? [n] y
По окончании меняем обратно 'maintenance' ⇒ false,.
Далее устанавливаем imagemagick.
# wget http://slackware.cs.utah.edu/pub/slackware/slackware64-14.2/slackware64/xap/imagemagick-6.9.4_9-x86_64-1.txz # upgradepkg --install-new ./imagemagick-6.9.4_9-x86_64-1.txz # sbopkg -i php-imagick
В /etc/php.d/imagick.ini убираем знак комментария с extension=imagick.so и рестартуем сервисы:
# /etc/rc.d/rc.httpd restart # /etc/rc.d/rc.php-fpm restart
Всё, ошибки исправлены!
HTTPS
У нас остались две, не исправленные, ошибки. Одна об использовании HTTPS вместо HTTP и другая о незащищённости файла .htaccess. Исправляем обе сразу.
Сначала, необходимо прописать наш домен в DNS. Это делается у хостеров, провайдеров, регистраторов и т.д., там где у вас есть права на изменения записей в DNS. Для возможности редактировать офисные документы прямо в облаке необходим отдельный поддомен, например office, который я тоже добавлю в DNS так как позже расскажу подробней о такой возможности. (Кусок конфигурации зоны в bind для домена my-cloud.ru)
$TTL 86400 @ IN SOA my-cloud.ru. it.my-cloud.ru. ( ... ... ) ... ... @ IN A 77.77.77.77 www IN CNAME @ office IN CNAME @ ...
На шлюзе пробросим порты 80, 443 и 9980 (для редактора офисных документов) на наш сервер с nextcloud.
$IPTABLES -t nat -A PREROUTING -d $INET_IP -p tcp -m multiport --dport 80,443,9980 -j DNAT --to-destination 192.168.10.217 $IPTABLES -I FORWARD 1 -i $INET_IFACE -o $LAN_IFACE -d 192.168.10.217 -p tcp -m multiport --port 80,443,9980 -j ACCEPT
Смотрим, знает ли о нашем домене «мировое сообщество» :)
# nslookup my-cloud.ru ... ... Non-authoritative answer: Name: my-cloud.ru Address: 77.77.77.77
Знает!
Устанавливаем необходимые пакеты для получения бесплатных сертификатов от центра сертификации Let's Encrypt при помощи Certbot.
# sbopkg -Bki "configobj pbr mock psutil pyrfc3339 \ python-configargparse python-parsedatetime \ python2-pythondialog werkzeug zope.component \ ndg_httpsclient python-augeas pytz python-requests \ josepy pyparsing zope.interface cffi pycparser cryptography \ zope.event python-future six pyOpenSSL ipaddress \ enum34 asn1crypto idna python-certifi \ python-urllib3 python-chardet requests-toolbelt \ augeas funcsigs letsencrypt"
Теперь, настраиваем apache.
Создадим файл /etc/httpd/extra/vhosts-mycloud.conf со следующим содержимым:
# Nextcloud <VirtualHost *:80> ServerAdmin it@my-cloud.ru ServerName my-cloud.ru ServerAlias *.my-cloud.ru DocumentRoot "/var/www/htdocs/nextcloud" <Directory "/var/www/htdocs/nextcloud"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> ErrorLog "/var/log/httpd/my-cloud-error_log" CustomLog "/var/log/httpd/my-cloud-access_log" common </VirtualHost>
И допишем в конец файла /etc/httpd/httpd.conf
include /etc/httpd/extra/vhosts-mycloud.conf
Перезапустим apache и войдём в браузере по адресу http://my-cloud.ru, и тут же получим ошибку:
Можно нажать на кнопку с предложением о добавлении нашего домена как доверенного в config.php, но не будем этого делать, так как для корректной и безошибочной работы, нужно добавить IP-адрес шлюза и внешний IP-адрес как доверенные. Поэтому, лучше сами отредактируем файл /var/www/htdocs/nextcloud/config/config.php изменив два параметра.
'trusted_domains' => array ( 0 => '192.168.10.217', 1 => '192.168.10.1', 2 => '77.77.77.77', 3 => 'my-cloud.ru', 4 => 'www.my-cloud.ru', ), 'overwrite.cli.url' => 'https://my-cloud.ru',
После внесённых изменений перезапустим apache и ещё раз войдём в браузере по адресу http://my-cloud.ru, теперь ошибок не будет, появится приглашение для ввода логина и пароля.
Теперь получим сертификаты для доменов my-cloud.ru и для www.my-cloud.ru.
# certbot certonly --webroot -w /var/www/htdocs/nextcloud -d my-cloud.ru -d www.my-cloud.ru Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator webroot, Installer None Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): it@my-cloud.ru ------------------------------------------------------------------------------- Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v01.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for my-cloud.ru http-01 challenge for www.my-cloud.ru Using the webroot path /var/www/htdocs/nextcloud for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/my-cloud.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/my-cloud.ru/privkey.pem Your cert will expire on 2018-09-27. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Сертификаты для поддомена office.my-cloud.ru получим отдельно, иначе, если захотим, не будет работать HTTP2.
# certbot certonly --webroot -w /var/www/htdocs/nextcloud -d office.my-cloud.ru ... Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/office.my-cloud.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/office.my-cloud.ru/privkey.pem ...
Сертификаты получили. Теперь надо сообщить apache об их расположении и настроить его на работу по HTTPS. Для этого, в файле /etc/httpd/httpd.conf уберём знак комментария в некоторых местах.
LoadModule socache_shmcb_module lib64/httpd/modules/mod_socache_shmcb.so LoadModule ssl_module lib64/httpd/modules/mod_ssl.so Include /etc/httpd/extra/httpd-ssl.conf
В файле /etc/httpd/extra/httpd-ssl.conf закомментируем весь блок <VirtualHost> и изменим файл /etc/httpd/extra/vhosts-mycloud.conf
# Добавим этот блок для автоматической смены http на https <VirtualHost *:80> RewriteEngine on ReWriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] </VirtualHost> # Nextcloud # сменим порт 80 на 443 <VirtualHost *:443> ServerAdmin it@my-cloud.ru ServerName my-cloud.ru ServerAlias www.my-cloud.ru DocumentRoot "/var/www/htdocs/nextcloud" <Directory "/var/www/htdocs/nextcloud"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> # Указываем расположение сертификатов SSLCertificateFile /etc/letsencrypt/live/my-cloud.ru/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/my-cloud.ru/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/my-cloud.ru/chain.pem # Добавляем блок для правильной обработки заголовков <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" </IfModule> ErrorLog "/var/log/httpd/my-cloud-error_log" CustomLog "/var/log/httpd/my-cloud-access_log" common </VirtualHost>
Перезапустим apache и введя в браузере my-cloud.ru мы сразу попадём на страничку приглашения ввода логина и пароля, а в адресной строке увидим https://my-cloud.ru.
Теперь, зайдя на страничку основных настроек, в «Предупреждения безопасности и установки» ошибок не будет.
Когда же мы исправили ошибку о незащищённости файла .htaccess? ;)
Когда правильно описали блок <Directory> в файле /etc/httpd/extra/vhosts-mycloud.conf
Но на этом настройка сертификатов ещё не закончена. Так как бесплатные сертификаты выдаются, лишь, на три месяца, нужно настроить их автоматическое обновление.
Для начала, нужно проверить, а будут ли наши сертификаты обновлены. Для этого симулируем процесс обновления:
# certbot renew --dry-run ... ... Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/my-cloud.ru/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) ... ...
Всё прошло успешно. Добавим в cron задание на ежедневную проверку сертификатов в 00:01
01 00 * * * /usr/bin/certbot renew 1> /dev/null
Тюнинг
Наш сервер облачного хранилища, практически, готов к использованию. Можно добавлять пользователей и смело оперировать файлами и каталогами. Но, как оказалось на практике, всё, что было сделано выше, не достаточно для комфортной работы, особенно, в корпоративной среде. Использовать нижеописанное или нет, дело сугубо личное.
HTTP/2.0
Как говорится в документации Nextcloud, использование HTTP2 должно ускорить работу облачного хранилища. Я особого прироста к скорости не заметил, правда, не делал каких-то особых тестов, только визуально. Тем не менее, HTTP2 я включил и оставил.
По умолчанию, поддержка HTTP2 не включена в стоковом пакете apache дистрибутива Slackware Linux 14.2. Поэтому, нам необходимо собрать его снова, включив HTTP2.
Сначала соберём и установим, при помощи sbopkg, пакет nghttp2 и jansson.
Смотрим последнюю версию nghttp2 на https://github.com/nghttp2/nghttp2/releases и меняем её в SlackBuild'e и Info. Версию jansson можно оставить. После того, как оба пакета собрались и установились, скачиваем SlackBuild и причитающееся для сборки apache, а так же последнюю версию его исходников (на момент написания статьи - 2.4.33).
# wget -r -nd -np -R index*,httpd-2.4* -e robots=off https://mirror.slackbuilds.org/slackware/slackware64-14.2/source/n/httpd/ # wget http://apache-mirror.rbc.ru/pub/apache//httpd/httpd-2.4.33.tar.bz2
В httpd.SlackBuild добавляем к configure параметр --enable-http2 и запускаем сборку, а по окончании, обновляем установленный пакет.
# chmod +x ./httpd.SlackBuild # ./httpd.SlackBuild ... Slackware package /tmp/httpd-2.4.33-x86_64-1.txz created. # /etc/rc.d/rc.httpd stop # upgradepkg /tmp/httpd-2.4.33-x86_64-1.txz ... Package httpd-2.4.29-x86_64-1_slack14.2 upgraded with new package /tmp/httpd-2.4.33-x86_64-1.txz.
В файле /etc/httpd/http.conf добавляем загрузку нужного модуля.
LoadModule http2_module lib64/httpd/modules/mod_http2.so
И изменим файл /etc/httpd/extra/vhosts-mycloud.conf добавив блок:
<IfModule http2_module> Protocols h2 h2c http/1.1 H2Direct on </IfModule>
Этот блок нужно добавить во все директивы <VirtualHost> в которых планируется использование HTTP2. Запускаем apache.
# /etc/rc.d/rc.httpd start
Заходим в наше облако и в файле /var/log/httpd/my-cloud-access_log видим:
"GET /index.php/settings/admin HTTP/2.0" 200 31952 "GET /index.php/avatar/admin/32?v=0 HTTP/2.0" 304 - "GET /index.php/apps/theming/js/theming?v=0 HTTP/2.0" 200 382
Будет ошибка - Misdirected Request.
PHP-FPM
В отличи от HTTP2, использование PHP-FPM дал заметный прирост в скорости. Так как он идёт в составе PHP пакета, то его надо, лишь, запустить и указать apache, что работать надо не с mod_php, а c php-fpm.
# chmod +x /etc/rc.d/rc.php-fpm # /etc/rc.d/rc.php-fpm start
В /etc/httpd/httpd.conf комментируем строчку:
#include /etc/httpd/mod_php.conf
В директиве <VirtualHosts> добавляем блок:
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
и перезапускаем apache
# /etc/rc.d/rc.httpd restart
Если в /var/log/php-fpm.log появится ошибки,
server reached pm.max_children setting (5), consider raising it
seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)
то нужно увеличить кол-во параллельных процессов php, в файле /etc/php-fpm.conf.
Эти процессы задаются переменными:
- pm.max_children - максимальное количество дочерних процессов
- pm.start_servers - количество процессов при старте
- pm.min_spare_servers - минимальное количество процессов, ожидающих соединения
- pm.max_spare_servers - максимальное количество процессов, ожидающих соединения
Для того, чтобы придать этим переменным правильное значение, сначала, выясним среднее значение памяти на один php-fpm процесс.
# ps -ylC php-fpm --sort:rss S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD S 0 3397 1 0 80 0 20092 190138 ep_pol ? 00:00:00 php-fpm S 80 3401 3397 0 80 0 57856 192027 inet_c ? 00:00:06 php-fpm S 80 3399 3397 0 80 0 57884 192059 inet_c ? 00:00:06 php-fpm S 80 3398 3397 0 80 0 59900 192069 inet_c ? 00:00:07 php-fpm S 80 3400 3397 0 80 0 62724 211134 inet_c ? 00:00:06 php-fpm
Нас интересует столбец RSS, который показывает значения потребляемой памяти в Килобайтах. Возьмём среднее значение равное 60 Мб. Учитывая то, что из имеющихся 16 Гб ОЗУ, я готов отдать под процессы php-fpm 10 Гб, получим - 10000/60≈166 дочерних процессов я могу использовать. Округлим это число до 150 и присвоим его переменной pm.max_children.
Значение переменной min_spare_servers можно начать с расчёта из количества ядер процессора умноженное на 2. У меня 4-ядерный процессор, поэтому начнём со значения 8. Значение переменной max_spare_servers можно начать с расчёта из количества ядер процессора умноженное на 4. У меня 4-ядерный процессор, поэтому начнём со значения 16. Далее следим за потребляемой памятью и нагрузкой на процессор, в том же htop, например. И, в зависимости от результатов, уменьшаем или увеличиваем значения.
Значение переменной start_servers=(pm.min_spare_servers+pm.max_spare_servers)/2. В нашем случае получаем 12.
И добавим pm.max_requests = 1000 для ограничения максимального количества запросов, которое обработает дочерний процесс, прежде чем будет уничтожен. На всякий случай, для устранения утечек памяти.
pm.max_children = 150 pm.start_servers = 12 pm.min_spare_servers = 8 pm.max_spare_servers = 16 pm.max_requests = 1000
После любых изменений в файле /etc/php-fpm.conf не забываем рестарт php-fpm.
# /etc/rc.d/rc.php-fpm restart
На самом деле, всё настройки очень индивидуальны и подбираются, часто, методом сравнительного анализа. Меня эти устроили, так и оставил.
Загрузка больших файлов
Настройка максимального размера выгружаемого файла производится в двух местах:
в веб-интерфейсе;
и в файле /var/www/htdocs/nextcloud/.htaccess при использовании mod_php в директивах <IfModule mod_php7.c> или <IfModule mod_php5.c> в зависимости от версии PHP,
php_value upload_max_filesize 12G php_value post_max_size 12G php_value memory_limit 2G
либо в файле /var/www/htdocs/nextcloud/.user.ini при использовании php-fpm.
upload_max_filesize=12G post_max_size=12G memory_limit=2G
Почта
Для того, чтобы можно было получать уведомления от сервисов NC на свой адрес электронной почты, его необходимо внести в разделе «Личное» → «Личная информация» поле «E-mail» или в настройках пользователей.
И настроить или указать почтовый сервер через который будут отправляться письма в том же разделе, где мы настраивали максимальный размер выгружаемого файла, «Настройка»→«Дополнительные настройки» в разделе «Администрирование».
Есть три способа отправки: SMTP, PHP и Sendmail.
SMTP самый простой и, в данном случае, самый правильный способ, поскольку почтовый сервер находится не на том же компьютере, что и NC.
Если вы захотите использовать вариант PHP или Sendmail, то необходимо наличие почтового сервера на одном компьютере с NC. Это может быть и Postfix, и Exim, и даже, обычный, SSMTP, но их надо настраивать отдельно, а это уже другие статьи :).
Заполнив все поля, нажимаем кнопку «Отправить сообщение». И, если всё настроено правильно, то на указанную в личных настройках почту, придёт письмо с текстом - «Если вы получили это сообщение, значит электронная почта настроена правильно.»
Office
Для возможности редактировать офисные документы прямо в нашем облаке, есть 2 приложения в магазине NC. Это Onlyoffice и Collabore office.
Подробное различие описывалось ТУТ. Я не изучал плюсы и минусы, но вот, что заметил:
у Onlyoffice более дружелюбный интерфейс и больше функционала, но он работает только с файлами OOXML (docx, xlsx, pptx). Правда, файлы старых версий MS Office (doc, xls, ppt) и файлы формата ODF (odt, ods, odp) он может сконвертировать в OOXML создав, тем самым, копию оригинала. Но, если у вас много файлов, то постоянно отвечать на вопрос о конвертации и иметь копии этих файлов, очень не удобно. Так же его установка весьма не тривиальная задача, особенно, если дело связано с сертификатами, а оно связано.
Поэтому для своего облака я выбрал Collabore office, основанный на libreoffice. Весьма прост как в интерфейсе, так и в установке. Но основных функций, для моментального просмотра-редактирования документов прямо в облаке, достаточно.
Я честно пытался собрать его отдельным пакетом, но множество зависимостей GO меня доконала и я решил использовать контейнер.
Для работы с контейнерами установим и запустим Docker. На момент написания статьи, это docker версии 18.03.1.
# wget http://slackware.su/forum/files/nc/docker.tar.gz # tar xf ./docker.tar.gz # wget https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz # tar -zxvf ./docker-18.03.1-ce.tgz --strip-components=1 -C ./docker/usr/bin/ docker/ # cd docker # makepkg -l y -c n /tmp/docker-18.03.1-ce-x86_64-1.txz ... Slackware package /tmp/docker-18.03.1-ce-x86_64-1.txz created. # upgradepkg --install-new /tmp/docker-18.03.1-ce-x86_64-1.txz ... Package docker-18.03.1-ce-x86_64-1.txz installed. # /etc/rc.d/rc.docker start Starting dockerd ...
Не забываем прописать в /etc/rc.d/rc.local запуск docker'а.
Проверим версию.
# docker -v Docker version 18.03.1-ce, build 9ee9f40
Проверим работу:
# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 9db2ca6ccae0: Pull complete Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/
Всё работает. Удалим не нужный образ. Для это сначала узнаем ID контейнера.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ab7ae81e8f19 hello-world "/hello" 4 minutes ago Exited (0) 3 minutes ago dreamy_benz
Остановим этот контейнер (для остановки всех контейнеров можно написать docker stop $(docker ps -qa) ).
# docker stop ab7ae81e8f19 ab7ae81e8f19
Удалим этот контейнер (для удаления всех контейнеров можно написать docker rm -f $(docker ps -qa) ).
# docker rm -f ab7ae81e8f19 ab7ae81e8f19
И, теперь, удалим сам образ.
# docker rmi -f hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc Deleted: sha256:2cb0d9787c4dd17ef9eb03e512923bc4db10add190d3f84af63b744e353a9b34 Deleted: sha256:ee83fc5847cb872324b8a1f5dbfd754255367f4280122b4e2d5aee17818e31f5
Проверили, docker работает. Теперь установим и запустим контейнер Collabore office (CODE).
# docker pull collabora/code ... Status: Downloaded newer image for collabora/code:latest # docker run -t -d -p 192.168.10.217:9980:9980 -e 'domain=my-cloud\\.ru' --restart always --name=Collabora-online --cap-add MKNOD collabora/code e8da1ab7385cebba6f63a062d3f082aed24cd8de24eb44e1fc8aaab1b84ef819 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e8da1ab7385c collabora/code "/bin/sh -c 'bash st…" 9 seconds ago Up 9 seconds 192.168.10.217:9980->9980/tcp Collabora-online
Теперь используем ранее созданный поддомен office и его сертификаты, добавив в файл /etc/httpd/extra/vhosts-mycloud.conf ещё одну директиву <VirtualHost>:
# Для работы Office в Облаке <VirtualHost *:443> ServerName office.my-cloud.ru # Если будем использовать HTTP2 <IfModule http2_module> Protocols h2 h2c http/1.1 H2Direct on </IfModule> # Указываем сертификаты SSLCertificateFile /etc/letsencrypt/live/office.my-cloud.ru/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/office.my-cloud.ru/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/office.my-cloud.ru/chain.pem # Для Callobora office (CODE) SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:\ ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:\ DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:\ ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:\ DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:\ AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS SSLHonorCipherOrder on # Разрешаем кодированные слэши AllowEncodedSlashes NoDecode # Контейнер для использвония уникального не подписанного сертификата SSLProxyEngine On SSLProxyVerify None SSLProxyCheckPeerCN Off SSLProxyCheckPeerName Off # Сохраняем host в заголовке при проксировании. ProxyPreserveHost On # Статические html, js, изображения и т.д., полученные от LibreOffice Online # демона loolwsd и клиента loleaflet. ProxyPass /loleaflet https://192.168.10.217:9980/loleaflet retry=0 ProxyPassReverse /loleaflet https://192.168.10.217:9980/loleaflet # URL-адрес обнаружения WOPI. ProxyPass /hosting/discovery https://192.168.10.217:9980/hosting/discovery retry=0 ProxyPassReverse /hosting/discovery https://192.168.10.217:9980/hosting/discovery # Главный websocket. ProxyPassMatch "/lool/(.*)/ws$" wss://192.168.10.217:9980/lool/$1/ws nocanon # websocket консоли администратора ProxyPass /lool/adminws wss://192.168.10.217:9980/lool/adminws # Загрузка как полноэкранных презентаций, так и изображений ProxyPass /lool https://192.168.10.217:9980/lool ProxyPassReverse /lool https://192.168.10.217:9980/lool ProxyPass "/" "https://192.168.10.217:9980/" ProxyPassReverse "/" "https://192.168.10.217:9980/" # Если используем php-fpm <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> # Логи ErrorLog "/var/log/httpd/office-error_log" CustomLog "/var/log/httpd/office-access_log" common </VirtualHost>
После внесения изменений, рестарт web-сервер и docker.
# /etc/rc.d/rc.httpd restart # /etc/rc.d/rc.docker restart
При вводе в адресной строке браузера https://office.my-cloud.ru должны увидеть - OK.
Осталось настроить Nextcloud для работы с Callobora office.
LDAP пользователи
В создании новых пользователей и групп, в самом Nextcloud, нет ничего сложного. Перейдя в пункт «Пользователи» интуитивно понятно, что и как делать. Если же Nextcloud будет использовать для аутентификации пользователей какой-либо LDAP-сервер, то настройка будет немного сложней. Я приведу пример настройки Nextcloud для работы с AD (Samba, Windows).
Исходные данные:
Домен - mydom.lan
Сервер с AD - 192.168.10.244;
порт стандартный - 389;
Отдельная группа в AD для работы с облаком - Cloud-users;
Отдельное подразделение в AD для работы с облаком - Cloud (здесь же расположена группа Cloud-users);
Существующее подразделение в AD для IT отдела - IT;
Пользователи в подразделении IT - adreader, graf, 4test (они же члены группы Cloud-users).
Для начала нам необходимо включить приложение «LDAP user and group backend». Для этого переходим в «Приложения» → «Отключённые приложение» и включаем приложение «LDAP user and group backend». Если его там нет, то просто включаем его в магазине Nextcloud.
Теперь переходим в «Настройки» → «Интеграция LDAP / AD» и заполняем соответствующие поля данными. Для чтения параметров AD я создал отдельного пользователя adreader в подразделении IT, которого тут и буду использовать. Если сомневаетесь в правильности атрибутов, то их можно посмотреть:
на сервере с Samba AD
# samba-tool spn list adreader adreader User CN=adreader,OU=IT,DC=mydom,DC=lan
на сервере с Windows AD
C:\> dsquery user -name adreader "CN=adreader,OU=IT,DC=mydom,DC=lan"
После ввода данных кликаем на «Сохранить учётные данные» и «Проверить базу поиска DN». Должны увидеть зелёный шарик и надпись «Конфигурация в порядке».
Теперь перейдём на вкладку «Дополнительно» → «Настройки подключения». Ставим галку напротив «Конфигурация активна» и «Отключить проверку сертификата SSL» (наш DC не использует SSL/TLS).
Тут же переходим в «Настройки каталога». Указываем базу дерева пользователей и групп, мы будем искать их по всему каталогу. Меняем «Ассоциация Группа-Участник» на «member (AD)» и разрешаем вложенные группы.
Здесь же переходим в «Специальные атрибуты» и указываем «Поле адреса email».
Далее переходим во вкладку «Эксперт» и в поле «Атрибут для внутреннего имени» вписываем «sAMAccountName».
Теперь настроим группы. Переходим на вкладку «Группы», кликаем «Изменить запрос LDAP», на вопрос о переключении режима отвечаем «ДА». В «Только эти классы объектов» выбираем «group» и перебрасываем группу Cloud-users из левого столбца в правый. После, кликаем на «Проверить настройки и пересчитать группы», должно показать кол-во групп
(у меня одна).
Настраиваем фильтр пользователей. Переходим во вкладку «Пользователи» и кликаем на «Изменить запрос LDAP», на вопрос о переключении режима отвечаем «ДА». В «Только эти классы объектов» выбираем «person, user» и перебрасываем группу Cloud-users из левого столбца в правый. Кликаем на «Проверить настройки и пересчитать пользователей», должно показать кол-во пользователей в группе (у меня 3).
А теперь, настроим вход в Nextcloud. Переходим на вкладку «Учетные данные», выбираем место, где Nextcloud будет искать пользователей, в нашем случае - «Имя пользователя LDAP/AD». В соответствующее поле вводим имя пользователя из группы Cloud-users и кликаем на «Проверить настройки». Вверху должна появиться надпись «Пользователь найден и настройки проверены».
И в заключении, ещё раз переходим на вкладку «Эксперт» и кликаем на «Проверить конфигурацию». Вверху должна появиться надпись -«Конфигурация настроена верно, связь установлена!».
Всё! Теперь можно входить в Nextcloud под пользователем домена. В данном примере, под теми пользователями, которые указаны в группе Cloud-users.
Samba каталоги
Для чего это нужно?
Для того, чтобы иметь доступ к файлам расположенным, например, на файловом сервере.
И, для начала, установим php-модуль smbclient при помощи библиотеки расширений pecl.
# pecl install smbclient
Пропишем модуль в понятном PHP месте. Хотя, можно прописать непосредственно в /etc/php.ini, в секцию «Dynamic Extensions», но не будем его «загрязнять».
# echo "extension=smbclient.so" > /etc/php.d/smbclient.ini
WebDAV
Давайте подключим наш сервер облачного хранилища по WebDAV, как сетевой ресурс для пользователя graf.
- Windows:
просто подключив сетевой диск, введя адрес сервера и пароль пользователя NC.
Либо, в консоли:
net use Z: https://my-cloud.ru/remote.php/dav/files/graf/ /user:graf ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_graf
- Linux GUI:
На примере диспетчера файлов, Dolphin. Заходим в Сеть → Добавить сетевую папку → Веб-папка
Нажимаем кнопку «Далее».
Вводим необходимые данные и нажимаем на «Сохранить и подключиться». Появляется запрос пароля, вводим его и подключаемся.
Появляется сетевой ресурс с которым работаем, как с обычным каталогом.
- Linux консоль:
Для того, чтобы примонтировать наше облако в консоли, для начала, необходимо установить davfs2, создав, до этого, специальную группу и пользователя.
# groupadd -g 230 davfs2 # useradd -u 230 -d /var/cache/davfs2 -g davfs2 -s /bin/false davfs2 # sbopkg -Bi davfs2
Затем, пользователя graf добавить в группу davfs2. Создать каталог для монтирования и файл в скрытой директории, в котором будут записаны данные для подключения.
# usermod -aG davfs2 graf # mkdir /home/graf/mycloud # mkdir /home/graf/.davfs2 # cp /etc/davfs2/secrets /home/graf/.davfs2/secrets
Теперь пропишем в файл /home/graf/.davfs2/secrets строку
https://my-cloud.ru/remote.php/dav/files/graf/ graf ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_graf
и обезопасим его.
# chown graf /home/graf/.davfs2/secrets # chmod 600 /home/graf/.davfs2/secrets
Для автоматического монтирования при логине, добавим в /etc/fstab строчку.
https://my-cloud.ru/remote.php/dav/files/graf/ /home/graf/mycloud davfs user,rw,auto 0 0
Заходим пользователем graf и пробуем монтировать:
$ mount ~/mycloud/
В /home/graf/mycloud должен примонтироваться облачный ресурс пользователя graf.
Но, если на компьютере больше одного пользователя, лучше монтировать или вручную,
# mount -t davfs https://my-cloud.ru/remote.php/dav/files/graf/ /home/graf/mycloud Please enter the username to authenticate with server https://my-cloud.ru/remote.php/dav/files/graf/ or hit enter for none. Username: graf Please enter the password to authenticate user graf with server https://my-cloud.ru/remote.php/dav/files/graf/ or hit enter for none. Password:
или добавить эту строчку в скрипт автозапуска.