Nextcloud

Материал из ALT Linux Wiki
Версия от 10:19, 22 марта 2021; Elena Mishina (обсуждение | вклад) (Создание самоподписных SSL сертификатов)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Nextcloud — облачное хранилище файлов.

Установка Nextcloud[править]

Установить Nextcloud можно из репозитория или с официального сайта, если не устраивает версия из репозитория.

В данной статье рассмотрена установка Nextcloud на сервер c Apache2.

С официального сайта (с помощью веб-установщика)[править]

Подготовка окружения[править]

Для работы Nextcloud необходим настроенный веб-сервер.

Необходимо установить следующие пакеты:

# apt-get install apache2 apache2-mod_php7 apache2-mod_ssl php7 php7-zip php7-libs php7-mbstring php7-gd php7-curl php7-pdo php7-xmlreader php7-openssl php7-fileinfo tzdata

Разрешим нужные модули Apache2:

# a2enmod ssl
# a2enmod headers
# a2enmod env
# a2enmod rewrite
# a2enmod mime
# a2enmod dir

Запустить веб-сервер Apache2 и добавить его в автозагрузку:

systemctl enable --now httpd2

Установка[править]

Внимание! Инсталятор системы может ставить пакет ( installer-feature-apache2-indexhtml-stage2 ?? ) который правит

в файлах /etc/httpd2/conf/sites-available/default.conf и /etc/httpd2/conf/sites-available/default_https.conf строчку /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.conf
sed -i "s|/usr/share/doc/indexhtml|/var/www/html|" /etc/httpd2/conf/sites-available/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:

Установка 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/
# chown -R apache2 /var/www/html/nextcloud/config/
# chown -R apache2 /var/www/html/nextcloud/data/

Из репозитория[править]

Установить 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 — файл конфигурации Nextcloud, веб-интерфейс будет доступен по ссылке:

http://your_web_server_adress/nextcloud

Далее нужно получить доступ к веб-интерфейсу Nextcloud и завершить установку.

Завершение установки[править]

Для завершения установки необходимо создать учетную запись администратора Nextcloud и выбрать тип используемой БД (по умолчанию SQLite).

SQLite[править]

Если будет использоваться база данных SQLite (для крупных проектов рекомендуется выбрать другой тип базы данных), создайте учетную запись администратора Nextcloud, заполнив поля «Имя пользователя» и «Пароль», и нажмите кнопку «Завершить установку»:

Установка Nextcloud с базой данных SQLite

MySQL/MariaDB для Nextcloud[править]

Если будет использоваться база данных MySQL/MariaDB:

  1. Установить необходимые пакеты для MySQL или для MariDB:
    # apt-get install MySQL[mariadb]-server php7-pdo_mysql
    
  2. Запустить сервер mysqld и добавить его в автозагрузку:
    # systemctl enable --now mysqld (mariadb.service)
    
  3. Создать базу данных для 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;
      
  4. В веб-интерфейсе Nextcloud создайте учетную запись администратора, заполнив поля «Имя пользователя» и «Пароль», раскройте список «Хранилище и база данных», выберите MySQL/MariaDB, и заполните поля подключения к базе данных, данными, которые использовались на этапе настройки базы данных. Для завершения установки нажмите кнопку «Завершить установку»:
    Установка Nextcloud с базой данных MySQL

PostgreSQL[править]

Примечание: В p9 на данный момент поддерживается несколько версий PostgreSQL. В данной статье мы будем использовать версию postgresql 9.6.


Если будет использоваться база данных PostgreSQL:

  1. Установить необходимые пакеты для PostgreSQL:
    # apt-get install postgresql9.6-server php7-pgsql php7-pdo_pgsql
    
  2. Подготовить к запуску и настроить службы PostgreSQL:
    • создать системные базы данных:
      # /etc/init.d/postgresql initdb
      
    • включить по умолчанию и запустить службу:
      # systemctl enable --now postgresql
      
  3. Создать базу данных Nextcloud:
    • создать пользователя nextcloud (пароль необходимо запомнить) и базу данных nextcloud (под правами root):
      # su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole --encrypted --pwprompt nextcloud'
      Введите пароль для новой роли: 
      Повторите его:
      # su - postgres -s /bin/sh -c 'createdb -O nextcloud nextcloud'
      
  4. В веб-интерфейсе Nextcloud создайте учетную запись администратора, заполнив поля «Имя пользователя» и «Пароль», раскройте список «Хранилище и база данных», выберите PostgreSQL, и заполните поля подключения к базе данных, данными, которые использовались на этапе создания базы данных. Для завершения установки нажмите кнопку «Завершить установку».
    Установка 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-сертификаты. Их можно купить или сгенерировать:

  1. Перейти в каталог /root/ssl:
    mkdir -p /root/ssl && cd /root/ssl
    
  2. Создаем ключ корневого хранилища, наш самый главный ключ:
    openssl genrsa -des3 -out nextcloud-domain-ca.key 2048
    
  3. Создаем и зашифровываем ключом корневого хранилища корневой сертификат, сертификат издателя сертификатов (при запросе «Common Name» необходимо указать IP или FQDN вашего сервера):
    openssl req -new -x509 -days 3650 -key nextcloud-domain-ca.key -out nextcloud-domain-ca.crt
    
  4. Создаем ключ веб-сервера, который вы намерены защитить сертификатом:
    openssl genrsa -des3 -out nextcloud.key 1024
    
  5. Создаем запрос на подписание сертификата веб-сервера (при запросе «Common Name» необходимо указать IP или FQDN вашего сервера):
    openssl req -new -key nextcloud.key -out nextcloud.csr
    
  6. Создаем и подписываем сертификат веб-сервера, используя запрос на сертификат, корневой ключ и корневой сертификат:
    openssl x509 -req -in nextcloud.csr -out nextcloud.crt -sha1 -CA nextcloud-domain-ca.crt -CAkey nextcloud-domain-ca.key -CAcreateserial -days 3650
    
  7. Apache2 будет требовать при запуске пароль к ключу веб-сервера. Если это вам не нужно, сделайте страховую копию ключа веб-сервера:
    cp nextcloud.key nextcloud.key.dist
    
    и очистите пароль ключа веб-сервера командой:
    openssl rsa -in nextcloud.key.dist -out nextcloud.key
    
  8. Создадим цепочку сертификатов CA-bundle:
    cat nextcloud.crt nextcloud-domain-ca.crt > nextcloud.ca-bundle
    
  9. В итоге у нас будут следующие файлы:
    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"
    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>
