Как установить 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, а даёт основу для дальнейшего обслуживания. А для личного облака, рабочих файлов, календарей, контактов и синхронизации это может быть важнее, чем быстрый старт любой ценой.
Похожее
Все статьи
Как на самом деле работает процессор и почему архитектура решает все
Процессор редко оказывается на виду, но именно он определяет, как быстро система реагирует на команды, справляется с вычислениями и выдерживает нагрузку. За небольшой железкой размером со спичечный коробок стоит сложная вычислительная архитектура, где важны не только частота и количество ядер,…
Что такое скрипт и почему без них не работает современный мир
Слово «скрипт» давно выбралось за пределы сугубо технических разговоров. Сегодня его можно услышать от маркетологов, дизайнеров, аналитиков и многих других специалистов. И иногда создается комичная ситуация, что вроде бы про слово все знают, все используют, но толком объяснить что оно…