====== Установка 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 ===== [[https://mariadb.org/download/?t=repo-config|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 Приводим конфиг к следующему виду: ServerName cloud.kirmolpc.ru ServerAlias www.cloud.kirmolpc.ru ServerAdmin admin@localhost DocumentRoot /var/www/nextcloud/public_html AllowOverride All Require all granted Redirect permanent / https://cloud.kirmolpc.ru/ Header always set Strict-Transport-Security "max-age=15552000; includeSubDomain> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Включаем хост следующей командой: 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', Пример: '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 SetHandler "proxy:unix:/var/run/php/php8.4-fpm.sock|fcgi://localhost/" Перезапускаем 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 ], ], Пример: '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