Top.Mail.Ru

Как установить Nextcloud на Ubuntu вручную и без готовых скриптов

2
Как установить Nextcloud на Ubuntu вручную и без готовых скриптов

Nextcloud можно установить различными способами. Например, через Docker или веб-инсталлятор. Это удобно и быстро, но подходит далеко не всем. Например, если вы хотите точно понимать, что что именно установлено на сервере, где лежат файлы, как настроен PHP,  то такой метод вам не подойдет. 

В этой инструкции разберём ручную установку Nextcloud на Ubuntu 24.04 LTS. Это не самый короткий путь, зато он даёт нормальный контроль над системой. Официальная документация Nextcloud как раз описывает установку из .tar-архива поверх классического 

Что понадобится до начала

Перед установкой лучше подготовить несколько вещей.

Нужен сервер с Ubuntu, доступ по SSH и пользователь с правами sudo. Также нужен домен или поддомен, например:

cloud.example.com

A-запись домена должна указывать на IP-адрес сервера. Технически Nextcloud можно открыть и по IP, но для нормальной работы HTTPS, мобильных клиентов и синхронизации лучше сразу использовать домен.

Обновляем систему

Начинаем с базового обновления пакетов:

sudo apt update

sudo apt upgrade -y

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

sudo reboot

Затем снова подключаемся по SSH.

Устанавливаем Apache, MariaDB, PHP и нужные модули

Nextcloud работает как PHP-приложение. Ему нужны веб-сервер, база данных и набор PHP-модулей. В официальной документации среди обязательных модулей указаны, например, curl, gd, xml, mbstring, zip, zlib и другие; также отдельно нужен PHP-коннектор для выбранной базы данных, в нашем случае — MySQL/MariaDB. 

Ставим Apache, MariaDB, PHP-FPM, Redis и основные расширения PHP:

sudo apt install -y \

apache2 mariadb-server redis-server \

bzip2 curl wget tar unzip imagemagick ffmpeg \

php8.3-fpm php8.3-cli php8.3-common \

php8.3-mysql php8.3-zip php8.3-gd php8.3-mbstring \

php8.3-curl php8.3-xml php8.3-intl php8.3-bcmath \

php8.3-gmp php8.3-imagick php8.3-apcu php8.3-redis

Проверим, что PHP установлен:

php -v

Включаем нужные модули Apache:

sudo a2enmod rewrite headers env dir mime ssl proxy_fcgi setenvif http2

sudo a2enconf php8.3-fpm

Если на сервере случайно включён Apache WebDAV, его лучше отключить. У Nextcloud есть собственный WebDAV-сервер, и внешний mod_webdav ему не нужен. В документации Nextcloud прямо сказано отключить Apache mod_webdav, если он включён. 

sudo a2dismod dav dav_fs

Если модуль не был включён, Apache просто сообщит об этом. 

Далее перезапускаем службы:

sudo systemctl restart apache2

sudo systemctl restart php8.3-fpm

sudo systemctl restart mariadb

Настраиваем PHP под Nextcloud

У Nextcloud часто возникают проблемы не из-за самой установки, а из-за слишком низких лимитов PHP. Например, вы поставили сервер, всё открылось, но потом вы не можете загружать слишком большие файлы. 

Чтобы это исправить, открываем конфиг PHP-FPM:

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

Найдите и измените параметры:

memory_limit = 512M

upload_max_filesize = 2G

post_max_size = 2G

max_execution_time = 360

max_input_time = 360

Теперь откроем PHP CLI. Он используется для команд occ и фоновых задач:

sudo nano /etc/php/8.3/cli/php.ini

Там выставляем похожие значения:

memory_limit = 512M

Nextcloud также рекомендует настроить OPcache. Он ускоряет PHP-приложения, потому что хранит скомпилированный байткод и не заставляет PHP каждый раз обрабатывать одни и те же файлы заново. 

В файле PHP-FPM можно добавить или проверить такие параметры:

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=128

opcache.interned_strings_buffer=16

opcache.max_accelerated_files=10000

opcache.save_comments=1

opcache.revalidate_freq=60

Для APCu в CLI включим отдельный параметр:

sudo nano /etc/php/8.3/mods-available/apcu.ini

Добавьте строку:

apc.enable_cli=1

После этого перезапускаем PHP-FPM:

sudo systemctl restart php8.3-fpm

Готовим базу данных MariaDB

Nextcloud можно установить на SQLite, MySQL/MariaDB или PostgreSQL. SQLite лучше оставить для тестов и небольших инсталляций. Для нормального сервера берём MariaDB.