Примечание: Если nextcloud устанавливался из репозитория /var/www/html/nextcloud в директиве DocumentRoot и Directory необходимо заменить на /var/www/webapps/nextcloud.


Добавим наш сайт в разрешенные и перезапустим веб-сервер:

# 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>
Примечание: Так как мы используем ip-адрес, то указываем тот же сертификат, что и для nextcloud. В случае с доменными именами, нам надо сгенерировать отдельный сертификат для нового доменного имени (п.3-п.7).


Так же необходимо добавить наши самоподписные сертификаты в Nextcloud, для покупных сертификатов данное действие не требуется:

# cat /root/ssl/nextcloud.ca-bundle >> /var/www/html/nextcloud/resources/config/ca-bundle.crt

Далее добавляем наш сайт в разрешенные и перезапускаем Apache2:

# a2ensite officenextcloud
# systemctl restart httpd2
Внимание! Обязательно необходимо зайти по адресу https://10.10.10.10:4443/ и добавить сертификат в исключения браузера.


Настройка Collabora Online в Nextcloud[править]

  1. Заходим на сайт c Nextcloud: «Приложения» -> «Офис и текст» -> «Collabora Online» -> «Включить».
  2. Настройки -> «Collabora Online» -> указываем адрес нашего сервера с портом (https://10.10.10.10:4443):

Настройка Collabora Online в Nextcloud

Примечание: Если соединения с сервером не происходит, попробуйте заменить содержимое директивы SSLCipherSuite в файле /etc/httpd2/conf/sites-available/officenextcloud.conf на:
HIGH:MEDIUM:!aNULL:!MD5

и перезапустить Apache2:

# systemctl restart httpd2


Теперь документы можно редактировать в браузере:

Collabora Online в Nextcloud

Обновление Collabora Docker[править]

  1. Скачиваем свежий образ:
    # docker pull collabora/code
    
  2. Выясняем id контейнера:
    docker ps
    
  3. Останавливаем и удаляем старый контейнер:
    docker stop CONTAINER_ID
    docker rm CONTAINER_ID
    
  4. Запускаем новый контейнер:
    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.

Примечание: Должен быть установлен модуль для PHP LDAP:
# apt-get install php7-ldap
# systemctl restart httpd2


Ниже показана настройка интеграции с FreeIPA (сервер ipa.example.test).

Для интеграции базы пользователей с LDAP необходимо в списке приложений Nextcloud включить «LDAP user and group backend».

Далее переходим на страницу администрирования Nextcloud: «Настройки» -> «Интеграция LDAP / AD» («LDAP / AD integration»). На этой странице необходимо указать параметры подключения к LDAP.

Вкладка «Сервер» («Server»):

Интеграция с LDAP. Вкладка «Сервер»

На сервере LDAP должна быть настроена учётная запись с правами чтения (DN user). От данной учетной записи будет выполняться подключение к серверу каталогов.

На вкладке «Сервер» нужно указать имя хоста LDAP-сервера, порт (если сервер LDAP работает на стандартном порту, порт будет обнаружен автоматически) и ввести учётные данные пользователя. В разных реализациях LDAP могут быть разные требования для указания учетной записи, например, во FreeIPA необходимо указать uid=nextcloud,cn=sysaccounts,cn=etc,dc=ipa,dc=example,dc=test.

Для базы поиска пользователей и групп можно нажать кнопку «Определить базу поиска DN» — тогда будет определен корень домена. Или можно ввести самому конкретное подразделение.

Вкладка «Пользователи» («Users»). На этой вкладке можно указать, какие пользователи LDAP будут отображаться как пользователи Nextcloud:

Интеграция с LDAP. Вкладка «Пользователи»

Вкладка «Учетные данные» («Login Attributes»). Здесь можно задать поле, которое будет использоваться в качестве логина:

Интеграция с LDAP. Вкладка «Учетные данные»

Вкладка «Группы» («Groups»). Здесь можно задать фильтры для групп:

Интеграция с LDAP. Вкладка «Группы»

Вкладка «Дополнительно» («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

Интеграция с LDAP. Вкладка «Дополнительно»

Вкладка «Эксперт» («Expert»):

  • «Атрибут для внутреннего имени» («Internal Username Attribute»): uid
  • «UUID-атрибуты для пользователей» («UUID Attribute for Users»): uid

Интеграция с LDAP. Вкладка «Эксперт»

Просмотреть список пользователей можно, выбрав пункт «Пользователи» (должны подгрузиться пользователи из ldap):

Пользователи Nextcloud

Теперь можно попробовать зайти доменным пользователем используя свой логин и пароль.

Настройка 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 пускал только известных пользователей.