DT Wiki

Установка Nextcloud на Debian12 + Nginx + PHP 8.2 + MariaDB

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

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

su

вводим пороль root
Дадим необходимые права для пользователя debuser

/sbin/usermod -aG sudo debuser

Где вместо debuser надо вставить настоящее имя пользователя
Затем необходимо перелогиниться пользовательской учеткой

su debuser

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

sudo apt update && sudo apt -y upgrade

Устанавливаем вспомогательные утилиты:

sudo apt install -y chrony mc nginx mariadb-server smbclient ufw lsb-release ca-certificates apt-transport-https software-properties-common wget curl

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

sudo timedatectl set-timezone Europe/Moscow

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

sudo systemctl enable --now chrony

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

sudo ufw allow SSH
sudo ufw allow 'NGINX FULL'
sudo ufw allow 'DNS'

Активируем UFW

sudo ufw enable

Эта команда так же добавляет его в автозагрузку

Настройка сервера баз данных MariaDB

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

sudo systemctl enable --now mariadb

Задаем пароль для суперпользователя mysql:

sudo mysql_secure_installation

На все вопросы отвечаем положительно

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

sudo mysql -e "CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;"
sudo mysql -e "GRANT ALL PRIVILEGES ON nextcloud.* TO nextadmin@localhost IDENTIFIED BY 'Str0ngP@$$w0rD';"

Установка и настройка PHP

sudo apt install -y php-{fpm,common,zip,xml,intl,gd,mysql,mbstring,curl,imagick,gmp,bcmath,redis,memcached} libmagickcore-6.q16-6-extra

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

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

sudo mcedit /etc/php/8.2/fpm/pool.d/www.conf

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

env[PATH] = /usr/local/bin:/usr/bin:/bin

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

sudo mcedit /etc/php/8.2/fpm/php.ini

Внесём изменения в следуущих строках

memory_limit = 512M
opcache.enable_cli=1
opcache.memory_consumption = 128
opcache.interned_strings_buffer=32
opcache.max_accelerated_files = 10000
opcache.revalidate_freq=1
opcache.save_comments = 1

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

sudo systemctl enable --now php8.2-fpm

Настраиваем NGINX

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

sudo mcedit /etc/nginx/sites-enabled/nextcloud.conf

Добавляем следующее содержимое

server {
        listen 80;
        listen 443 ssl;
        server_name 192.168.0.203;

        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;

        types { application/javascript mjs; }

        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;
        }

        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.2-fpm.sock;
        }

        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires modified +30d;
                access_log off;
        }
        # Serve static files
        location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
                try_files $uri /index.php$request_uri;
        }

Создаём папку для SSL ключа и сертификата

sudo mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl

Генерируем самоподписной сертификат:

sudo openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=MSK/L=DME/O=Flamandia/OU=IT Department/CN=cloud.home.net/CN=nextcloud"

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

После установки php мог установиться и запуститься WEB сервер apache, поэтому отключаем его:

sudo systemctl stop apache2
sudo systemctl disable apache2

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

sudo nginx -t
sudo systemctl enable --now nginx

Установка самого Nextcloud

Скачаем в домашний каталог архив Nextcloud

cd ~/
wget https://download.nextcloud.com/server/releases/latest.tar.bz2

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

sudo tar -C /var/www -xjvf latest.tar.bz2

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

sudo chown -R www-data:www-data /var/www/nextcloud

Первый запуск

Открываем браузер и переходим по адресу https://cloud.home.net

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

Установка Redis и Memcached

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

sudo mcedit /var/www/nextcloud/config/config.php

И добавим:

  'memcache.local' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
      array (
          'host' => 'localhost',
          'port' => 6379,
        ),
  'memcache.local' => '\\OC\\Memcache\\Memcached',
  'memcache.distributed' => '\\OC\\Memcache\\Memcached',
  'memcached_servers' =>
  array (
    0 =>
    array (
      0 => 'localhost',
      1 => 11211,
      ),
    ),

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

sudo systemctl restart php8.2-fpm

Готово, пользуемся 😃