Перейти к основному содержимому

nextcloud_installation

Вводная информация

к сведению

Перед установкой Nextcloud необходимо ознакомится с рекомендуемыми системными требованиями


Для установки Nextcloud потребуется несколько компонентов, каждый из которых выполняет определенную роль в работе системы.

  • СУБД CУБД используется для хранения всей информации, связанной с Nextcloud: данные пользователей, списки файлов, настройки, журналы активности и т.д. Она обеспечивает быстрый доступ к этим данным, их сохранность и возможность масштабирования.
  • PHP PHP является основным языком программирования, на котором написан Nextcloud. Оно необходимо для выполнения серверной логики, обработки запросов пользователей и взаимодействия с базой данных и веб-сервером.
  • Веб-сервер Веб-сервер отвечает за обработку входящих HTTP/HTTPS-запросов и доставку веб-страниц пользователям. Он обеспечивает работу интерфейса Nextcloud, доступного через браузер, и управляет передачей данных между клиентом и сервером.
  • Nextcloud Nextcloud — это само приложение, которое обеспечивает функциональность облачного хранилища. После установки оно предоставляет пользователям доступ к файлам, синхронизацию данных, совместную работу с документами и другими сервисами.

Подготовка к установке

Перед началом установки необходимо обновить пакеты.

Актуализируем списки пакетов и обновляем их.

apt update
apt upgrade

Установка MariaDB

В качестве СУБД можно выбрать разные решения, полный список которых доступен в системных требованиях на официальном сайте Nextcloud. В этой инструкции будет использована MariaDB.

Устанавливаем MariaDB.

apt install mariadb-server -y

Запускаем её и проверяем её статус СУБД:

systemctl start mariadb
systemctl status mariadb

Если никаких ошибок нет, то добавляем в автозагрузку.

systemctl enable mariadb

Настройка СУБД

Для дальнейшей настройки нам необходимо подключиться к локальному серверу СУБД.

mysql

Nextcloud хранит большинство своих настроек в базе данных. Поэтому создадим БД и пользователя, а Nextcloud после первого запуска уже сам создаст нужные ему таблицы, индексы и представления.

CREATE USER 'nextcloud_admin'@'localhost' IDENTIFIED BY 'admin_pswd';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud_admin'@'localhost';
FLUSH PRIVILEGES;
  • CREATE USER 'nextcloud_admin'@'localhost' IDENTIFIED BY 'admin_pswd';
    • CREATE USER: Создает нового пользователя в MySQL.
    • 'nextcloud_admin'@'localhost': Указывает имя пользователя (nextcloud_admin) и хост, с которого он будет подключаться к базе данных (localhost, то есть с того же сервера, на котором находится MySQL).
    • IDENTIFIED BY 'admin_pswd': Устанавливает пароль для пользователя nextcloud_admin. В данном случае в качестве пароля используется 'admin_pswd', но его следует заменить на более безопасный.
  • CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    • CREATE DATABASE: Создает новую базу данных.
    • IF NOT EXISTS: Эта часть команды проверяет, существует ли уже база данных с таким именем, и если нет, то создаёт её. Если база данных уже существует, команда не приведет к ошибке.
    • nextcloud: Имя создаваемой базы данных.
    • CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci: Задает кодировку символов и правила сортировки для базы данных. utf8mb4 — это расширенная версия кодировки UTF-8, поддерживающая все символы Unicode, включая смайлики. utf8mb4_general_ci — это стандартный порядок сортировки для данной кодировки.
  • GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud_admin'@'localhost';
    • GRANT ALL PRIVILEGES: Дает пользователю все права (привилегии) на указанные базы данных и таблицы.
    • ON nextcloud.*: Привилегии применяются ко всей базе данных nextcloud и ко всем её таблицам(* означает все таблицы)
    • TO 'nextcloud_admin'@'localhost';: Указывает, что права даются пользователю nextcloud_admin, который подключается с локального хоста (localhost).
  • FLUSH PRIVILEGES;
    • FLUSH PRIVILEGES: Обновляет таблицы привилегий в MySQL, чтобы внесенные изменения (например, создание пользователя или назначение прав) вступили в силу.

СУБД настроена, выходим из командной строки MySQL:

\q

или

quit;

Установка PHP

Проверяем, установлен ли PHP в системе, и если да, то определим его версию.

php -v
к сведению

На момент написания статьи рекомендованная версия PHP - 8.3.

Если PHP не установлен, или версия не соответствует рекомендованной, то сперва стоит проверить какую версию предлагается установить из репозитория:

apt search --names-only '^php[.0-9]{3}$'

Если она соответствует рекомендации Nextcloud, вводим команду для установки PHP/PHP-FPM и далее необходимых расширений:

apt install php php-fpm php-common
apt install php-zip php-xml php-intl php-gd php-mysql php-mbstring php-curl

