Установка и настройка Nextcloud + NGINX на Ubuntu

Автор George, Янв. 30, 2023, 01:56

« назад - далее »

George

Подготовка системы

Выполним предварительную настройку, прежде чем начать развертывание Nextcloud.

1. Обновляем списки пакетов.

Актуализируем списки пакетов в репозиториях, чтобы установки проходили без ошибок:

Код: bash
apt update

    При желании, мы также можем обновить пакеты:

 
Код: bash
  apt upgrade

2. Синхронизируем время.

Устанавливаем утилиту chrony:

Код: bash
apt install chrony

Выставляем нужный часовой пояс:

Код: bash
timedatectl set-timezone Europe/Moscow

* в данном примере московское время.

Разрешаем запуск демона chrony:

Код: bash
systemctl enable chrony

3. Настройка брандмауэра.

По умолчанию в системах на базе Deb нет запрещающих правил в брандмауэре и нам ничего не нужно делать дополнительно. Но если в вашем случае настроен и используется брандмауэр на сервере, необходимо открыть порты 80 и 443.

Выполняем команды:

Код: bash
iptables -I INPUT -p tcp --dport 80 -j ACCEPT

Код: bash
iptables -I INPUT -p tcp --dport 443 -j ACCEPT

Сохраним правила с помощью netfilter-persistent:
Код: bash
apt install iptables-persistent

Код: bash
netfilter-persistent save
Настройка сервера баз данных

В качестве СУБД используем MariaDB.

Устанавливаем:

Код: bash
apt install mariadb-server

Разрешаем автозапуск и стартуем сервис:

Код: bash
systemctl enable mariadb
Код: bash
systemctl start mariadb

Задаем пароль для суперпользователя mysql:
Код: bash
mysqladmin -u root password

Подключаемся к MariaDB, создаем базу данных и пользователя:

Код: bash
mysql -uroot -p

Код: bash
CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

>
Код: bash
GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY 'nextcloud';

Код: bash
\q
Установка и настройка веб-сервера
PHP

Перед тем, как устанавливать php, стоит изучить системные требования Nextcloud. Для корректной работы нужно установить рекомендуемую версию PHP.

На момент последнего обновления инструкции, рекомендовалось установить PHP версии 8.1. Для дальнейшего удобства работы, мы сохраним ее в переменную:

Код: bash
export PHP_VER=8.1

Посмотреть, какая версия будет установлена из репозитория системы можно командой:

Код: bash
apt search --names-only '^php[.0-9]{3}$'

а) Если она соответствует рекомендации Nextcloud, вводим команду для установки PHP, PHP-FPM и необходимых расширений:

Код: bash
apt install php php-fpm php-common php-zip php-xml php-intl php-gd php-mysql php-mbstring php-curl php-imagick

б) Если рекомендованной PHP версии в репозитории нет, переходим к инструкции Установка разных версий PHP на Linux Ubuntu. А для установки расширений используем команду:

Код: bash
apt install php${PHP_VER}-fpm php${PHP_VER}-common php${PHP_VER}-zip php${PHP_VER}-xml php${PHP_VER}-intl php${PHP_VER}-gd php${PHP_VER}-mysql php${PHP_VER}-mbstring php${PHP_VER}-curl php${PHP_VER}-imagick php${PHP_VER}-gmp php${PHP_VER}-bcmath libmagickcore-6.q16-6-extra

* где PHP_VER — ранее определенная нами переменная с рекомендованной версией PHP.

Установка php завершена и можно перейти к ее настройке.

Настраиваем php-fpm:

Код: bash
vi /etc/php/${PHP_VER}/fpm/pool.d/www.conf

* путь к данной папке зависит от установленной версии php. В данном примере это 8.1 (задана через переменную PHP_VER).

Снимаем комментарии со следующей строки:

Цитироватьenv[PATH] = /usr/local/bin:/usr/bin:/bin

Настраиваем php.ini:

vi /etc/php/${PHP_VER}/fpm/php.ini

Цитироватьopcache.enable_cli=1
opcache.interned_strings_buffer=32
opcache.revalidate_freq=1

Код: bash
sed -i 's/;opcache.enable=.*/opcache.enable=1/' /etc/php/8.3/fpm/php.ini
Код: bash
sed -i 's/;opcache.enable_cli=.*/opcache.enable_cli=1/' /etc/php/8.3/fpm/php.ini
Код: bash
sed -i 's/;opcache.memory_consumption=.*/opcache.memory_consumption=128/' /etc/php/8.3/fpm/php.ini
Код: bash
sed -i 's/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/' /etc/php/8.3/fpm/php.ini
Код: bash
sed -i 's/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/' /etc/php/8.3/fpm/php.ini

Разрешаем автозапуск php-fpm и перезапускаем его:

Код: bash
systemctl enable php${PHP_VER}-fpm

Код: bash
systemctl restart php${PHP_VER}-fpm
NGINX

Nextcloud можно развернуть на NGINX или Apache. В данной инструкции будем использовать первый.

Устанавливаем веб-сервер:

Код: bash
apt install nginx

Создаем виртуальный домен и настраиваем его для работы с облачным сервисом:

Код: bash
vi /etc/nginx/sites-enabled/nextcloud.conf

Код: vi
server {
        listen 80;
        listen 443 ssl;
        server_name nextcloud.yourdomain.com;

        if ($scheme = 'http') {
            return 301 https://$host$request_uri;
        }

        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 ^~ /.well-known {
                location = /.well-known/carddav { return 301 /remote.php/dav/; }
                location = /.well-known/caldav  { return 301 /remote.php/dav/; }
                location = /.well-known/webfinger  { return 301 /index.php/.well-known/webfinger; }
                location = /.well-known/nodeinfo  { return 301 /index.php/.well-known/nodeinfo; }
                location ^~ /.well-known{ return 301 /index.php/$uri; }
                try_files $uri $uri/ =404;
        }

        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 ^(/core/doc/[^\/]+/)$ $1/index.html;
                try_files $uri $uri/ index.php;
                if ($request_method = OPTIONS) {
                    return 301 $scheme://$server_name/remote.php/webdav/;
                }
        }

        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/php8.1-fpm.sock;
        }

        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires modified +30d;
                access_log off;
        }
}

* где:

    nextcloud.yourdomain.com — домен, на котором будет работать сервис;
    /etc/nginx/ssl — каталог, в котором будут храниться сертификаты;
    /var/www/nextcloud — каталог с порталом.
    fastcgi_pass — обработчик скриптов. В нашем примере используется php-fpm. Обратите внимание, что путь до сокетного файла будет зависить от версии PHP.

Создаем каталог для хранения сертификатов и переходим в него:

Код: bash
mkdir /etc/nginx/ssl

Код: bash
cd /etc/nginx/ssl

Генерируем сертификат:
Код: bash
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=nextcloud.yourdomain.com/CN=nextcloud"

* данная команда создаст сертификат на 4 года для URL nextcloud.yourdomain.com или nextcloud.

В нашем примере мы запустили nextcloud с использованием самоподписанного сертификата. Для продуктивной среды рекомендуется использовать купленный сертификат или бесплатный от Let's Encrypt.

После установки php мог установиться и запуститься apache. Отключаем его:

Код: bash
systemctl stop apache2

Код: bash
systemctl disable apache2

Проверяем конфигурацию nginx и перезапускаем сервис:

Код: bash
nginx -t

Код: bash
systemctl restart nginx

Разрешаем автозапуск:

Код: bash
systemctl enable nginx
Установка Nextcloud

Устанавливаем пакет unzip:

Код: bash
apt install unzip

Imagemagik
Код: bash
apt install imagemagick

На странице nextcloud можно ознакомиться с возможными вариантами загрузки портала. Мы же возьмем последнюю версию.

Переходим во временную папку и скачиваем исходник:

Код: bash
cd /tmp

Код: bash
wget https://download.nextcloud.com/server/releases/latest.zip

Распаковываем скачанный архив:

Код: bash
unzip latest.zip

И переносим содержимое архива в каталог /var/www:

Код: bash
mv nextcloud /var/www

Задаем права доступа:

Код: bash
chown -R www-data:www-data /var/www/nextcloud

Открываем браузер и переходим по адресу https://nextcloud.yourdomain.com, где nextcloud.yourdomain.com — адрес облачного сервиса.

Задаем логин и пароль для администратора. В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим в качестве логина, пароля и базы nextcloud.

Задаем параметры для подключения к базе данных

Завершаем установку.

Оптимизируем работу базы данных:

Код: bash
sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint
Тюнинг после установки

Для корректной работы системы выполним дополнительную настройку. После входа в nextcloud под администратором, переходим в настройки для пользователя:

Переходим в настройку Nextcloud

В разделе «Параметры сервера» переходим в Основные сведения:

Переходим к общим сведениям

В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем:

В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем

Рассмотрим процесс решения некоторых из них.
1. Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ

Открываем на редактирование файл:

Код: bash
vi /etc/php/${PHP_VER}/fpm/php.ini

Меняем настройку для memory_limit:

Код: bash
memory_limit = 512M

Перезапускаем php-fpm:

Код: bash
systemctl restart php${PHP_VER}-fpm
2. В системе не установлены рекомендуемые модули PHP

Данная ошибка устраняется в зависимости от списка модулей, которых не хватает системе. Чаще всего, подходит команда:
Цитироватьdnf install php-<название модуля>

Например:

Код: bash
apt install php-gmp php-bcmath

После перезапускаем php-fpm:
Код: bash
systemctl restart php${PHP_VER}-fpm
3. Не настроена система кеширования

Для решения проблемы мы должны установить и настроить одно из средств кэширования:

    APCu
    Redis
    Memcached

Мы рассмотрим два последних варианта.
Redis

Устанавливаем сам Redis Server и модуль php:

Код: bash
apt install redis-server php-redis

* в случае установки сервера Redis на отдельный сервер, необходимо выполнить на сервере Nextcloud только установку php-redis.

