Установка и настройка NextCloud на CentOS 8
После установки на сервер CentOS 8 (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. Правильное время.
Устанавливаем утилиту chrony и nano:
dnf install nano chrony -y
Запускаем ее службу:
systemctl enable chronyd --now
Выставляем нужный часовой пояс:
timedatectl set-timezone Europe/Moscow
3. Настройка брандмауэра.
firewall-cmd --permanent --add-service={http,https} firewall-cmd --reload
4. Отключение SELinux.
setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
Настройка сервера баз данных
В качестве СУБД используем MariaDB версии 10.6.17. Устанавливаем:
nano /etc/yum.repos.d/MariaDB.repo
[mariadb] name = MariaDB baseurl = https://mirror.docker.ru/mariadb/yum/10.6.17/centos8-amd64 module_hotfixes=1 gpgkey=https://mirror.docker.ru/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1
Устанавливаем, разрешаем автозапуск и стартуем сервис:
dnf makecache dnf install MariaDB-server systemctl enable mariadb --now
Задаем пароль для суперпользователя mysql:
mysqladmin -u root password
Подключаемся к MariaDB, создаем базу данных и пользователя:
mysql -uroot -p > CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; > GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY 'nextcloud'; > \q
- данными командами мы создали базу данных nextcloud, затем с таким же названием мы создали пользователя и задали ему пароль nextcloud.
Установка и настройка веб-сервера
PHP версии 8.2
clean all dnf update -y dnf install dnf-utils wget mc net-tools htop open-vm-tools unzip -y
PHP 8.2 недоступен в репозиториях по умолчанию, необходимых для установки репозитория Remi:
dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
После этого теперь вы можете сбросить модуль и включить PHP 8.2:
dnf module reset php dnf module install php:remi-8.2
Наконец, выполните следующую команду, чтобы установить PHP 8:
dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
Устанавливаем PHP 8:
dnf install php
Проверяем версию PHP:
php -v
Установить расширения PHP просто со следующим синтаксисом:
dnf install php-{common,xml,xmlrpc,curl,gd,imagick,cli,fpm,mbstring,opcache,zip,pdo,dom,intl,mysqli,json,process,bcmath,gmp,imagick,opcache}
PHP-FPM
Сам пакет php-fpm мы установили на предыдущем шаге. Поэтому на данном этапе необходимо его настроить. Открываем конфигурационный файл:
nano /etc/php-fpm.d/www.conf
Находим опцию listen. Проверяем ее значение:
listen = /run/php-fpm/www.sock
Разрешаем автозапуск php-fpm и запускаем его:
systemctl enable php-fpm --now
NGINX
Nextcloud можно развернуть на NGINX или Apache. В данной инструкции будем использовать первый. Устанавливаем веб-сервер:
nano /etc/yum.repos.d/nginx.repo
#Стабильная версия NGINX [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/8/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true #Основная версия NGINX [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Потом указываем репозиторий прописав:
dnf config-manager --set-enabled nginx-mainline
И сама установка nginx прописываем в терминале команду:
dnf install nginx
Для правильной работы nextcloud запросы должны идти по https. Для этого создаем виртуальный домен и настраиваем его для работы с облачным сервисом в NGINX:
nano /etc/nginx/conf.d/cloud.putyato.ru.conf
server { listen 80; server_name cloud.putyato.ru; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name cloud.putyato.ru; 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 / { 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 ^/.well-known/carddav /remote.php/carddav/ redirect; rewrite ^/.well-known/caldav /remote.php/caldav/ redirect; 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-fpm/www.sock; } location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ { expires modified +30d; access_log off; } location ^~ /.well-known { location = /.well-known/carddav { return 301 /remote.php/dav/; } location = /.well-known/caldav { return 301 /remote.php/dav/; } location /.well-known/acme-challenge { try_files $uri $uri/ =404; } location /.well-known/pki-validation { try_files $uri $uri/ =404; } return 301 /index.php$request_uri; } }
- где putyato.ru — домен, на котором будет работать сервис; cloud.putyato.ru — имя сервера, на котором будет работать nextcloud; /etc/nginx/ssl — каталог, в котором будут храниться сертификаты; /var/www/nextcloud — каталог с порталом.
Создаем каталог для хранения сертификатов и переходим в него:
mkdir /etc/nginx/ssl cd /etc/nginx/ssl
Генерируем сертификат:
openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=cloud.putyato.ru/CN=nextcloud"
- данная команда создаст сертификат на 4 года для URL cloud.putyato.ru или nextcloud.
- в данном примере мы, всего лишь, создали самоподписанный сертификат, который не будет приниматься браузером и нужно будет пропускать предупреждение. Данный метод подходит для тестирования, а для продуктивной среды стоит купить сертификат или получить его бесплатно от Let's Encrypt.
Проверяем конфигурацию nginx, разрешаем его автозапуск и перезапускаем сервис:
nginx -t systemctl enable nginx --now
Установка Nextcloud версии 27.1.3
Переходим во временную папку:
cd /tmp
Заходим на сайт nextcloud (https://download.nextcloud.com/server/releases/) и копируем ссылку на скачивание последней версии программы:
wget https://download.nextcloud.com/server/releases/nextcloud-27.1.3.zip
или
wget "https://cloud.putyato.pro/index.php/s/8gaPwyYzjHybiwb/download/nextcloud-27.1.3.zip" --no-check-certificate -O nextcloud-27.0.2.zip
Распаковываем скачанный архив:
unzip nextcloud-*.zip -d /var/www
Задаем права доступа:
chown -R apache:apache /var/www/nextcloud
Открываем браузер и переходим по адресу https://cloud.putyato.ru, где cloud.putyato.ru — наш адрес облачного сервиса, который мы создали в NGINX. Если мы используем само подписанный сертификат, браузер выдаст предупреждение безопасности — игнорируем его и переходим на страницу.
- так как мы настроили виртуальный домен, важно обратиться к серверу, именно, по имени. Таким образом, настроенный узел (в моем случае, cloud.putyato.ru) должен разрешаться в DNS или быть внесен в локальный файл hosts.
Прописываем логин и пароль администратора, которые хотим использовать для входа, кликаем по Хранилище и база данных:
Переключаемся на MySQL/MariaDB, вводим в качестве логина, пароля и базы : nextcloud
Завершаем установку, при желании, оставим галочку для установки рекомендованных приложений:
После установки мы окажемся в системе.
Проверка безопасности и параметров
Для корректной работы системы выполним дополнительную настройку системы. После входа в nextcloud под администратором, переходим в настройки для пользователя:
В разделе «Параметры сервера» переходим в Основные сведения:
В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем. Рассмотрим процесс решения некоторых из них.
1. PHP не настроен правильно для получения переменных системного окружения
Открываем файл php.ini. При нашей установке, это:
nano /etc/php-fpm.d/www.conf
Снимаем комментарий с параметра PATH:
env[PATH] = /usr/local/bin:/usr/bin:/bin
Перезапускаем php-fpm:
systemctl restart php-fpm
2. Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ
Открываем на редактирование файл:
nano /etc/php.ini
Меняем настройку для memory_limit:
memory_limit = 512M
Перезапускаем php-fpm:
systemctl restart php-fpm
3. В базе данных отсутствуют некоторые индексы
Выполним команду для индексирования баз:
sudo -u apache php /var/www/nextcloud/occ db:add-missing-indices
4. Некоторые индексы базы данных не были преобразованы в тип big int
Выполним команду для преобразования в тип big int:
sudo -u apache php /var/www/nextcloud/occ db:convert-filecache-bigint
На запрос Continue with the conversion отвечаем утвердительно:
Continue with the conversion (y/n)? [n] y
5. Настраиваем модуль OPcache
Открываем конфигурационный файл:
nano /etc/php.d/10-opcache.ini
Редактируем следующее:
... opcache.enable=1 ... opcache.enable_cli=1 ... opcache.interned_strings_buffer=32 ... opcache.max_accelerated_files=10000 ... opcache.memory_consumption=256 ... opcache.save_comments=1 ... opcache.revalidate_freq=1 ...
Перезапускаем php-fpm:
systemctl restart php-fpm
6. MySQL используется в качестве базы данных, но не поддерживает 4-байтовые символы
Выполняем конфигурирование в несколько этапов.
Настройка СУБД Заходим в оболочку mysql:
mysql -uroot -p
Смотрим значение для переменной innodb_file_format:
> show variables like 'innodb_file_format';
Если видим значение «Antelope», меняем его на Barracuda:
> SET GLOBAL innodb_file_format=Barracuda; > quit
Настройка Nextcloud Переводим Nextcloud в режим обслуживания:
sudo -u apache php /var/www/nextcloud/occ maintenance:mode --on
Перезагружаем mariadb (если на первом шаге нам пришлось менять значение для переменной innodb_file_format):
systemctl restart mariadb
Редактирование базы данных Снова подключаемся к консоли управления СУБД:
mysql -uroot -p
Меняем кодировку для базы данных:
> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- где nextcloud — имя созданной нами базы данных.
Выходим из mariadb:
> quit
Также задаем новую кодировку для nextcloud
sudo -u apache php /var/www/nextcloud/occ config:system:set mysql.utf8mb4 --type boolean --value="true"
Преобразуем все таблицы в базе:
sudo -u apache php /var/www/nextcloud/occ maintenance:repair
Завершаем режим обслуживания:
sudo -u apache php /var/www/nextcloud/occ maintenance:mode --off
7. Чтобы поменять PHP8.2 на PHP8.3 и более старшую версию.
PHP 8.3 недоступен в репозиториях по умолчанию, необходимых для установки репозитория Remi:
Проверяем имеется ли нужная версия по ссылки: dnf install http://rpms.remirepo.net/enterprise
Устанавливаем нужный репозиторий (в нашем случае):
dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
После этого теперь вы можете сбросить модуль и включить PHP 8.3 и перезаписать модули еже новой версии:
dnf module reset php dnf module install php:remi-8.3 --allowerasing
Проверяем версию PHP:
php -v
8. Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте //memcache//.
Устанавливаем нужные библиотеки.
dnf install php-memcached memcached php-pecl-memcached -y
После разрешаем автозапуск и запускаем сервис кэширования:
systemctl enable memcached --now systemctl restart php-fpm
Проверяем запустился ли memcached.
ps ax | grep memcached
Должны увидеть:
[root@cloud ~]# ps ax | grep memcached 65140 ? Ssl 0:00 /usr/bin/memcached -p 11211 -u memcached -m 64 -c 1024 -l 127.0.0.1,::1 65169 pts/0 S+ 0:00 grep --color=auto memcached
Теперь в конфиге NextCloud по пути: /var/www/nextcloud/config/config.php добавим строки:
nano /var/www/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\Memcached', 'memcache.distributed' => '\OC\Memcache\Memcached', 'memcached_servers' => [ [ '127.0.0.1', 11211 ], ],
Перезапускаем сервер:
reboot
9. База данных используется для блокировки транзакционных файлов. Для повышения производительности, пожалуйста, настройте //memcache//, если таковой имеется.
Чтобы использовать кэш памяти с транзакционной блокировкой файлов, необходимо установить сервер Redis и соответствующий модуль PHP.
Включите репозиторий:
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
Перечислите все доступные пакеты Redis в репозитории Remi.
dnf module list | grep redis
Смотрим последнюю версию, она на сегодня 7.2
Предварительно может понадобиться сброс модуля редис
dnf module reset redis
Предполагая, что последняя основная версия - 7.2, установите эту версию:
dnf module install redis:remi-7.2 -y
Включите службу Redis для запуска во время загрузки и запускаем сам Redis.
systemctl enable redis.service systemctl start redis.service
Настройка Redis
Откройте файл конфигурации Redis :
nano /etc/redis.conf
Вписываем туда:
maxmemory 128mb maxmemory-policy allkeys-lru save 900 1 save 300 10 save 60 10000
Сохраните и закройте конфигурационный файл, затем перезапустите Redis, чтобы применить изменения.
systemctl restart redis.service
Проверяем запустился ли Redis
ps ax | grep redis
должны увидеть
[root@cloud ~]# ps ax | grep redis 1319 ? Ssl 0:01 /usr/bin/redis-server 127.0.0.1:6379 1786 pts/0 S+ 0:00 grep --color=auto redis
Теперь в конфиге NextCloud по пути: /var/www/nextcloud/config/config.php добавим строки:
nano /var/www/nextcloud/config/config.php
'filelocking.enabled' => true, 'memcache.locking' => '\OC\Memcache\Redis', 'redis' => array( 'host' => 'localhost', 'port' => 6379, 'timeout' => 0.0, 'password' => '', // Optional, if not defined no password will be used. ),
Перезапускаем сервер:
reboot
10. Не указан регион размещения этого сервера Nextcloud
Для устранения данного предупреждения откроем конфигурационный файл NextCloud :
nano /var/www/nextcloud/config/config.php
и добавляем туда
'default_phone_region' => 'RU',
Установка и настройка клиента
Для синхронизации файлов установим и настроим клиента. Nextcloud поддерживает установку на Windows, Linux, Mac, iOS и Android.
Переходим на страницу загрузки Nextcloud и скачиваем нужный клиент. После устанавливаем его, отвечая на все вопросы мастера по умолчанию. Для установки клиента на телефон, пользуемся Google Play или Apple App Store.
Запускаем клиентское приложение и переходим к настройке, кликнув по Войти:
На следующей странице вводим адрес нашего сервера и кликаем по Далее:
Нас перекинет на веб страницу для авторизации — вводим логин и пароль для пользователя. После успешной авторизации можно использовать клиент для синхронизации с файлов с нашим облаком.