Установка и настройка 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.

Запускаем клиентское приложение и переходим к настройке, кликнув по Войти:

На следующей странице вводим адрес нашего сервера и кликаем по Далее:

Нас перекинет на веб страницу для авторизации — вводим логин и пароль для пользователя. После успешной авторизации можно использовать клиент для синхронизации с файлов с нашим облаком.