Сначала выполним базовую настройку безопасности MariaDB:

sudo mysql_secure_installation

Скрипт задаст несколько вопросов. Обычно можно включить удаление анонимных пользователей, запрет удалённого входа root и удаление тестовой базы.

Теперь зайдём в MariaDB:

sudo mysql

Создадим базу и пользователя. Пароль замените на свой:

CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'ЗДЕСЬ_СЛОЖНЫЙ_ПАРОЛЬ';

GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';

FLUSH PRIVILEGES;

EXIT;

Дополнительно настроим MariaDB под требования Nextcloud. Для MySQL/MariaDB официальная документация указывает InnoDB, уровень изоляции READ COMMITTED и корректную настройку binary logging, если он используется. 

Создадим отдельный конфиг:

sudo nano /etc/mysql/mariadb.conf.d/99-nextcloud.cnf

Добавим:

[mysqld]

transaction_isolation = READ-COMMITTED

binlog_format = ROW

innodb_file_per_table = 1

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

sudo systemctl restart mariadb

Скачиваем Nextcloud

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

cd /tmp

Скачиваем архив:

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

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

Nextcloud на странице загрузки рекомендует проверять целостность архива через MD5 или SHA256, а при необходимости ещё и через PGP-подпись. 

Проверим SHA256:

sha256sum latest.tar.bz2

cat latest.tar.bz2.sha256

Хэши должны совпасть. Если не совпали, архив нельзя использовать: скачайте его заново и проверьте ещё раз.

Распаковываем Nextcloud в /var/www:

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

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

sudo mkdir -p /var/ncdata

Почему не оставить данные внутри /var/www/nextcloud/data? Потому что для безопасности лучше держать каталог данных вне веб-корня. Это прямо рекомендует документация Nextcloud. 

Выставляем владельца:

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

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

Права можно сделать следующими:

sudo find /var/www/nextcloud -type d -exec chmod 750 {} \;

sudo find /var/www/nextcloud -type f -exec chmod 640 {} \;

sudo chmod 750 /var/ncdata

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

Создаём конфиг сайта:

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

Вставляем конфигурацию. Домен замените на свой:

<VirtualHost *:80>

ServerName cloud.example.com

DocumentRoot /var/www/nextcloud/

<Directory /var/www/nextcloud/>

Require all granted

AllowOverride All

Options FollowSymLinks MultiViews

<IfModule mod_dav.c>

Dav off

</IfModule>

</Directory>

ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log

CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined

</VirtualHost>

Далее отключаем дефолтный сайт Apache и включаем Nextcloud:

sudo a2dissite 000-default.conf

sudo a2ensite nextcloud.conf

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

sudo apache2ctl configtest

Если видите Syntax OK, перезагружаем Apache:

sudo systemctl reload apache2

Открываем порты в firewall

Если используете UFW, разрешите SSH и веб-трафик:

sudo ufw allow OpenSSH

sudo ufw allow "Apache Full"

sudo ufw enable

sudo ufw status

Важно не включать firewall до разрешения OpenSSH, иначе можно отрезать себе доступ к серверу.

Устанавливаем Nextcloud через командную строку

Nextcloud можно завершить через веб-мастер в браузере, но для ручной установки удобнее использовать occ. Это штатная консольная утилита Nextcloud. 

Переходим в каталог Nextcloud:

cd /var/www/nextcloud

Запускаем установку:

sudo -u www-data php occ maintenance:install \

  --database "mysql" \

  --database-name "nextcloud" \

  --database-user "nextcloud" \

  --database-pass "ЗДЕСЬ_ПАРОЛЬ_ОТ_БАЗЫ" \

  --database-host "localhost" \

  --admin-user "admin" \

  --admin-pass "ЗДЕСЬ_ПАРОЛЬ_АДМИНА" \

  --data-dir "/var/ncdata"

Теперь добавим доверенный домен:

sudo -u www-data php occ config:system:set trusted_domains 1 --value=cloud.example.com

И зададим основной URL:

sudo -u www-data php occ config:system:set overwrite.cli.url --value=https://cloud.example.com

Подключаем HTTPS

Мы не рекомендуем использовать HTTP для Nextcloud. Все же это сервис для хранения для достаточно чувствительной информации. И лучше, чтобы она была защищена. 

Поэтому ставим Certbot и Apache-плагин:

sudo apt install -y certbot python3-certbot-apache

Получим сертификат:

sudo certbot --apache -d cloud.example.com

Во время настройки Certbot спросит email и предложит включить редирект с HTTP на HTTPS. Для Nextcloud редирект лучше включить.

