Nextcloud — это удобное корпоративное решение для хранения файлов, совместной работы и обмена документами. В рабочих условиях важно обеспечить бесперебойную работу системы. В этой инструкции мы разберём, как развернуть Nextcloud с высокой доступностью, используя:
- Балансировщик нагрузки (HAProxy)
- Два сервера с Nextcloud для распределения запросов
- Базу данных MariaDB с репликацией Master-Slave
- Redis для кэширования запросов
- Два NFS-сервера с синхронизацией через DRBD
- Elasticsearch для быстрого поиска по документам
- Интеграцию с Active Directory
Все компоненты работают на Ubuntu 22.04 LTS.
Установка и настройка Nextcloud
-
Установка Apache и PHP
Сначала установим веб-сервер и необходимые компоненты:
apt-get install apache2 –y
apt update && apt upgrade –y
add-apt-repository ppa:ondrej/php
apt install php8.2 php8.2-{curl,zip,gd,fpm,ctype,dom,libxml,mbstring,posix,session,SimpleXML,XMLReader,XMLWriter,zlib,intl,gmp,bcmath,xml} memcached php8.2-imagick
sudo phpenmod pdo_mysql -
Настройка виртуального хоста
Создадим конфигурационный файл для Nextcloud (
/etc/apache2/sites-available/nextcloud.conf
):DocumentRoot /var/www/nextcloud/
ServerName yourdomain.com
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
RewriteEngine on
RewriteCond %{SERVER_NAME} =yourdomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Активируем конфигурацию:
a2ensite nextcloud.conf
a2enmod rewrite headers env dir mime
systemctl restart apache2
Конфигурационный файл apache2 nextcloud.conf выглядит следующим образом:
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
DocumentRoot /var/www/nextcloud/
ServerName domainname.ru
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
Dav off
RewriteEngine on
RewriteCond %{SERVER_NAME} =domainname.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Установка Nextcloud
Скачиваем архив с официального сайта. Проверяем контрольную сумму:
md5sum -c nextcloud-x.y.z.tar.bz2.md5 < nextcloud-x.y.z.tar.bz2
-
Распаковываем и перемещаем файлы:
tar -xjvf nextcloud-x.y.z.tar.bz2
sudo cp -r nextcloud /var/www
sudo chown -R www-data:www-data /var/www/nextcloud
Настройка MariaDB с репликацией
-
Установка и базовая настройка
На обоих серверах выполняем:apt-get install mariadb-server mariadb-client –y
mysql_secure_installation -
Конфигурация Master-сервера
Редактируем/etc/mysql/mariadb.conf.d/50-server.cnf
:bind-address = 0.0.0.0
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
relay_log = /var/log/mysql/mysql-relay-binПерезапускаем MariaDB:
systemctl restart mariadb
Создаём пользователя для репликации:CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES; -
Конфигурация Slave-сервера
Аналогично Master, но с
server-id = 2
.
Запускаем репликацию:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master-ip', MASTER_USER='repl_user',
MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123;
START SLAVE;
Настройка отказоустойчивого хранилища (NFS + DRBD)
-
Установка NFS
На обоих серверах:apt install nfs-kernel-server
mkdir /mnt/ncdata
echo "/mnt/ncdata client-ip(rw,sync,no_subtree_check)" >> /etc/exports
systemctl start nfs-kernel-server -
Настройка DRBD
Устанавливаем DRBD:apt install drbd-utils
Создаём конфиг
/etc/drbd.d/r0.res
:resource r0 {
protocol C;
startup { wfc-timeout 15; degr-wfc-timeout 60; }
on server1 { device /dev/drbd0; disk /dev/sda1; address 10.0.0.1:7788; meta-disk internal; }
on server2 { device /dev/drbd0; disk /dev/sda1; address 10.0.0.2:7788; meta-disk internal; }
}Инициализируем и запускаем:
drbdadm create-md r0
systemctl start drbd
drbdadm primary r0
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /mnt/ncdata
Настройка HAProxy для балансировки нагрузки
-
Установка и базовая конфигурация:
apt install haproxy
Редактируем
/etc/haproxy/haproxy.cfg
:frontend nextcloud_https
bind *:443 ssl crt /etc/ssl/cert.pem
default_backend nextcloud_servers
backend nextcloud_servers
balance roundrobin
server nextcloud1 192.168.1.10:443 check ssl
server nextcloud2 192.168.1.11:443 check sslПерезапускаем HAProxy:
systemctl restart haproxy
Интеграция с Active Directory
-
Устанавливаем приложение LDAP user and group backend через веб-интерфейс Nextcloud.
-
В разделе Администрирование → LDAP/AD указываем:
-
Адрес контроллера домена
-
Учётные данные для подключения
-
Базовый DN для поиска пользователей
-
Заключение
Мы настроили отказоустойчивую систему Nextcloud, которая продолжает работать даже при сбоях отдельных компонентов. Для корпоративного использования рекомендуем готовое решение Nextcloud Enterprise от Cloud4Y, которое включает профессиональную поддержку и дополнительные инструменты для администрирования. Не получилось настроить? Вот ещё одна инструкция, более подробная.