Настройка PHP

После установки PHP переходим к его настройке.

Сначала необходимо настроить php-fpm.

vim /etc/php/${PHP_VER}/fpm/pool.d/www.conf
к сведению

Путь к данной папке зависит от установленной версии php. В данном примере это 8.3 (задана через переменную PHP_VER).

Находим строчку и снимаем с неё комментарий.

env[PATH] = /usr/local/bin:/usr/bin:/bin
  • env[PATH] = /usr/local/bin:/usr/bin:/bin используется в конфигурации веб-сервера, например, в Nginx или Apache, для настройки переменных окружения, доступных процессам, запускаемым сервером. В частности, это строка указывает путь к каталогам, где сервер будет искать исполняемые файлы.

Далее настраиваем php_ini.

vim /etc/php/${PHP_VER}/fpm/php.ini
к сведению

Путь к данной папке зависит от установленно версии php. В данном примере это 8.3 (задана через переменную PHP_VER).

Находим строки, снимаем с них комментарии и редактируем.

opcache.enable_cli=1
opcache.interned_strings_buffer=32
opcache.revalidate_freq=1
  • opcache.enable_cli=1
    • Включает или отключает OPcache для командной строки (CLI).
    • Значение 1: Включает OPcache для скриптов, выполняемых через командную строку.
  • opcache.interned_strings_buffer=32
    • Указывает размер памяти (в мегабайтах), выделенной для хранения интернированных строк (interned strings) в кэше. Интернированные строки - это строки, которые PHP автоматически сохраняет в едином экземпляре, чтобы уменьшить использование памяти и ускорить сравнение строк. Вместо хранения нескольких одинаковых строк, PHP хранит их один раз в памяти и использует ссылки.
    • Значение 32: Устанавливает буфер для интернированных строк размером 32 МБ.
  • opcache.revalidate_freq=1
    • Определяет, как часто (в секундах) OPcache будет проверять, были ли изменены скрипты на диске.
    • Значение 1: OPcache будет проверять файлы на изменения каждые 1 секунду.

После завершения настройки перезапускаем php-fpm и проверяем его статус.

systemctl restart php${PHP_VER}-fpm
systemctl status php${PHP_VER}-fpm

Если php-fpm перезапустился без ошибок, то добавляем его в автозагрузку.

systemctl enable php${PHP_VER}-fpm

Настройка PHP завершена.

Проверка Apache

Если производилась установка PHP и/или необходимых PHP-расширений, то дополнительно мог установиться и запуститься веб-сервер Apache2. Его необходимо отключить.

Проверяем, запущен ли Apache2.

systemctl status apache2

Если веб-сервер запущен отключаем его и удаляем из автозагрузки.

systemctl stop apache2
systemctl disable apache2

Настройка веб-сервера Nginx

В этом примере в качестве веб-сервера, на основе которого будет работать Nextcloud, будет использован nginx.

Установим nginx.

apt install nginx -y

Создаём файл с настройками виртуального хоста.

vim /etc/nginx/sites-enables/nextcloud.conf

Конфигурация веб-сервера для Nextcloud будет следующая:

server {
listen 80;
listen 443 ssl;
server_name nextcloud.sanechka.local;

if ($scheme = 'http') {
return 301 https://$host$request_uri;
}

ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;

root /var/www/nextcloud;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
client_max_body_size 10G;
fastcgi_buffers 64 4K;

rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

index index.php;
error_page 403 = /core/templates/403.php;
error_page 404 = /core/templates/404.php;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}

location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location = /.well-known/webfinger { return 301 /index.php/.well-known/webfinger; }
location = /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; }
location ^~ /.well-known{ return 301 /index.php/$uri; }
try_files $uri $uri/ =404;
}

location / {
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}

location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS on;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires modified +30d;
access_log off;
}
}

В конфигурации веб-сервера стоит обратить внимание на следующие пункты:

  • server_name (имя домена);

Домен, на котором будет работать облако. Если планируется использование в локальной сети, то можно указать вместо доменного имени IP-адрес.

  • ssl_certificate /etc/nginx/ssl/cert.pem;

Директива, указывающая путь к файлу с SSL-сертификатом (cert.pem).

  • ssl_certificate_key /etc/nginx/ssl/cert.key;

Директива, указывающая путь к файлу с закрытым ключом (cert.key).

  • root /var/www/nextcloud;

Каталог с облачным хранилищем.

Настройка SSL-сертификатов

к сведению

Для обеспечения защищённого соединения по HTTPS необходимо использовать SSL-сертификаты. В данном примере настройка Nextcloud выполняется с использованием самоподписанного сертификата. Такой вариант вполне приемлем для облачного хранилища, развернутого в локальной сети для личного использования. Но стоит помнить, что самоподписанный сертификат не будет признан доверенным большинством браузеров и, соответственно, вызовет предупреждения о небезопасном соединении при доступе из-за пределов локальной сети.

