Инструменты пользователя

Инструменты сайта


linux:debian:nextcloud

Установка Nextcloud


Установка Веб-сервер Apache

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

sudo apt install apache2

Добавляем Apache в автозагрузку:

sudo systemctl enable apache2

Запускаем Apache:

sudo systemctl start apache2

Смотрим статус:

sudo systemctl status apache2

Установка PHP для Nextcloud

Добавляем ключ репозитория:

sudo apt install lsb-release ca-certificates curl apt-transport-https
sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb

Добавляем репозиторий:

sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

Обновляем список пакетов в репозиториях:

sudo apt update

Установка PHP 8.4 для NextCloud

sudo apt install php php-common php-bcmath php-curl php-gd php-gmp php-imap php-igbinary php-imagick php-intl php-json php-mbstring php-xml php-zip libapache2-mod-php php-mysql
sudo apt install php-apcu php-bz2 php-cli php-fpm php-memcached php-pear php-soap memcached
sudo apt install libmagickcore-dev librsvg2-bin ffmpeg

Настройка php.ini

Проверяем текущие значения:

grep -E "upload_max_filesize|post_max_size|memory_limit|max_execution_time" /etc/php/8.4/apache2/php.ini

Увеличиваем лимит:

sudo sed -i 's/^upload_max_filesize.*/upload_max_filesize = 4G/; s/^post_max_size.*/post_max_size = 4G/; s/^memory_limit.*/memory_limit = 1024M/; s/^max_execution_time.*/max_execution_time = 3600/; s/^;max_input_vars.*/max_input_vars = 3600/; s/^max_input_time.*/max_input_time = 3600/' /etc/php/8.4/apache2/php.ini

Установка MariaDB для Nextcloud из Официального репозитория Debian

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

sudo apt install mariadb-server mariadb-client

Установка MariaDB 11.4 из Официального репозитория MariaDB

Download MariaDB Server

Добавляем ключ репозитория:

sudo apt-get install apt-transport-https curl
sudo mkdir -p /etc/apt/keyrings
sudo curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

Добавляем репозиторий:

sudo nano /etc/apt/sources.list.d/mariadb.sources
# MariaDB 11.4 repository list - created 2025-11-01 12:08 UTC
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# URIs: https://deb.mariadb.org/11.4/debian
URIs: https://mirror.docker.ru/mariadb/repo/11.4/debian
Suites: bookworm
Components: main
Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp

Обновляем список пакетов в репозиториях:

sudo apt update

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

sudo apt install mariadb-server mariadb-client

Первоначальная настройка MariaDB

Делаем первоначальную настройку базы данных MariaBD:

sudo mariadb-secure-installation

Отвечаем yes / y на следующие вопросы безопасности:

Вопрос Ответ Да/Нет
Введите текущий пароль для пользователя root? Ничего не вводим, нажимаем Enter
Переключиться на аутентификацию unix_socket? Y / n: y
Установить пароль root? Y / n: y
Удалить анонимных пользователей? (Нажмите y - Y для Yes, любой другой символ для No): y
Запретить вход в систему удаленно? (Нажмите y - Y для Yes, любой другой символ для No): y
Удалить тестовую базу данных и получить доступ к ней? (Нажмите y - Y для Yes, любой другой символ для No): y
Обновить таблицы привилегий сейчас? (Нажмите y - Y для Yes, любой другой символ для No): y

Создаём базу для Nextcloud

Подключаемся к Mysql:

sudo mariadb -u root -p

Создаём новую базу:

CREATE DATABASE nextcloud;

Создаём пользователя базы данных, и назначаем все права доступа:

GRANT ALL ON nextcloud.* TO 'nextcloud_user'@'localhost' IDENTIFIED BY 'password';

Сохраняем изменения:

FLUSH PRIVILEGES;

Выходим из базы данных:

EXIT;

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

Установите права доступа на директорию www:

sudo chmod -R 775 /var/www
sudo chown -R $USER:$USER /var/www

Добавляем нашего пользователя в группу www-data:

sudo usermod -aG www-data $USER

Добавляем пользователя www-data в группу нашего пользователя:

sudo usermod -aG $USER www-data

Создаём новый виртуальный хост

Сначала отключим хост по умолчанию:

sudo a2dissite 000-default

Переходим в директорию /var/www:

cd /var/www

Создаём новый каталог:

mkdir nextcloud

Переходи в созданный каталог:

cd nextcloud

Скачиваем Nextcloud:

wget https://download.nextcloud.com/server/releases/nextcloud-31.0.12.zip

Распаковываем архив с Nextcloud:

unzip nextcloud-31.0.12.zip

Удаляем скаченный архив latest.zip, он нам больше не понадобиться:

rm nextcloud-31.0.12.zip

Переименовываем директорию nextcloud в public_html: mv nextcloud public_html

Меняем владельца на www-data: sudo chown -R www-data:www-data public_html

Создаём конфигурационный файл нового хоста: sudo nano /etc/apache2/sites-available/nextcloud.conf

Приводим конфиг к следующему виду:

<VirtualHost *:80>
ServerName cloud.kirmolpc.ru
ServerAlias www.cloud.kirmolpc.ru
ServerAdmin admin@localhost
 
DocumentRoot /var/www/nextcloud/public_html
<Directory /var/www/nextcloud/public_html>
AllowOverride All
Require all granted
Redirect permanent / https://cloud.kirmolpc.ru/
</Directory>
 
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomain>
</IfModule>
 
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Включаем хост следующей командой:

sudo a2ensite nextcloud

Активируем дополнительные модули Apache:

sudo a2enmod rewrite headers env dir mime

Перезапускаем Apache:

sudo systemctl restart apache2

Проверяем загрузку модулей Apache:

sudo apache2ctl -M

Установка Certbot SSL-сертификата

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

sudo apt install certbot python3-certbot-apache

Устанавливаем SSL-на наш домен:

sudo certbot --apache

Отредактируем файл конфигурации ssl:

sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf

Закомментируем или удаляем строчку, иначе, будет циклическое перенаправление на странице:

#Redirect permanent / https://cloud.kirmol.ru/

Перезапускаем Apache:

sudo systemctl restart apache2

Переходим по нашему домену, и завершаем настройку Nextcloud https://cloud.kirmolpc.ru/

Редактируем файл /config/config.php:

sudo nano /var/www/nextcloud/public_html/config/config.php

Добавляем ваш регион и время обслуживания:

    0 => 'localhost',
  'maintenance_window_start' => 1,
  'default_phone_region' => 'RU',

Пример:

<?php
$CONFIG = array (
  'instanceid' => 'occptqnm24ic',
  'passwordsalt' => 'mwnnKZt7a0y6/Ll+Sh/G8X2Y/J7wtu',
  'secret' => 'FO9N2Uk4zUib3CPWPxC/1YcF6bq8R4C590jQ9VJb9ijKcEMm',
  'trusted_domains' => 
  array (
	0 => 'localhost',
    1 => 'cloud.kirmol.ru',
  ),
  'datadirectory' => '/var/www/nextcloud/public_html/data',
  'dbtype' => 'mysql',
  'version' => '31.0.7.1',
  'overwrite.cli.url' => 'https://cloud.kirmol.ru',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextcloud_user',
  'dbpassword' => 'g4f1y6fg#f6t',
  'installed' => true,
  'maintenance_window_start' => 1,
  'default_phone_region' => 'RU',
);

Настройка Memcache

Устанавливаем Memcache и Модуль PHP Memcache:

sudo apt install memcached php8.4-memcached

Добавляем в файл /config/config.php:

sudo nano /var/www/nextcloud/public_html/config/config.php
  'memcache.local' => '\OC\Memcache\Memcached',
  'memcache.distributed' => '\OC\Memcache\Memcached',
  'memcached_servers' => [
     [ '127.0.0.1', 11211 ],
 ],

Настройка PHP-FPM в связке с Apache

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

sudo apt install php8.4-fpm

Проверяем, что PHP-FPM запущен:

sudo service php8.4-fpm status php-fpm8.4 -v ls -la /var/run/php/php8.4-fpm.sock