Перезапускаем php-fpm:

Код: bash
systemctl restart php${PHP_VER}-fpm

Открываем конфигурационный файл для nextcloud:

Код: bash
vi /var/www/nextcloud/config/config.php

И добавим:

Код: bash
  'memcache.local' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
      array (
          'host' => 'localhost',
          'port' => 6379,
      ),

Готово.
Memcached

Выполняем установку модуля для php и сам сервис memcached:

Код: bash
apt install memcached php-memcached

После разрешаем его автозапуск:

Код: bash
systemctl enable memcached

Перезапускаем php-fpm:

Код: bash
systemctl restart php${PHP_VER}-fpm

После этого открываем конфигурационный файл для nextcloud:

Код: bash
vi /var/www/nextcloud/config/config.php

И добавим:

  ...
Код: bash
  'memcache.local' => '\\OC\\Memcache\\Memcached',
  'memcache.distributed' => '\\OC\\Memcache\\Memcached',
  'memcached_servers' =>
  array (
    0 =>
    array (
      0 => 'localhost',
      1 => 11211,
    ),
  ),
  ...

Готово.
4. Не указан регион размещения этого сервера Nextcloud

Для решения проблемы открываем конфигурационный файл nextcloud:

Код: bash
vi /var/www/nextcloud/config/config.php

Добавляем:

...
Код: bash
'default_phone_region' => 'RU',
Работа с пользователями из UNIX-Shell

В состав nextcloud входит php-скрипт occ, с помощью которого можно управлять сервисом из командной строки Linux.
Добавление пользователя

Создать нового пользователя можно командой:

Код: bash
sudo -u www-data php /var/www/nextcloud/occ user:add admin

* где admin — имя учетной записи.
Сброс пароля

При необходимости сбросить пароль пользователя, можно воспользоваться командой:

Код: bash
sudo -u www-data php /var/www/nextcloud/occ user:resetpassword admin

* где admin — учетная запись пользователя, чей пароль хотим сбросить.
Подключение папки nextcloud по webdav

Мы можем подключить пользовательские данные nextcloud в качестве сетевого диска или раздела. Рассмотрим процесс для Windows и Linux.
Windows

Для начала необходимо включить службу «Веб-клиент». Для этого открываем от администратора командную строку и вводим команды:

Код: bash
sc config webclient start= auto

Код: bash
net start webclient

* первая команда включит автозапуск службы; вторая — запустит ее.

После открываем командную строку от пользователя и создаем сетевой диск командой:

Код: bash
net use <Буква диска>: https://<путь до nextcloud>/remote.php/webdav /user:user password

Например, для нашей настройки:
Код: bash
net use N: https://nextcloud.yourdomain.com/remote.php/webdav /user:admin password

* где N — буква сетевого диска; nextcloud.yourdomain.com — адрес нашего сервера; admin — учетная запись, которая была создана при установке системы; password — пароль от пользователя admin.

Ограничение на копирование файла с webdav

В Windows при попытке скопировать большой файл с папки webdav, мы можем получить ошибку «Ошибка 0x800700DF: Размер файла превышает установленное ограничение, сохранение файла невозможно.»:

Ошибка при копировании большого файла с папки webdav

Для решения проблемы необходимо на клиенте разрешить больший объем для загрузки файлов. Это делается в реестре — ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters, параметр FileSizeLimitInBytes. Для примера, если задать значение 4294967295 (максимально возможное), то мы получим ограничение в 4 Гб.

Также можно воспользоваться командой:

Код: bash
reg add "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v FileSizeLimitInBytes /t REG_DWORD /d 4294967295 /f

* команду нужно запускать в консоли, запущенной от администратора. В данном примере мы задаем также ограничение в 4 Гб.
Linux

Установим клиент davfs2. Действия будут немного различаться в зависимости от дистрибутива Linux.

а) Ubuntu / Debian:

Код: bash
apt install davfs2

б) CentOS / Red Hat:

Код: bash
yum install davfs2

Теперь мы можем примонтировать

Код: bash
mount -t davfs -o noexec https://nextcloud.yourdomain.com/remote.php/webdav /mnt

* в данном примере мы запустим команду на монтирование раздела по webdav в каталог /mnt. Обращение выполняется на наш сервер nextcloud.yourdomain.com.

После ввода команды, система попросит нас ввести логин и пароль от учетной записи Nextcloud:

  Username: user
  ...
  Password: 

После каталог будет примонтирован.

Для постоянного монтирования серез fstab, открываем файл:

Код: bash
vi /etc/fstab

Добавляем строчку:

Код: bash
https://nextcloud.yourdomain.com/remote.php/webdav/    /mnt    davfs    user,rw,_netdev 0 0

После открываем файл:
Код: bash
vi /etc/davfs2/secrets

И добавляем строку:

Код: bash
/mnt user password

* где /mnt — предполагаемый каталог, куда мы будем монтировать данные; user и password — логин и пароль от учетной записи в Nextcloud.

Монтируем каталог командой:

Код: bash
mount -a
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.