Проверить автообновление сертификата можно так:

sudo certbot renew --dry-run

После получения сертификата откройте в браузере:

https://cloud.example.com

Если всё сделано правильно, вы увидите страницу входа Nextcloud.

Включаем фоновые задачи через cron

Nextcloud должен регулярно выполнять служебные задачи: чистить временные файлы, обрабатывать уведомления, выполнять задания приложений. По умолчанию может использоваться AJAX, но это не самый лучший вариант: задача запускается только при посещении веб-интерфейса. 

Включаем cron-режим следующей командой:

sudo -u www-data php /var/www/nextcloud/occ background:cron

Открываем crontab пользователя www-data:

sudo crontab -u www-data -e

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

*/5 * * * * php -f /var/www/nextcloud/cron.php

Сохраняем файл и проверяем:

sudo crontab -u www-data -l

Настраиваем кэш: APCu и Redis

Без кэша Nextcloud будет работать, но в админке появятся предупреждения, а интерфейс и синхронизация могут быть заметно тяжелее. Для новых установок обычно рекомендуют использовать связку APCu и Redis. 

Мы уже поставили php8.3-apcu, php8.3-redis и redis-server. Теперь настроим Redis через Unix-сокет.

Откройте конфиг Redis:

sudo nano /etc/redis/redis.conf

Найдите или добавьте параметры:

port 0

unixsocket /run/redis/redis-server.sock

unixsocketperm 770

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

sudo usermod -aG redis www-data

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

sudo systemctl restart redis-server

sudo systemctl restart php8.3-fpm

sudo systemctl restart apache2

Теперь добавим настройки кэша в Nextcloud:

cd /var/www/nextcloud

sudo -u www-data php occ config:system:set memcache.local --value='\OC\Memcache\APCu'

sudo -u www-data php occ config:system:set memcache.distributed --value='\OC\Memcache\Redis'

sudo -u www-data php occ config:system:set memcache.locking --value='\OC\Memcache\Redis'

sudo -u www-data php occ config:system:set redis host --value='/run/redis/redis-server.sock'

sudo -u www-data php occ config:system:set redis port --type=integer --value=0

Ещё раз проверим статус:

sudo -u www-data php occ status

Настраиваем понятные ссылки

У Nextcloud бывают ссылки с index.php внутри. Их можно сделать чище.

Добавим базу для rewrite:

sudo -u www-data php occ config:system:set htaccess.RewriteBase --value="/"

sudo -u www-data php occ maintenance:update:htaccess

В документации Nextcloud для pretty URLs указано, что для этого нужны mod_env, mod_rewrite и обновление .htaccess через occ maintenance:update:htaccess

Перезагрузим Apache:

sudo systemctl reload apache2

Проверяем установку в админке

Зайдите в Nextcloud под администратором и откройте:

Настройки администратора → Обзор

Там Nextcloud покажет предупреждения, если что-то не так. Например:

The PHP memory limit is below the recommended value

The database is missing some indexes

No memory cache has been configured

The PHP OPcache module is not properly configured

Не стоит игнорировать этот раздел. Это не просто декоративные предупреждения. Часто они указывают на реальные проблемы, которые потом проявятся при синхронизации, загрузке больших файлов или обновлении.

Некоторые исправления можно выполнить через occ. Например:

sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices

sudo -u www-data php /var/www/nextcloud/occ db:add-missing-columns

sudo -u www-data php /var/www/nextcloud/occ maintenance:repair

Итог

Ручная установка требует больше внимания, чем Snap или Docker-образ, зато вы лучше понимаете устройство сервера. 

Именно это делает ручную установку полезной: она не просто запускает Nextcloud, а даёт основу для дальнейшего обслуживания. А для личного облака, рабочих файлов, календарей, контактов и синхронизации это может быть важнее, чем быстрый старт любой ценой.

Похожее

Все статьи
36672

Как на самом деле работает процессор и почему архитектура решает все

Процессор редко оказывается на виду, но именно он определяет, как быстро система реагирует на команды, справляется с вычислениями и выдерживает нагрузку. За небольшой железкой размером со спичечный коробок стоит сложная вычислительная архитектура, где важны не только частота и количество ядер,…

5169

Что такое скрипт и почему без них не работает современный мир

Слово «скрипт» давно выбралось за пределы сугубо технических разговоров. Сегодня его можно услышать от маркетологов, дизайнеров, аналитиков и многих других специалистов. И иногда создается комичная ситуация, что вроде бы про слово все знают, все используют, но толком объяснить что оно…