Nextcloud
Данная статья описывает частные случаи установки Nextcloud, наиболее правильный способ его установки описан в документации дистрибутива, например в Руководстве пользователя Альт Сервер 10.1
Что такое Nextcloud
Nextcloud — веб-приложение для синхронизации данных, общего доступа к файлам и удалённого хранения документов в «облаке». Файлы Nextcloud хранятся в обычных структурах каталогов и могут быть доступны через WebDAV, если это необходимо. Основной сайт проекта: https://nextcloud.com/. Nextcloud можно установить при установке ALT Linux Server 10.1, выбрав для установки пункт Сервер Nextcloud (подробнее описано в главе Установка системы).
- Руководство пользователя Альт Сервер 10.1
- Сайт: https://nextcloud.com (документация)
- Лицензия: AGPL-3.0
Установка Nextcloud
Установить Nextcloud можно из репозитория или с официального сайта, если не устраивает версия из репозитория.
В данной статье рассмотрена установка Nextcloud на сервер c Apache2.
php<мажорная>.<минорная версии>-<имя модуля>
Из репозитория можно установить и эксплуатировать в одной системе одновременно разные версии php. В данном руководстве в качестве примера для p10 используется php8.0.С официального сайта с сервером Apache2 (с помощью веб-установщика)[1]
Подготовка окружения
Для работы Nextcloud нужен настроенный веб-сервер. Потребуется установить следующие пакеты[2][3]:
# apt-get install apache2 apache2-mod_ssl tzdata php8.0
# apt-get install php8.0-{curl,dom,fileinfo,gd2,gmp,imagick,intl,libs,mbstring,memcached,openssl,pcntl,pdo-driver,xmlreader,zip}
Список устанавливаемых пакетов можно уточнить, ориентируясь на зависимости пакетов из репозитория:[4]
$ apt-cache depends nextcloud nextcloud-apache2
Разрешим нужные модули Apache2:
# for mod in dir env headers mime rewrite ssl; do a2enmod $mod; done
Запустим веб-сервер Apache2 и добавим его в автозагрузку:
# systemctl enable --now httpd2
Установка c сайта Nextcloud [5]
изменит строчку /var/www/html на /usr/share/doc/indexhtml/
Проверить командой grep:
# grep DocumentRoot /etc/httpd2/conf/sites-available/default.conf
# DocumentRoot: The directory out of which you will serve your
'''DocumentRoot "/usr/share/doc/indexhtml/"'''
# This should be changed to whatever you set DocumentRoot to.
# Summary: Configure for html documents in DocumentRoot
# access content that does not live under the DocumentRoot.
Если строчка DocumentRoot не содержит /var/www/html, скомандуйте:
sed -i "s|/usr/share/doc/indexhtml|/var/www/html|" /etc/httpd2/conf/sites-available/{default,default_https}.conf
У веб-сервера должны быть права на запись в каталог с файлом setup-nextcloud.php.
Права можно назначить, временно, добавив пользователя apache2 в группу webmaster:
# usermod -a -G webmaster apache2
# systemctl restart httpd2
Зайдите на сайт https://nextcloud.com/install/ в раздел Download -> Web-installer и скачайте в корень вашего веб-сервера /var/www/html файл setup-nextcloud.php:
# cd /var/www/html/
# wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
Далее переходим по ссылке http://your_web_server_adress/setup-nextcloud.php и следуем инструкциям установщика.
По умолчанию Nextcloud устанавливается в подкаталог /var/www/html/nextcloud: После установки удалим пользователя apache2 из группы webmaster:
# gpasswd -d apache2 webmaster
Для завершения установки необходимо создать учетную запись администратора Nextcloud и выбрать тип используемой БД (см. Nextcloud#Завершение установки).
Рекомендации по безопасности
Также рекомендуется сменить владельца файлов nextcloud на root, оставив Apache2 доступ на запись к каталогам data, config, apps:
# chown -R root /var/www/html/nextcloud/
# chown -R apache2 /var/www/html/nextcloud/{apps,config,data}/
Из репозитория
Используя Deploy
Развернуть Nextcloud можно используя пакет deploy (см. Deploy):
# apt-get install deploy
# deploy nextcloud
Nextcloud будет установлен в /var/www/webapps/nextcloud, веб-интерфейс будет доступен по ссылке:
http://localhost/nextcloud
Пользователь: ncadmin
Установить пароль пользователю ncadmin (пароль должен быть достаточно сложным и содержать не менее 10 символов):
# deploy nextcloud password=5Z4SAq2U28rWyVz
По шагам
Установить Nextcloud и все необходимые для его работы модули можно командой:
apt-get install nextcloud nextcloud-apache2
Частью установки пакета nextcloud-apache2 является файл настроек виртуального хоста nextcloud. Менять его под свои нужды следует здесь: /etc/httpd2/conf/sites-available/nextcloud.conf. Также он автоматически включает этот хост в разрешенные и включает все необходимые для оптимальной работы сервиса модули apache2.
Запустить веб-сервер Apache2 и добавить его в автозагрузку:
systemctl enable --now httpd2
Nextcloud будет установлен в /var/www/webapps/nextcloud, файл конфигурации — /var/www/webapps/nextcloud/config/config.php.
Веб-интерфейс будет доступен по ссылке http://your_web_server_adress/nextcloud
Для установки Nextcloud с веб-сервером nginx:
- в p10:
# apt-get install nextcloud nextcloud-nginx php8.0-{fpm-fcgi,apcu} # systemctl enable --now php8.0-fpm
- в p9:
# apt-get install nextcloud nextcloud-nginx php7-{fpm-fcgi,apcu} # systemctl enable --now php7-fpm
Пакет nextcloud-nginx включает файл настроек виртуального хоста nextcloud. Изменить его под свои нужды можно здесь — /etc/nginx/sites-available.d/nextcloud.conf.
В p10 в файле /etc/nginx/sites-available.d/nextcloud.conf необходимо изменить строку (см.https://bugzilla.altlinux.org/43892):
server unix:/var/run/php7-fpm/php7-fpm.sock;
на
server unix:/var/run/php8.0-fpm/php8.0-fpm.sock;
Включить виртуальный хост и запустить веб-сервер:
# ln -s /etc/nginx/sites-available.d/nextcloud.conf /etc/nginx/sites-enabled.d/
# systemctl enable --now nginx
Останется зайти на веб-интерфейс Nextcloud и завершить установку.
Обновление мажорных версий
По умолчанию непоследовательное обновление мажорных версий запрещено (например, с версии 20 сразу до 22), и при попытке доступа к web интерфейсу после обновления пакета будет возникать ошибка "Exception: Updates between multiple major versions and downgrades are unsupported". Для того, чтобы обойти эту ошибку, продолжить обновление и получить доступ к web интерфейсу, можно сделать следующее. В файле /var/www/webapps/nextcloud/config/config.php в параметре 'version' изменить старую версию на новую. Затем снова перейти в web интерфейс, обновить страницу и обновление должно продолжиться.
Завершение установки
Для завершения установки необходимо создать учетную запись администратора Nextcloud и выбрать тип используемой БД (по умолчанию SQLite).
SQLite
Если будет использоваться база данных SQLite (для крупных проектов рекомендуется выбрать другой тип базы данных), создайте учетную запись администратора Nextcloud, заполнив поля «Имя пользователя» и «Пароль», и нажмите кнопку «Завершить установку»:
MySQL/MariaDB для Nextcloud
Если будет использоваться база данных MySQL/MariaDB :
- Установить необходимые пакеты для MySQL или для MariDB (php7-pdo_mysql - для p9):
# apt-get install MySQL[mariadb]-server php8.0-pdo_mysql
- Запустить сервер mysqld и добавить его в автозагрузку:
# systemctl enable --now mysqld (mariadb.service)
- Создать базу данных для Nextcloud:
- авторизоваться на сервере баз данных
$ mysql -u root
- если пароль пользователя root@localhost в MySQL установлен, ввести команду:
$ mysql -u root -p Enter password:
- Выполнить команды для создания базы данных nextcloud и пользователя базы данных nextcloud с паролем nextpass:
MariaDB [(none)]> create user 'nextcloud'@'localhost' identified by 'nextpass'; MariaDB [(none)]> create database nextcloud default character set utf8 collate utf8_unicode_ci; MariaDB [(none)]> grant all privileges on nextcloud.* to nextcloud@localhost; MariaDB [(none)]> exit;
- авторизоваться на сервере баз данных
- В веб-интерфейсе Nextcloud создайте учетную запись администратора, заполнив поля «Имя пользователя» и «Пароль», раскройте список «Хранилище и база данных», выберите MySQL/MariaDB, и заполните поля подключения к базе данных, данными, которые использовались на этапе настройки базы данных. Для завершения установки нажмите кнопку «Завершить установку»:
PostgreSQL
# apt-get install postgresql9.6-server php7-pgsql php7-pdo_pgsql
Если будет использоваться база данных PostgreSQL:
- Установить необходимые пакеты для PostgreSQL:
# apt-get install postgresql14-server php8.0-pgsql php8.0-pdo_pgsql
- Подготовить к запуску и настроить службы PostgreSQL:
- создать системные базы данных:
# /etc/init.d/postgresql initdb
- включить по умолчанию и запустить службу:
# systemctl enable --now postgresql
- создать системные базы данных:
- Создать базу данных Nextcloud:
- создать пользователя nextcloud (пароль необходимо запомнить) и базу данных nextcloud (под правами root):
# su - postgres -s /bin/bash -c 'createuser --no-superuser --no-createdb --no-createrole --encrypted --pwprompt nextcloud' Введите пароль для новой роли: Повторите его: # su - postgres -s /bin/bash -c 'createdb -O nextcloud nextcloud'
- создать пользователя nextcloud (пароль необходимо запомнить) и базу данных nextcloud (под правами root):
- В веб-интерфейсе Nextcloud создайте учетную запись администратора, заполнив поля «Имя пользователя» и «Пароль», раскройте список «Хранилище и база данных», выберите PostgreSQL, и заполните поля подключения к базе данных, данными, которые использовались на этапе создания базы данных. Для завершения установки нажмите кнопку «Завершить установку».
Настройка кэширования
Далее необходимо настроить систему кэширования.
Установим следующие пакеты:
# apt-get install php7-apcu memcached php7-memcached
Добавляем службу memcached в автозагрузку и стартуем ее:
# systemctl enable --now memcached
Добавим в config.php (находится в папке /var/www/html/nextcloud/config/ или /var/www/webapps/nextcloud/config/ — при установке из репозитория) следующие строки:
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
array('localhost', 11211),
),
Создание самоподписных SSL сертификатов
Для правильной работы SSL нам необходимы SSL-сертификаты. Их можно купить или сгенерировать:
- Перейти в каталог /root/ssl:
mkdir -p /root/ssl && cd /root/ssl
- Создаем ключ корневого хранилища, наш самый главный ключ:
openssl genrsa -des3 -out nextcloud-domain-ca.key 2048
- Создаем и зашифровываем ключом корневого хранилища корневой сертификат, сертификат издателя сертификатов (при запросе «Common Name» необходимо указать IP или FQDN вашего сервера):
openssl req -new -x509 -days 3650 -key nextcloud-domain-ca.key -out nextcloud-domain-ca.crt
- Создаем ключ веб-сервера, который вы намерены защитить сертификатом:
openssl genrsa -des3 -out nextcloud.key 1024
- Создаем запрос на подписание сертификата веб-сервера (при запросе «Common Name» необходимо указать IP или FQDN вашего сервера):
openssl req -new -key nextcloud.key -out nextcloud.csr
- Создаем и подписываем сертификат веб-сервера, используя запрос на сертификат, корневой ключ и корневой сертификат:
openssl x509 -req -in nextcloud.csr -out nextcloud.crt -sha1 -CA nextcloud-domain-ca.crt -CAkey nextcloud-domain-ca.key -CAcreateserial -days 3650
- Apache2 будет требовать при запуске пароль к ключу веб-сервера. Если это вам не нужно, сделайте страховую копию ключа веб-сервера:
cp nextcloud.key nextcloud.key.dist
- и очистите пароль ключа веб-сервера командой:
openssl rsa -in nextcloud.key.dist -out nextcloud.key
- Создадим цепочку сертификатов CA-bundle:
cat nextcloud.crt nextcloud-domain-ca.crt > nextcloud.ca-bundle
- В итоге у нас будут следующие файлы:
nextcloud.crt — сертификат нашего сервера nextcloud.csr — запрос на сертификат nextcloud.key — ключ сертификата нашего сервера nextcloud.ca-bundle — ca-bundle файл нашего сайта nextcloud-domain-ca.crt — корневой сертификат nextcloud-domain-ca.key — ключ корневого сертификата
Конфигурационный файл Apache2
Теперь создадим конфигурационный файл нашего сайта и настроим SSL-доступ.
Включим 443 порт:
# a2enport https
Скопируем стандартный конфигурационный файл и назовём его nextcloud.conf:
# cd /etc/httpd2/conf/sites-available/
# cp default_https.conf nextcloud.conf
Ваш конфигурационный /etc/httpd2/conf/sites-available/nextcloud.conf файл должен содержать следующие строки (вместо ip-адреса можно указать DNS-имя):
<VirtualHost *:443>
DocumentRoot "/var/www/html/nextcloud" (завелось после правки в вид "/var/www/html")
ServerName 10.10.10.10:443
ServerAdmin webmaster@example.com
ErrorLog "/var/log/httpd2/error_log"
TransferLog "/var/log/httpd2/access_log"
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "/root/ssl/nextcloud.crt"
SSLCertificateKeyFile "/root/ssl/nextcloud.key"
SSLCertificateChainFile "/root/ssl/nextcloud.ca-bundle"
SSLCACertificateFile "/root/ssl/nextcloud-domain-ca.crt"
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
</IfModule>
<Directory /var/www/html/nextcloud>
AllowOverride All
</Directory>
</VirtualHost>
Так же можно настроить редирект с http на https добавив в файл конфигурации:
<VirtualHost *:80>
ServerName 10.10.10.10
Redirect permanent / https://10.10.10.10/
</VirtualHost>
Добавим наш сайт в разрешенные и перезапустим веб-сервер:
# a2ensite nextcloud
# systemctl restart httpd2
Теперь Nextcloud доступен по адресу https://10.10.10.10/ При первом заходе по https браузер будет ругаться на самоподписанный сертификат (ошибка SEC_ERROR_UNKNOWN_ISSUER) необходимо добавить его в исключения.
Collabora Online в Nextcloud
Описание
Collabora Online это мощный онлайн офисный пакет, основанный на LibreOffice, который позволяет работать со всеми основными офисными форматами (документы/таблицы/презентации) прямо в браузере.
Особенности:
- Базовое редактирование
- Поддержка документов:
- DOC, DOCX, PPT, PPTX, XLS, XLSX + ODF
- Импорт / Просмотр Visio, Publisher, + более 100
- WYSIWYG редактор
- Анонимное редактирование файлов доступных для общего пользования
Установка
Для работы Collabora Online необходимо установить docker-io и добавить сервис в автозапуск:
# apt-get install docker-io
# systemctl enable --now docker
Далее необходимо скачать образ Collabora Online с помощью docker:
# docker pull collabora/code
Запустить образ docker заменив имя домена на нужное, все точки '.' должны быть экранированны '//':
# docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=10\\.10\\.10\\.10' --restart always --cap-add MKNOD collabora/code
Далее надо настроить reverse proxy.
Загрузите необходимые модули:
# a2enmod proxy
# a2enmod proxy_wstunnel
# a2enmod proxy_http
# a2enmod ssl
После этого необходимо правильно сконфигурировать Apache2, мы запустим обратный-прокси на порту 4443. Так же его можно запустить на поддомене (например office.nextcloud.com).
Создадим в директории /etc/httpd2/conf/sites-available/ файл officenextcloud.conf следующего содержания:
<VirtualHost *:4443>
ServerName 10.10.10.10:4443
# SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
SSLEngine on
SSLCertificateFile "/root/ssl/nextcloud.crt"
SSLCertificateKeyFile "/root/ssl/nextcloud.key"
SSLCertificateChainFile "/root/ssl/nextcloud.ca-bundle"
SSLCACertificateFile "/root/ssl/nextcloud-domain-ca.crt"
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
# Encoded slashes need to be allowed
AllowEncodedSlashes NoDecode
# Container uses a unique non-signed certificate
SSLProxyEngine On
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
# keep the host
ProxyPreserveHost On
# static html, js, images, etc. served from loolwsd
# loleaflet is the client part of LibreOffice Online
ProxyPass /loleaflet https://127.0.0.1:9980/loleaflet retry=0
ProxyPassReverse /loleaflet https://127.0.0.1:9980/loleaflet
# WOPI discovery URL
ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery
# Main websocket
ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon
# Admin Console websocket
ProxyPass /lool/adminws wss://127.0.0.1:9980/lool/adminws
# Download as, Fullscreen presentation and Image upload operations
ProxyPass /lool https://127.0.0.1:9980/lool
ProxyPassReverse /lool https://127.0.0.1:9980/lool
</VirtualHost>
<IfModule ssl_module>
Listen 4443
</IfModule>
Так же необходимо добавить наши самоподписные сертификаты в Nextcloud, для покупных сертификатов данное действие не требуется:
# cat /root/ssl/nextcloud.ca-bundle >> /var/www/html/nextcloud/resources/config/ca-bundle.crt
Далее добавляем наш сайт в разрешенные и перезапускаем Apache2:
# a2ensite officenextcloud
# systemctl restart httpd2
Настройка Collabora Online в Nextcloud
- Заходим на сайт c Nextcloud: «Приложения» -> «Офис и текст» -> «Collabora Online» -> «Включить».
- Настройки -> «Collabora Online» -> указываем адрес нашего сервера с портом (https://10.10.10.10:4443):
HIGH:MEDIUM:!aNULL:!MD5
и перезапустить Apache2:
# systemctl restart httpd2
Теперь документы можно редактировать в браузере:
Обновление Collabora Docker
- Скачиваем свежий образ:
# docker pull collabora/code
- Выясняем id контейнера:
docker ps
- Останавливаем и удаляем старый контейнер:
docker stop CONTAINER_ID docker rm CONTAINER_ID
- Запускаем новый контейнер:
docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=10\\.10\\.10\\.10' --restart always --cap-add MKNOD collabora/code
Интеграция с LDAP
Nextcloud поставляется с приложением LDAP, позволяющим пользователям LDAP (включая Active Directory и FreeIPA) появляться в списках пользователей Nextcloud.
# apt-get install php8-ldap
# systemctl restart httpd2
Ниже показана настройка интеграции с FreeIPA (сервер ipa.example.test).
Для интеграции базы пользователей с LDAP необходимо в списке приложений Nextcloud включить «LDAP user and group backend».
Далее переходим на страницу администрирования Nextcloud: «Настройки» -> «Интеграция LDAP / AD» («LDAP / AD integration»). На этой странице необходимо указать параметры подключения к LDAP.
Вкладка «Сервер» («Server»):
На сервере LDAP должна быть настроена учётная запись с правами чтения (DN user). От данной учетной записи будет выполняться подключение к серверу каталогов.
На вкладке «Сервер» нужно указать имя хоста LDAP-сервера, порт (если сервер LDAP работает на стандартном порту, порт будет обнаружен автоматически) и ввести учётные данные пользователя. В разных реализациях LDAP могут быть разные требования для указания учетной записи, например, во FreeIPA необходимо указать uid=nextcloud,cn=sysaccounts,cn=etc,dc=ipa,dc=example,dc=test.
Для базы поиска пользователей и групп можно нажать кнопку «Определить базу поиска DN» — тогда будет определен корень домена. Или можно ввести самому конкретное подразделение.
Вкладка «Пользователи» («Users»). На этой вкладке можно указать, какие пользователи LDAP будут отображаться как пользователи Nextcloud:
Вкладка «Учетные данные» («Login Attributes»). Здесь можно задать поле, которое будет использоваться в качестве логина:
Вкладка «Группы» («Groups»). Здесь можно задать фильтры для групп:
Вкладка «Дополнительно» («Advanced») -> раздел «Настройки каталога» («Directory Settings»):
- «Поле отображаемого имени пользователя» («User Display Name Field»): displayname
- «Вторичное поле отображаемого имени пользователя» («2nd User Display Name Field»): mail
- «База дерева пользователей» («Base User Tree»): cn=users,cn=accounts,dc=ipa,dc=example,dc=test
- «База дерева групп» («Base Group Tree»): cn=groups,cn=accounts,dc=ipa,dc=example,dc=test
Вкладка «Эксперт» («Expert»):
- «Атрибут для внутреннего имени» («Internal Username Attribute»): uid
- «UUID-атрибуты для пользователей» («UUID Attribute for Users»): uid
Просмотреть список пользователей можно, выбрав пункт «Пользователи» (должны подгрузиться пользователи из ldap):
Теперь можно попробовать зайти доменным пользователем используя свой логин и пароль.
Настройка SSO
Для работы прозрачной аутентификации (SSO) необходимо настроить веб-сервер (Apache, Nginx). Также желательно сделать интеграцию c LDAP.
Устанавливаем модуль для php7:
# apt-get install php7-ldap
# systemctl restart httpd2
Далее необходимо включить официальное приложение «SSO & SAML authentication».
Далее переходим на страницу администрирования Nextcloud -> «Подтверждение подлинности SSO и SAML» («SSO & SAML authentication») и указываем переменную с именем пользователя REMOTE_USER.
Также поставим галочку, чтобы SSO пускал только известных пользователей.
- ↑ В репозиторий ALT Linux входят пакеты nextcloud, nextcloud-apache2 и nextcloud-nginx которые можно установить через apt-get install.
- ↑ В старых версиях Nextcloud требовался php7 и его пакеты, так что зависимости по мере устаревания этой статьи нужно уточнять на официальном сайте Nextcloud.
- ↑ Вместо сервера Арache2 может использоваться сервер Nginx.
- ↑ При использовании nginx необходимые для него пакеты покажет команда apt-cache depends nextcloud-nginx
- ↑ пакет можно просто установить из репозитория.
- ↑ Версия pgh может со временем меняться