Nextcloud — это мощное решение для организации личного облачного хранилища, которое предоставляет доступ к данным, синхронизацию файлов и совместную работу в любом месте. В данной статье мы рассмотрим процесс установки Nextcloud на операционную систему Rocky Linux, которая зарекомендовала себя как надежная платформа для серверных решений. Следуя этому руководству, вы сможете настроить собственный облачный сервис с высокой степенью безопасности и контроля над данными, что делает Nextcloud отличным выбором для индивидуальных пользователей и организаций.
Аналогично Rocky Linux можно установить Nextcloud на Red Hat, CentOS, AlmaLinux OS, так как они все из одного семейства. В нашем случае используется Rocky Linux 9.
Установка и настройка репозиториев и модулей
Для установки нам понадобится два репозитория: EPEL (Extra Packages for Enterprise Linux), Remi. Будем использовать одну из свежих версий PHP 8.3 из репозитория Remi. На данный момент в стандартном репозитории Rocky Linux версия PHP 8.0.
Устанавливаем EPEL:
dnf install epel-release
Устанавливаем репозиторий Remi (ссылка для Rocky Linux 9):
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
Нам нужна последняя версия MariaDB, которую поддерживает Nextcloud. На данный момент 11.4, поэтому подключаем репозиторий. Создаём в /etc/yum.repos.d/ файл MariaDB.repo со следующим содержимым:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/11.4/rockylinux9-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Отключаем установку версии MariaDB по умолчанию из стандартного репозитория:
dnf module disable mariadb -y
dnf module reset mariadb -y
Обновляем кэш для всех подключённых репозиториев:
dnf makecache
Обновляем все установленные пакеты до последних версий:
dnf upgrade
Выводим список модулей PHP, которые могут быть включены:
dnf module list php
Включаем модуль PHP 8.3:
dnf module enable php:remi-8.3 -y
Выводим снова список:
dnf module list php
Видим, что требуемая нам версия включена:
В более новой версии на момент написания статьи не было всех требуемых для установки пакетов.
Устанавливаем требуемые нам пакеты:
dnf install httpd mariadb-server nano wget zip unzip libxml2 openssl php83-php php83-php-ctype php83-php-curl php83-php-gd php83-php-iconv php83-php-json php83-php-libxml php83-php-mbstring php83-php-openssl php83-php-posix php83-php-session php83-php-xml php83-php-zip php83-php-zlib php83-php-pdo php83-php-mysqlnd php83-php-intl php83-php-bcmath php83-php-gmp php83-php-imagick php83-php-pecl-apcu php83-php-redis mod_ssl openssh
В дальнейшем в статье во всех файлах, конфигурациях и командах буду указывать nextcloud.victorz.ru. Вам надо будет везде где увидите nextcloud.victorz.ru заменять на ваш домен. Запомните это.
Создаём каталоги
mkdir -p /var/www/sub-domains/nextcloud.victorz.ru/html
mkdir -p /var/www/sub-domains/nextcloud.victorz.ru/data
- html — в каталоге будет размещаться nextcloud;
- data — в каталоге будут размещаться данные, которые пользователь помещает в облако. По умолчанию nextcloud размещает эти данные в своём каталоге, который доступен из сети интернет, но мы их вынесем из него для безопасности.
Настройка Apache
Включаем автозапуск и запускаем:
systemctl enable httpd
systemctl start httpd
Создаём каталоги, в которых будут находиться данные наших сайтов:
mkdir -p /etc/httpd/sites-available /etc/httpd/sites-enabled
В файле /etc/httpd/conf/httpd.conf в самом конце дописываем строку:
Include /etc/httpd/sites-enabled
Добавляем или изменяем строку раскомментировав:
ServerName nextcloud.victorz.ru
Создаём файл /etc/httpd/sites-available/nextcloud.victorz.ru со следующим содержимым:
<VirtualHost *:80>
ServerName nextcloud.victorz.ru
DocumentRoot /var/www/sub-domains/nextcloud.victorz.ru/html/
DirectoryIndex index.php index.htm index.html
CustomLog "/var/log/httpd/nextcloud.victorz.ru-access_log" combined
ErrorLog "/var/log/httpd/nextcloud.victorz.ru-error_log"
<Directory /var/www/sub-domains/nextcloud.victorz.ru/html/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
Если во время настройки вы хотите отлаживать процесс и обращаться к серверу по IP, то добавляем ServerAlias. Пример:
...
ServerName nextcloud.victorz.ru
ServerAlias 192.168.7.62
...
Создаём символическую ссылку на данный файл:
ln -s /etc/httpd/sites-available/nextcloud.victorz.ru /etc/httpd/sites-enabled/
Перезапускаем Apache:
systemctl restart httpd
Настройка PHP
В файле /etc/opt/remi/php83/php.ini раскомментировать и изменить или добавить строки:
memory_limit = 1G
max_execution_time = 3600
max_input_time = 3600
upload_max_filesize = 10G
post_max_size = 10G
file_uploads = On
upload_tmp_dir = "/tmp"
max_file_uploads = 200
date.timezone = "Asia/Novosibirsk"
Ряд настроек позволит без проблем загружать файлы большого размера.
date.timezone = «Europe/Moscow» — для города Москва в РФ. Указывайте вашу временную зону, которую можете найти в интернете.
Обратите внимание, что для того, чтобы все корректно работало в Nextcloud, ваш часовой пояс в файле php.ini должен совпадать с настройками часового пояса вашего компьютера. Вы можете узнать часовой пояс компьютера командой:
ls -al /etc/localtime
В этом случае у вас будет показана информация следующего вида:
/etc/localtime -> ../usr/share/zoneinfo/Asia/Novosibirsk
В файле /etc/opt/remi/php83/php.d/40-apcu.ini раскомментировать и изменить или добавить строки:
extension = apcu.so
apc.enable_cli=1
В файле /etc/opt/remi/php83/php.d/10-opcache.ini раскомментировать и изменить или добавить строку:
opcache.interned_strings_buffer=16
Перезапускаем Apache:
systemctl restart httpd
Настройка MariaDB
Включаем автозапуск и запускаем:
systemctl enable mariadb
systemctl restart mariadb
Настраиваем:
sudo mariadb-secure-installation
- На вопрос «Enter current password for root (enter for none):» нажимаем Enter.
- На вопрос «Switch to unix_socket authentication [Y/n]» вводим n и нажимаем Enter. Можете подробнее изучить эту тему и выбирать другий вариант.
- На вопрос «Change the root password? [Y/n]» нажимаем Enter, т.е. принимаем по умолчанию ответ Y (да).
- Далее дважды вводим новый пароль, чтобы установить пароль пользователя root базы данных (не операционной системы). При вводе пароль не отображается, поэтому будьте аккуратны.
- Далее на вопрос «Remove anonymous users? [Y/n]» нажимаем Enter.
- На вопрос «Disallow root login remotely? [Y/n]» нажимаем Enter.
- На вопрос «Remove test database and access to it? [Y/n]» нажимаем Enter.
- На вопрос «Reload privilege tables now? [Y/n]» нажимаем Enter.
Перезапускаем MariaDB:
systemctl restart mariadb
Установка и настройка Redis
Устанавливаем и запускаем:
dnf install redis -y
systemctl enable redis
systemctl start redis
Nextcloud и Redis будут работать на одном сервере. В этом случае с Redis не будут работать системы развёрнутые на других серверах и его работу лучше настроить через Unix-сокет. Откройте конфигурационный файл Redis, который обычно находится по пути /etc/redis/redis.conf, раскомментировать и изменить или добавить строки:
unixsocket /run/redis/redis.sock
unixsocketperm 770
# bind 127.0.0.1 -::1 # закомментируйте эту строку
port 0
Создаём каталог и изменяем права:
mkdir -p /run/redis
chmod 770 /run/redis/
usermod -aG redis apache
Перезапускаем Redis и проверяем работу через unix-сокет:
systemctl restart redis
redis-cli -s /var/run/redis/redis.sock
Redis выведет командную строку для работы с ним следующего вида:
redis /var/run/redis/redis.sock>
Вводим exit и нажимаем Enter для выхода.
Установка Nextcloud
Переходим на официальный сайт Nextcloud и получаем ссылку на дистрибутив для «Community projects» — «Archive». Далее скачиваем дистрибутив и распаковываем его:
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
Ссылка на архив может иметь в ваше время другой вид, на момент написания статьи она имела вид указанный в команде. По итогу появится каталог /tmp/nextcloud. Копируем содержимое каталога в каталог, где будет находиться Nextcloud:
cd /tmp/nextcloud
cp -Rf . /var/www/sub-domains/nextcloud.victorz.ru/html/
Изменяем права доступа к каталогам для пользователя apache:
chown -Rf apache.apache /var/www/sub-domains/nextcloud.victorz.ru/html
chown -Rf apache.apache /var/www/sub-domains/nextcloud.victorz.ru/data
chmod 770 /var/www/sub-domains/nextcloud.victorz.ru/data/
Настройка Firewall
Открываем порты на которых будет работать Nextcloud:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
Запуск и настройка Nextcloud
Настраиваем cron. Создаём файл для cron для пользователя apache:
sudo crontab -u apache -e
Откроется консольный редактор. Вписываем следующее:
*/5 * * * * /opt/remi/php83/root/usr/bin/php -f /var/www/sub-domains/nextcloud.victorz.ru/html/cron.php
Далее нажимаем клавишу Escape (ESC), чтобы выйти из режима редактирования и вводим команду:
:wq
Нажимаем клавишу Enter. Редактор сохранит данные в файле /var/spool/cron/apache и закроется.
Переходим на сайт по адресу http://nextcloud.victorz.ru и видим первичное окно настройки, в котором можно задавать настройки. Кто-то может увидеть ошибку:
Перевод: Невозможно записать в каталог конфигурации! Обычно это можно исправить, предоставив веб-серверу доступ на запись в каталог конфигурации.
Скорее всего у вас в системе SELinux запрещает Apache записывать данные в каталоги. Для проверки выполним команду (отключим временно SELinux):
sudo setenforce 0
Снова открываем страницу. Если всё заработало, то надо настраивать SELinux. Если не заработало, то у вас другая проблема, с которой я не сталкивался. Если проблема у вас связана с SELinux, то выполним ряд команд, у кого нет проблем продолжайте настройку в интерфейсе Nextcloud.
Команды для тех, у кого проблемы:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/sub-domains/nextcloud.victorz.ru/html(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/sub-domains/nextcloud.victorz.ru/data(/.*)?"
sudo restorecon -R /var/www/sub-domains/nextcloud.victorz.ru/html/
sudo restorecon -R /var/www/sub-domains/nextcloud.victorz.ru/data/
sudo setsebool -P httpd_unified 1
sudo setsebool -P httpd_can_network_connect 1
sudo setenforce 1
sudo systemctl restart httpd
Если не помогло, то надо искать решение или (под вашу ответственность) отключить SELinux полностью изменив в файле /etc/selinux/config строку:
SELINUX=enforcing
# или
SELINUX=permissive
# на
SELINUX=disabled
Перезагрузить операционную систему:
sudo reboot
Продолжаем настройку:
- Указываем логин и пароль учётной записи администратора, которую создаст Nextcloud.
- Указываем путь к каталогу с данными. В нашем случае мы создали каталог /var/www/sub-domains/nextcloud.victorz.ru/data. В вашем случае он может быть в любом другом месте. Не размещать его в каталоге html, в котором находятся служебные файлы Nextcloud.
- Указываем базу данных MariaDB: указываем учётную запись администратора к базе данных, имя базы данных для Nextcloud, хост базы данных оставляем по умолчанию.
Нажимаем кнопку Установить. Если вы всё правильно сделали, так как написано в данной статье, то вы увидите страницу, на которой предлагают установить рекомендованные приложения.
Создаём индексы в базе данных и проводим миграцию (команда выполняется от имени пользователя apache):
sudo -u apache /opt/remi/php83/root/usr/bin/php /var/www/sub-domains/nextcloud.victorz.ru/html/occ db:add-missing-indices
sudo -u apache /opt/remi/php83/root/usr/bin/php /var/www/sub-domains/nextcloud.victorz.ru/html/occ maintenance:repair --include-expensive
В файл /var/www/sub-domains/nextcloud.victorz.ru/html/config/config.php добавляем строки:
'default_phone_region' => 'RU',
'maintenance_window_start' => 1,
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => '/var/run/redis/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
На данном этапе система настроена и работает. Однако рекомендую настроить работу по протоколу HTTPS в целях повышения безопасности.
Удаление ненужного
Удаляем ненужные данные:
rm -f /tmp/latest.zip
rm -fR /tmp/nextcloud
Ниже идут полезные рекомендации не обязательные к применению и без них система уже настроена.
Настройка работы по HTTPS
При настройке будем использовать ключи и сертификаты, которые получили (купили) где-либо, т.е. не будет использоваться Let’s Encrypt. Я его не использую, так как облако у меня работает на нестандартных портах и развёрнуто за роутером на домашнем сервере, куда доступ для всех, включая Let’s Encrypt, закрыт.
Для использования Let’s Encrypt воспользуйтесь рекомендациями из официальной документации https://docs.rockylinux.org/guides/security/generating_ssl_keys_lets_encrypt
Создаём каталог для хранения ключей:
mkdir -p /var/www/sub-domains/nextcloud.victorz.ru/ssl
Помещаем ключи и сертификаты в данный каталог.
Настраиваем SELinux так как описано выше, но для каталога ssl.
Назначаем права для пользователя apache:
chown -Rf apache.apache /var/www/sub-domains/nextcloud.victorz.ru/ssl
В файле /etc/httpd/conf/httpd.conf добавим или изменим строку раскомментировав:
LoadModule ssl_module modules/mod_ssl.so
Вносим изменения в файл /etc/httpd/sites-available/nextcloud.victorz.ru добавив следующие строки в конце файла:
<VirtualHost *:443>
ServerName nextcloud.victorz.ru
DocumentRoot /var/www/sub-domains/nextcloud.victorz.ru/html/
DirectoryIndex index.php index.htm index.html
CustomLog "/var/log/httpd/nextcloud.victorz.ru-access_log" combined
ErrorLog "/var/log/httpd/nextcloud.victorz.ru-error_log"
SSLEngine on
SSLCertificateFile /var/www/sub-domains/nextcloud.victorz.ru/ssl/nextcloud.crt
SSLCertificateKeyFile /var/www/sub-domains/nextcloud.victorz.ru/ssl/nextcloud.key
# SSLCertificateChainFile не нужен в современных версиях Apache. Все промежуточные сертификаты помещаются в SSLCertificateFile с основным сертификатом. Данный вопрос вам придётся изучить самостоятельно.
<Directory /var/www/sub-domains/nextcloud.victorz.ru/html>
Require all granted
AllowOverride All
Options FollowSymLinks
</Directory>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
</VirtualHost>
Если во время настройки вы хотите отлаживать процесс и обращаться к серверу по IP, то добавляем ServerAlias. Пример:
...
ServerName nextcloud.victorz.ru
ServerAlias 192.168.7.62
...
Перезапускаем Apache:
systemctl restart httpd
Изменение HTTP порта 80 на другой
По умолчанию система работает на 80 порту. Если нужно поменять порт, например, на 8080, то изменяем настройки. В файле /etc/httpd/conf/httpd.conf измените строку:
Listen 80
# изменить на
Listen 8080
В файле /etc/httpd/sites-available/nextcloud.victorz.ru изменяем строку:
<VirtualHost *:80>
# изменить на
<VirtualHost *:8080>
Открываем порт в Firewall:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
Если SELinux не отключен, то выполняем команду:
semanage port -a -t http_port_t -p tcp 8080
Перезагружаем Apache:
systemctl restart httpd
Изменение HTTPS порта 443 на другой
Если обращаться к системе по HTTPS, то по умолчанию система работает на 443 порту. Если нужно изменить порт, например, на 8443, то изменяем настройки. В файле /etc/httpd/conf.d/ssl.conf:
Listen 443 https
# изменить на
Listen 8443 https
В файле /etc/httpd/sites-available/nextcloud.victorz.ru:
<VirtualHost *:443>
# изменить на
<VirtualHost *:8443>
Открываем порт в Firewall:
firewall-cmd --zone=public --add-port=8443/tcp --permanent
firewall-cmd --reload
Если SELinux не отключен, то выполняем команду:
semanage port -a -t http_port_t -p tcp 8443
Перезагружаем Apache:
systemctl restart httpd
Переадресация с HTTP на HTTPS
Для переадресации необходимо добавить строку переадресации в файл /etc/httpd/sites-available/nextcloud.victorz.ru:
<VirtualHost *:80>
ServerName nextcloud.victorz.ru
DocumentRoot /var/www/sub-domains/nextcloud.victorz.ru/html/
DirectoryIndex index.php index.htm index.html
Redirect / https://nextcloud.victorz.ru/
...
Перезагружаем Apache:
systemctl restart httpd