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:
- (Необязательно) Это поле может содержать адрес электронной почты администратора или контактного лица, связанного с сертификатом.