Установка и настройка NextCloud на RockyLinux 9.5
После установки на сервер RockyLinux 9.5 (Minimal) (x86_64) 4Gb RAM, 4 CPU, 200Gb SSD, приступаем к подготовке сервера.
Подготовка сервера
1. Системные требования
С актуальными системными требованиями можно ознакомиться на сайте разработчика в разделе Administration Manual - Installation and server configuration - System requirements. Необходимо убедиться, что наш сервер соответствует данным требованиям.
dnf update -y dnf upgrade -y
2. Правильное время.
Устанавливаем утилиту epel-release, chrony и nano:
dnf install epel-release nano open-vm-tools chrony -y
Запускаем ее службу:
systemctl enable chronyd --now
Выставляем нужный часовой пояс:
timedatectl set-timezone Europe/Moscow
3. Отключение SELinux.
setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
4. Установка репозиториев.
Устанавливаем репозиторий Remi (ссылка для Rocky Linux 9):
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
5. Установка MariaDB
Подключение актуального репозитория:
В примерах выше мы установили СУБД из репозиториев операционных систем. А значит — нет гарантии, что будет установлена последняя версия MariaDB. Для решения задачи мы можем подключить официальный репозиторий самого разработчика.
Генерируем репозиторий mariadb.repo.
Скачиваем скрипт из оф.сайта для генерации репозитория mariadb.repo и даем ему право на выполнение.
cd ~ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup chmod +x mariadb_repo_setup
После предоставления необходимых прав, нужно запустить этот скрипт и он уже сгенерирует репозиторий.
./mariadb_repo_setup
Итак, после выполнения скрипта файл mariadb.repo будет сгенерирован в директории /etc/yum.repos.d.
Заходим и смотрим, что он там намутил...
nano /etc/yum.repos.d/mariadb.repo
После генерации репозитория теперь запускаем установку самой MariaDB:
dnf install mariadb mariadb-server --allowerasing
Чтобы, проверить какие пакеты установились нужно использовать команду:
yum list installed | grep mariadb
Разрешаем автозапуск и запускаем СУБД:
systemctl enable mariadb --now
Проверьте состояние службы MariaDB, выполнив следующую команду.
systemctl status mariadb
Сразу создаем пароль для учетной записи root:
mysqladmin -u root password
Обновляем кэш для всех подключённых репозиториев:
dnf makecache
Обновляем все установленные пакеты до последних версий:
dnf upgrade -y
7. PHP версии 8.3
На момент написания этой статьи версией PHP по умолчанию на RockyLinux 9.5 является PHP 8.0. Согласно системным требованиям Nexcloud по адресу https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html мы собираемся установить PHP 8.3 и использовать его для установки Nextcloud.
Выводим список модулей PHP, которые могут быть включены:
dnf module list php
[root@cloud ~]# dnf module list php Last metadata expiration check: 0:00:32 ago on Fri Jan 3 12:16:33 2025. Rocky Linux 9 - AppStream Name Stream Profiles Summary php 8.1 common [d], devel, minimal PHP scripting language php 8.2 common [d], devel, minimal PHP scripting language Remi's Modular repository for Enterprise Linux 9 - x86_64 Name Stream Profiles Summary php remi-7.4 common [d], devel, minimal PHP scripting language php remi-8.0 common [d], devel, minimal PHP scripting language php remi-8.1 common [d], devel, minimal PHP scripting language php remi-8.2 common [d], devel, minimal PHP scripting language php remi-8.3 common [d], devel, minimal PHP scripting language php remi-8.4 common [d], devel, minimal PHP scripting language
Как видно выше, теперь мы можем установить PHP 8.3.
Чтобы включить источник по умолчанию для установки этого пакета скриптов на нашей машине AlmaLinux, нам нужно сначала сбросить его настройки, а затем указать желаемую версию для включения.
dnf module reset php dnf module enable php:remi-8.3 -y
Вот и все, мы перешли на PHP 8.3. Теперь, чтобы установить PHP 8.3 с необходимыми расширениями, мы можем выполнить эту команду ниже:
dnf install php -y dnf install httpd 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 -y
После завершения установки служба PHP-FPM будет запущена, но не будет включена после перезагрузки сервера. Вы можете проверить и подтвердить установленную версию PHP с помощью этой команды.
php -v
Он вернет такой вывод:
[root@cloud ~]# php -v PHP 8.3.15 (cli) (built: Dec 17 2024 18:18:02) (NTS gcc x86_64) Copyright (c) The PHP Group Zend Engine v4.3.15, Copyright (c) Zend Technologies with Zend OPcache v8.3.15, Copyright (c), by Zend Technologies
Создаём каталоги
mkdir -p /var/www/cloud.putyato.ru/html mkdir -p /var/www/cloud.putyato.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 в самом конце дописываем строку:
nano /etc/httpd/conf/httpd.conf
........ Include /etc/httpd/sites-enabled
Добавляем или изменяем строку раскомментировав:
....... ServerName cloud.putyato.ru ........
Создаём файл /etc/httpd/sites-available/cloud.putyato.ru со следующим содержимым:
nano /etc/httpd/sites-available/cloud.putyato.ru
<VirtualHost *:80> ServerName cloud.putyato.ru DocumentRoot /var/www/cloud.putyato.ru/html/ DirectoryIndex index.php index.htm index.html CustomLog "/var/log/httpd/cloud.putyato.ru-access_log" combined ErrorLog "/var/log/httpd/cloud.putyato.ru-error_log" <Directory /var/www/cloud.putyato.ru/html/> Require all granted AllowOverride All Options FollowSymLinks MultiViews <IfModule mod_dav.c> Dav off </IfModule> </Directory> </VirtualHost>
Если во время настройки вы хотите отлаживать процесс и обращаться к серверу по IP, то добавляем ServerAlias. Пример:
... ServerName cloud.putyato.ru ServerAlias 10.7.7.22 ...
Создаём символическую ссылку на данный файл:
ln -s /etc/httpd/sites-available/cloud.putyato.ru /etc/httpd/sites-enabled/
Проверяем и перезапускаем Apache:
apachectl configtest systemctl restart httpd
Настройка PHP
В файле /etc/opt/remi/php83/php.ini раскомментировать и изменить или добавить строки:
nano /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 = "Europe/Moscow" ........
Ряд настроек позволит без проблем загружать файлы большого размера.
date.timezone = «Europe/Moscow» — для города Москва в РФ. Указывайте вашу временную зону, которую можете найти в интернете.
Обратите внимание, что для того, чтобы все корректно работало в Nextcloud, ваш часовой пояс в файле php.ini должен совпадать с настройками часового пояса вашего компьютера. Вы можете узнать часовой пояс компьютера командой:
ls -al /etc/localtime
В этом случае у вас будет показана информация следующего вида:
/etc/localtime -> ../usr/share/zoneinfo/Europe/Moscow
В файле /etc/opt/remi/php83/php.d/40-apcu.ini раскомментировать и изменить или добавить строки:
nano /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 раскомментировать и изменить или добавить строку:
nano /etc/opt/remi/php83/php.d/10-opcache.ini
opcache.interned_strings_buffer=16
Проверяем и перезапускаем Apache:
apachectl configtest systemctl restart httpd
Настройка MariaDB
Включаем автозапуск и запускаем:
systemctl enable mariadb systemctl restart mariadb
Настраиваем:
sudo mariadb-secure-installation
1. На вопрос «Enter current password for root (enter for none):» нажимаем Enter.
2. На вопрос «Switch to unix_socket authentication [Y/n]» вводим n и нажимаем Enter. Можете подробнее изучить эту тему и выбирать другий вариант.
3. На вопрос «Change the root password? [Y/n]» нажимаем Enter, т.е. принимаем по умолчанию ответ Y (да).
4. Далее дважды вводим новый пароль, чтобы установить пароль пользователя root базы данных (не операционной системы). При вводе пароль не отображается, поэтому будьте аккуратны.
5. Далее на вопрос «Remove anonymous users? [Y/n]» нажимаем Enter.
6. На вопрос «Disallow root login remotely? [Y/n]» нажимаем Enter.
7. На вопрос «Remove test database and access to it? [Y/n]» нажимаем Enter.
8. На вопрос «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, раскомментировать и изменить или добавить строки:
nano /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/cloud.putyato.ru/html/
Изменяем права доступа к каталогам для пользователя apache:
chown -Rf apache.apache /var/www/cloud.putyato.ru/html chown -Rf apache.apache /var/www/cloud.putyato.ru/data chmod 770 /var/www/cloud.putyato.ru/data/
Настройка Firewall
Открываем порты на которых будет работать Nextcloud:
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload
Настройка работы по HTTPS
Cгенерируйте SSL по умолчанию для localhost с помощью команды openssl ниже. Но если у вас уже есть сертификаты " /etc/pki/tls/private/localhost.key " и " /etc/pki/tls/certs/localhost.crt ", вы можете пропустить этот этап.
openssl req -newkey rsa:2048 -nodes -keyout /etc/pki/tls/private/localhost.key -x509 -days 365 -out /etc/pki/tls/certs/localhost.crt
Вы можете просто нажать Enter для ответа на все вопросы, поскольку этот сертификат будет использоваться только для локального хоста, а не для доменного имени WordPress.
Далее:
sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp apache /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt
Далее измените рабочий каталог на « /etc/httpd/conf.d/ » и создайте новую конфигурацию « well-known.conf » с помощью редактора nano.
cd /etc/httpd/conf.d/ nano well-known.conf
Добавьте следующие конфигурации.
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" <Directory "/var/lib/letsencrypt/"> AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS </Directory>
Проверяем и перезапускаем апачи
apachectl configtest sudo systemctl restart httpd
В файле /etc/httpd/conf/httpd.conf добавим или изменим строку раскомментировав:
nano /etc/httpd/conf/httpd.conf
...... LoadModule ssl_module modules/mod_ssl.so
Мы установим SSL-сертификат для нашего сайта Nextcloud, используя бесплатный SSL-сертификат от Lets Encrypt.
При настройке будем использовать ключи и сертификаты, которые получили (купили) где-либо, т.е. не будет использоваться Let’s Encrypt. Я его не использую, так как облако у меня работает на нестандартных портах и развёрнуто за роутером на домашнем сервере, куда доступ для всех, включая Let’s Encrypt, закрыт.
Для использования Let’s Encrypt воспользуйтесь рекомендациями из официальной документации https://docs.rockylinux.org/guides/security/generating_ssl_keys_lets_encrypt
dnf install certbot python3-certbot-apache -y
После установки вы можете запустить эту команду для выпуска SSL-сертификата. Опять же, не забудьте заменить поддомен на ваше фактическое имя домена или поддомена; оно должно совпадать с именем в файле конфигурации блока сервера nginx, который мы создали ранее. Также убедитесь, что домен или поддомен уже указывает на IP-адрес вашего сервера.
certbot --apache
Обязательно ответьте на вопросы, и вы увидите примерно такой вывод:
[root@cloud ~]# certbot --apache Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): admin@putyato.ru - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: N Account registered. Which names would you like to activate HTTPS for? We recommend selecting either all domains, or all domains in a VirtualHost/server block. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: cloud.putyato.ru - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1 Requesting a certificate for cloud.putyato.ru Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/cloud.putyato.ru/fullchain.pem Key is saved at: /etc/letsencrypt/live/cloud.putyato.ru/privkey.pem This certificate expires on 2025-04-03. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for cloud.putyato.ru to /etc/httpd/sites-available/cloud.putyato.ru-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://cloud.putyato.ru - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Вносим изменения в файл /etc/httpd/sites-available/cloud.putyato.ru заменяем его содержимое на:
nano /etc/httpd/sites-available/cloud.putyato.ru
<VirtualHost *:80> ServerName cloud.putyato.ru ServerAdmin admin@putyato.ru Redirect / https://cloud.putyato.ru/ </VirtualHost> <VirtualHost *:443> ServerName cloud.putyato.ru DocumentRoot /var/www/cloud.putyato.ru/html/ DirectoryIndex index.php index.htm index.html CustomLog "/var/log/httpd/cloud.putyato.ru-access_log" combined ErrorLog "/var/log/httpd/cloud.putyato.ru-error_log" SSLEngine on SSLProtocol all -SSLv2 -SSLv3 -TLSv1 SSLCertificateFile /etc/letsencrypt/live/cloud.putyato.ru/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/cloud.putyato.ru/privkey.pem # SSLCertificateChainFile не нужен в современных версиях Apache. Все промежуточные сертификаты помещаю> <Directory /var/www/cloud.putyato.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>
Или измените рабочий каталог на « /etc/httpd/conf.d » и создайте новую конфигурацию « nextcloud.conf » с помощью редактора nano.
cd /etc/httpd/conf.d/ nano nextcloud.conf
<VirtualHost *:80> ServerName cloud.putyato.ru ServerAdmin admin@putyato.ru Redirect / https://cloud.putyato.ru/ </VirtualHost> <VirtualHost *:443> ServerName cloud.putyato.ru DocumentRoot /var/www/cloud.putyato.ru/html/ DirectoryIndex index.php index.htm index.html CustomLog "/var/log/httpd/cloud.putyato.ru-access_log" combined ErrorLog "/var/log/httpd/cloud.putyato.ru-error_log" SSLEngine on SSLProtocol all -SSLv2 -SSLv3 -TLSv1 SSLCertificateFile /etc/letsencrypt/live/cloud.putyato.ru/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/cloud.putyato.ru/privkey.pem # SSLCertificateChainFile не нужен в современных версиях Apache. Все промежуточные сертификаты помещаю> <Directory /var/www/cloud.putyato.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>
Перезапускаем Apache:
systemctl restart httpd
Запуск и настройка Nextcloud
Настраиваем cron. Создаём файл для cron для пользователя apache:
crontab -u apache -e
Откроется консольный редактор. Вписываем следующее:
*/5 * * * * /opt/remi/php83/root/usr/bin/php -f /var/www/cloud.putyato.ru/html/cron.php
Далее нажимаем клавишу Escape (ESC), чтобы выйти из режима редактирования и вводим команду:
:wq
Нажимаем клавишу Enter. Редактор сохранит данные в файле /var/spool/cron/apache и закроется.
Переходим на сайт по адресу http://cloud.putyato.ru и видим первичное окно настройки, в котором можно задавать настройки.
Продолжаем настройку:
- Указываем логин и пароль учётной записи администратора, которую создаст Nextcloud.
- Указываем путь к каталогу с данными. В нашем случае мы создали каталог /var/www/cloud.putyato.ru/data. В вашем случае он может быть в любом другом месте. Не размещать его в каталоге html, в котором находятся служебные файлы Nextcloud.
- Указываем базу данных MariaDB: указываем учётную запись администратора к базе данных, имя базы данных для Nextcloud, хост базы данных оставляем по умолчанию.
Нажимаем кнопку Установить. Если вы всё правильно сделали, так как написано в данной статье, то вы увидите страницу, на которой предлагают установить рекомендованные приложения.
Создаём индексы в базе данных и проводим миграцию (команда выполняется от имени пользователя apache):
sudo -u apache /opt/remi/php83/root/usr/bin/php /var/www/cloud.putyato.ru/html/occ db:add-missing-indices sudo -u apache /opt/remi/php83/root/usr/bin/php /var/www/cloud.putyato.ru/html/occ maintenance:repair --include-expensive
В файл /var/www/cloud.putyato.ru/html/config/config.php добавляем строки:
nano /var/www/cloud.putyato.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, ),
Исправляем:
nano /var/www/cloud.putyato.ru/html/config/config.php
....... 'trusted_domains' => array ( 0 => 'localhost', 1 => 'cloud.putyato.ru', 2 => '10.7.7.22', ), .......
На данном этапе система настроена и работает. Однако рекомендую настроить работу по протоколу HTTPS в целях повышения безопасности.
Удаление ненужного
Удаляем ненужные данные:
rm -f /tmp/latest.zip rm -fR /tmp/nextcloud
Настройка виртуального хоста Apache для Nextcloud (не нужно!)
На этом этапе вы добавите новую конфигурацию виртуального хоста Apache/httpd для Nextcloud.
1. Измените рабочий каталог на « /etc/httpd/conf.d » и создайте новую конфигурацию « nextcloud.conf » с помощью редактора nano.
cd /etc/httpd/conf.d/ nano nextcloud.conf
Измените подробное доменное имя и путь к каталогу SSL на свои собственные и вставьте конфигурацию в файл « nextcloud.conf ».
<VirtualHost *:80> ServerName cloud.putyato.ru ServerAlias 10.7.7.24 # auto redirect HTTP to HTTPS Redirect permanent / https://cloud.putyato.ru/ </VirtualHost> <VirtualHost *:443> ServerName cloud.putyato.ru ServerAlias 10.7.7.24 DocumentRoot /var/www/cloud.putyato.ru/html/ Protocols h2 http/1.1 # auto redirect www to non-www <If "%{HTTP_HOST} == 'www.cloud.putyato.ru'"> Redirect permanent / https://cloud.putyato.ru/ </If> # log files ErrorLog /var/log/httpd/cloud.putyato.ru-error.log CustomLog /var/log/httpd/cloud.putyato.ru-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/cloud.putyato.ru/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/cloud.putyato.ru/privkey.pem # HSTS <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule> <Directory /var/www/cloud.putyato.ru/html/> Options +FollowSymlinks AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/cloud.putyato.ru/html SetEnv HTTP_HOME /var/www/cloud.putyato.ru/html </Directory> </VirtualHost> <pre> Проверяем и перезапускаем апачи <pre> apachectl configtest sudo systemctl restart httpd