Если планируется доступ к облаку из внешней сети, рекомендуется использовать либо платный сертификат, либо бесплатный сертификат от Let’s Encrypt. Эти сертификаты автоматически распознаются как доверенные всеми основными браузерами и обеспечивают надёжную защиту данных.

Переходим к настройке SSL-сертификатов. Сначала создаём каталог для их хранения и переходим в него.

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

Генерируем сертификат и закрытый ключ.

openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key
  • openssl:
    • Это команда для вызова утилиты OpenSSL, которая используется для выполнения различных криптографических операций, таких как создание сертификатов, генерация ключей и шифрование данных.
  • req:
    • Это команда в OpenSSL, которая используется для создания запроса на сертификат (CSR - Certificate Signing Request) или, как в данном случае, для создания самоподписанного сертификата.
  • new:
    • Указывает, что нужно создать новый запрос на сертификат или новый сертификат.
  • x509:
    • Указывает, что нужно создать самоподписанный сертификат вместо запроса на сертификат (CSR). Формат X.509 является стандартным для SSL/TLS сертификатов.
  • days 1461:
    • Устанавливает срок действия сертификата в днях.
  • nodes:
    • Указывает, что не нужно шифровать файл с закрытым ключом. Это означает, что при доступе к закрытому ключу не потребуется вводить пароль.
  • out cert.pem:
    • Указывает имя файла, в который будет сохранен созданный сертификат. В данном случае сертификат будет сохранен в файл cert.pem.
  • keyout cert.key:
    • Указывает имя файла, в который будет сохранен созданный закрытый ключ. В данном случае ключ будет сохранен в файл cert.key

После ввода команды нам предложат заполнить данные сертификата:

  • Country Name (C):
    • Это двухбуквенный код страны, где зарегистрирована организация или расположено лицо, для которого создается сертификат.
  • State or Province Name (ST):
    • Это полное название штата или провинции, где находится организация, для которой выпускается сертификат.
  • Locality Name (L):
    • Это название города или населенного пункта, где зарегистрирована организация, для которой выпускается сертификат.
  • Organization Name (O):
    • Полное официальное название организации, для которой создается сертификат.
  • Organizational Unit Name (OU):
    • (Необязательно) Это название отдела или подразделения организации, для которого создается сертификат.
  • Common Name (CN):
    • (Обязательно к заполнению). Самое важное поле. Оно содержит полное доменное имя (FQDN) сервера, для которого создается сертификат. Если сертификат самоподписанный и предназначен для локальной сети, сюда можно вписать IP-адрес или локальное имя хоста.
  • Email Address:
    • (Необязательно) Это поле может содержать адрес электронной почты администратора или контактного лица, связанного с сертификатом.

Перезапуск Nginx

После настройки конфигурации виртуального хоста и настройки сертификата сохраняем изменённый файл и проверяем правильность конфигурации веб-сервера.

nginx -t

В результате, если всё настроено корректно, получим следующий вывод

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезагрузим nginx, чтобы изменения вступили в силу.

systemctl restart nginx

Проверим статус веб-сервера после перезапуска.

systemctl status nginx

Если всё хорошо, то добавим службу веб-сервера в автозагрузку.

systemctl enable nginx

Установка

Прежде чем скачивать Nextcloud, установим утилиту unzip, которая понадобится для распаковки архива.

apt install unzip

Переходим в /var/www, где будет находится наш Nextcloud.

cd /var/www

Теперь мы готовы к непосредственной установке. Скачиваем архив с последней версией и распаковываем его.

wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip

Удаляем скачанный архив, так как он нам больше не понадобится.

rm latest.zip

Последним действием меняем владельца каталога, чтобы nginx мог корректно обрабатывать все вложенные файлы.

chown -R www-data:www-data /var/www/nextcloud

Инициализация облака

Теперь можно переходить непосредственно к инициализации нашего облака. Для этого переходим в браузер и открываем веб интерфейс - либо через домен, либо через IP-адрес.

Создадим учетную запись администратора. Для соединения с СУБД укажем название созданной БД, пользователя и пароль, которые мы заводили на этапе настройки MariaDB. При необходимости также можно поменять каталог, где будут размещаться пользовательские данные, но делать это нежелательно.

nextcloud_installation_1.png

Далее появится окно авторизации, в котором нужно ввести логин и пароль только что созданного пользователя-администратора. После успешной авторизации мы попадем в основной интерфейс Nextcloud. Туда для примера уже загружено несколько ознакомительных файлов и активированы базовые приложения, вроде синхронизации файлов, просмотра фотографий, ведение заметок и другие.

nextcloud_installation_2.png

На этом настройка Nextcloud завершена. Далее можно кастомизировать и настраивать облачное хранилище.