Запускаем PHP-FPM:

sudo a2enmod mpm_event proxy_fcgi setenvif
sudo a2enconf php8.4-fpm

Перезапускаем Apache, чтобы перезапустить все модули и применить новую конфигурацию:

sudo systemctl restart apache2

Проверяем нашу конфигурацию:

grep -E "upload_max_filesize|post_max_size|memory_limit|max_execution_time|max_input_vars|max_input_time" /etc/php/8.4/fpm/php.ini

Задаём лимиты:

sudo sed -i 's/^upload_max_filesize.*/upload_max_filesize = 4G/; s/^post_max_size.*/post_max_size = 4G/; s/^memory_limit.*/memory_limit = 1024M/; s/^max_execution_time.*/max_execution_time = 3600/; s/^;max_input_vars.*/max_input_vars = 3600/; s/^max_input_time.*/max_input_time = 3600/' /etc/php/8.4/fpm/php.ini

Обновляем конфигурацию PHP-FPM:

sudo nano /etc/php/8.4/fpm/pool.d/www.conf

С этих:

pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

На эти:

pm.max_children = 64
pm.start_servers = 16
pm.min_spare_servers = 16
pm.max_spare_servers = 32

Проверяем текущие значения:

grep -E "pm.max_children|pm.start_servers|pm.min_spare_servers|pm.max_spare_servers" /etc/php/8.4/fpm/pool.d/www.conf

Поменяем текущие значения на нужные нам:

sudo sed -i 's/^pm.max_children = .*/pm.max_children = 64/; s/^pm.start_servers = .*/pm.start_servers = 16/; s/^pm.min_spare_servers = .*/pm.min_spare_servers = 16/; s/^pm.max_spare_servers = .*/pm.max_spare_servers = 32/' /etc/php/8.4/fpm/pool.d/www.conf

или

sudo sed -i 's/^pm.max_children = .*/pm.max_children = 70/; s/^pm.start_servers = .*/pm.start_servers = 20/; s/^pm.min_spare_servers = .*/pm.min_spare_servers = 20/; s/^pm.max_spare_servers = .*/pm.max_spare_servers = 60/' /etc/php/8.4/fpm/pool.d/www.conf

Перезапускаем PHP-FPM, чтобы применились новые значения:

sudo service php8.4-fpm restart

Указываем Apache использования PHP-FPM:

Для HTTP:

sudo nano /etc/apache2/sites-available/nextcloud.conf

Для HTTPS:

sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf
<FilesMatch ".php$"> 
SetHandler "proxy:unix:/var/run/php/php8.4-fpm.sock|fcgi://localhost/"
</FilesMatch>

Перезапускаем Apache:

sudo systemctl restart apache2

Активируем OPCache в PHP

Редактируем файл 10-opcache.ini:

sudo nano /etc/php/8.4/fpm/conf.d/10-opcache.ini

Добавляем следующие параметры:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=12000
opcache.memory_consumption=512
opcache.save_comments=1
opcache.revalidate_freq=60
opcache.jit=on
opcache.jit = 1255
opcache.jit_buffer_size = 256M

Перезапускаем PHP-FPM для применения изменений:

sudo service php8.4-fpm restart

Включаем APCu в PHP

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

sudo apt install php8.4-apcu

Редактируем ini файл

sudo nano /etc/php/8.4/fpm/conf.d/20-apcu.ini

Вносим соответствующие значения:

extension=apcu.so
apc.enable_cli=1

Перезапускаем PHP-FPM и Apache:

sudo systemctl restart php8.4-fpm
sudo systemctl restart apache2

Настраиваем Nextcloud на использование APCu для кэширования:

sudo nano /var/www/nextcloud/public_html/config/config.php
'memcache.local' => '\OC\Memcache\APCu',

Установка и настройка Redis Cache

Установим Redis Server и расширение Redis php:

sudo apt install redis-server php8.4-redis

Запускаем и активируем Redis service:

sudo systemctl start redis-server
sudo systemctl enable redis-server
sudo systemctl status redis-server

Сконфигурируем Redis на использование Unix Socket, редактируем файл redis.conf:

sudo nano /etc/redis/redis.conf
port 0
unixsocket /var/run/redis/redis.sock
unixsocketperm 770

Добавляем пользователя www-data в группу redis:

sudo usermod -aG redis www-data

Настроим Nextcloud для использования Redis для блокировки файлов, редактируем файл /config/config.php:

sudo nano /var/www/nextcloud/public_html/config/config.php
'filelocking.enabled' => 'true',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
     'host'     => '/var/run/redis/redis.sock',
     'port'     => 0,
     'dbindex'  => 0,
     'password' => '',
     'timeout'  => 1.5,
],
'memcache.local' => '\OC\Memcache\Memcached',
  'memcache.distributed' => '\OC\Memcache\Memcached',
  'memcached_servers' => [
     [ '127.0.0.1', 11211 ],
 ],

Пример:

<?php
$CONFIG = array (
  'instanceid' => 'oc08ytpjlohk',
  'passwordsalt' => 'pP/fpXbYgAD1I/DOEDrXoxOJqbN1qS',
  'secret' => 'zaTYSHsCTzzXruQr12BzB5LKcy/NuUWMrMkG8cTiE1n9Pl51',
  'trusted_domains' => 
  array (
    0 => 'localhost',
    1 => 'cloud.kirmolpc.ru',
  ),
  'datadirectory' => '/var/www/nextcloud/public_html/data',
  'dbtype' => 'mysql',
  'version' => '31.0.10.2',
  'overwrite.cli.url' => 'https://cloud.kirmolpc.ru',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextcloud_user',
  'dbpassword' => 'g4f1y6fg#f6t',
  'installed' => true,
  'maintenance_window_start' => 1,
  'default_phone_region' => 'RU',
  'memcache.local' => '\OC\Memcache\APCu',
  'filelocking.enabled' => 'true',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => [
     'host'     => '/var/run/redis/redis.sock',
     'port'     => 0,
     'dbindex'  => 0,
     'password' => '',
     'timeout'  => 1.5,
 ],
 
  'memcache.local' => '\OC\Memcache\Memcached',
  'memcache.distributed' => '\OC\Memcache\Memcached',
  'memcached_servers' => [
     [ '127.0.0.1', 11211 ],
 ],
 
);

Активируем Redis сессию для блокировки в PHP, в файле php.ini:

sudo nano /etc/php/8.4/fpm/php.ini

Находим раздел [Session] и добавляем следующие строки:

redis.session.locking_enabled=1
redis.session.lock_retries=-1
redis.session.lock_wait_time=10000

Пример:

[Session]
; Handler used to store/retrieve data.
; https://php.net/session.save-handler
session.save_handler = files
redis.session.locking_enabled=1
redis.session.lock_retries=-1
redis.session.lock_wait_time=10000

Перезапускаем Redis, PHP-FPM и Apache:

sudo systemctl restart redis-server
sudo systemctl restart php8.4-fpm
sudo systemctl restart apache2

Включение функции красивых ссылок Pretty URL’s

Редактируем файл /config/config.php:

sudo nano /var/www/nextcloud/public_html/config/config.php

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

'htaccess.RewriteBase' => '/',

Обновляем файл .htaccess для правильной переадресации ссылок:

sudo -u www-data php --define apc.enable_cli=1 /var/www/nextcloud/public_html/occ maintenance:update:htaccess

Парочка команд

sudo -u www-data php /var/www/nextcloud/public_html/occ maintenance:repair --include-expensive
sudo -u www-data php /var/www/nextcloud/public_html/occ db:add-missing-indices
sudo -u www-data php /var/www/nextcloud/public_html/occ config:system:set maintenance_window_start --type=integer --value=1

Настройка Cron

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

sudo apt install cron
sudo crontab -u www-data -e
*/5 * * * * php -f /var/www/nextcloud/public_html/cron.php
sudo -u www-data php /var/www/nextcloud/public_html/occ files:scan --all
sudo -u www-data php /var/www/nextcloud/public_html/occ app:update --all
linux/debian/nextcloud.txt · Последнее изменение: Кирилл