Установка NextCloud на Ubuntu 20.04 с Apache

В этом руководстве показано, как установить NextCloud на Ubuntu 20.04 LTS с веб-сервером Apache.

Что такое NextCloud?

NextCloud — это бесплатное облачное хранилище с открытым исходным кодом. Функционально он похож на Dropbox. Проприетарные облачные хранилища (Dropbox, Google Drive и т. д.) удобны, но имеют свою цену: их можно использовать для сбора личных данных, поскольку ваши файлы хранятся на их компьютерах. Если вы беспокоитесь о конфиденциальности, вы можете переключиться на NextCloud, который вы можете установить на свой частный домашний сервер или на виртуальный частный сервер (VPS). Вы можете загрузить свои файлы на свой сервер через NextCloud, а затем синхронизировать эти файлы со своим настольным компьютером, ноутбуком или смартфоном. Таким образом, вы полностью контролируете свои данные.

Возможности NextCloud

  • Бесплатно и с открытым исходным кодом
  • Сквозное шифрование, означающее, что файлы могут быть зашифрованы на клиентских устройствах перед загрузкой на сервер, поэтому даже если кто-то украдет ваш сервер, он не сможет прочитать ваши файлы.
  • Может быть интегрирован с онлайн-офисным пакетом (Collobora Online, OnlyOffice), чтобы вы могли создавать и редактировать файлы doc, ppt, xls непосредственно из NextCloud.
  • Магазин приложений содержит сотни приложений для расширения функциональности (например, приложение календаря, приложение для контактов, приложение для создания заметок, приложение для видеоконференций и т. д.).
  • Клиент синхронизации доступен для Linux, macOS, Windows, iOS и Android.

Предварительные требования

NextCloud написан на языке программирования PHP. Чтобы следовать этому руководству, вам сначала нужно установить стек LAMP в Ubuntu 20.04.

Вы можете установить NextCloud на свой домашний сервер или VPS (виртуальный частный сервер). Вам также потребуется доменное имя, чтобы позже вы могли включить HTTPS для шифрования HTTP-трафика. Nextcloud можно установить без доменного имени, но это действительно не имеет смысла, если вы не шифруете HTTP-соединение для предотвращения отслеживания. Теперь давайте установим NextCloud.

Шаг 1: Загрузите NextCloud в Ubuntu 20.04

Войдите на свой сервер Ubuntu 20.04. Затем загрузите zip-архив NextCloud на свой сервер. На момент написания этой статьи последняя стабильная версия — 23.0.3. Возможно, вам потребуется изменить номер версии. Вы можете запустить следующую команду, чтобы загрузить его на свой сервер.

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

После загрузки распакуйте архив с помощью unzip.

sudo apt install unzip

sudo unzip nextcloud-21.0.1.zip -d /var/www/

Параметр -d указывает целевой каталог. Веб-файлы NextCloud будут извлечены в /var/www/nextcloud/. Затем нам нужно изменить владельца этой директории на www-data, чтобы веб-сервер (Apache) мог писать в эту директорию.

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

Шаг 2: Создайте базу данных и пользователя для Nextcloud на сервере базы данных

Войдите на сервер базы данных с помощью следующей команды. Поскольку MariaDB теперь использует плагин unix_socket для аутентификации пользователя, нет необходимости вводить пароль root для MariaDB. Нам просто нужно префикс команды mysql с sudo.

sudo mysql

Затем создайте базу данных для Nextcloud. В этом учебнике имя базы данных nextcloud. Вы можете использовать любое имя, которое вам нравится.

create database nextcloud;

Создайте пользователя базы данных. Опять же, вы можете использовать предпочитаемое имя для этого пользователя. Замените your-password предпочитаемым паролем.

create user nextclouduser@localhost identified by 'your-password';

Предоставьте этому пользователю все привилегии в базе данных nextcloud.

grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';

flush privileges;

exit;

Шаг 3: Создайте виртуальный хост Apache для Nextcloud

Создайте файл nextcloud.conf в каталоге /etc/apache2/sites-available/ с помощью текстового редактора командной строки, такого как Nano.

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

Скопируйте и вставьте следующий текст в файл. Замените nextcloud.example.com предпочитаемым вами субдоменом. Не забудьте создать запись DNS A для этого поддомена в редакторе зон DNS. Если у вас нет настоящего доменного имени, я рекомендую перейти на NameCheap, чтобы купить его. Цена низкая, и они дают защиту конфиденциальности whois бесплатно на всю жизнь.

<VirtualHost *:80>
        DocumentRoot "/var/www/nextcloud"
        ServerName nextcloud.example.com
        ErrorLog ${APACHE_LOG_DIR}/nextcloud.error
        CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined
        <Directory /var/www/nextcloud/>
            Require all granted
            Options FollowSymlinks MultiViews
            AllowOverride All
           <IfModule mod_dav.c>
               Dav off
           </IfModule>
        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
        Satisfy Any
       </Directory>
</VirtualHost>

Включим наш виртуальный хост

sudo a2ensite nextcloud.conf

Выполните следующую команду, чтобы включить необходимые модули Apache.

sudo a2enmod rewrite headers env dir mime setenvif ssl

Запустим тест конфигурации Apache

sudo apache2ctl -t

Если синтаксис в порядке, перезагрузите Apache, чтобы изменения вступили в силу.

sudo systemctl restart apache2

Шаг 4: Установите и включите модули PHP

Выполните следующие команды, чтобы установить модули PHP, необходимые или рекомендуемые NextCloud.

sudo apt install imagemagick php-imagick libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp

Перзагрузите Apache что бы использовать модули

sudo systemctl reload apache2

Шаг 5. Включите HTTPS

Теперь вы можете получить доступ к мастеру веб-установки Nextcloud в своем веб-браузере, введя доменное имя для вашей установки Nextcloud. Прежде чем вводить какую-либо конфиденциальную информацию, мы должны включить безопасное соединение HTTPS в Nextcloud. Мы можем получить бесплатный сертификат TLS от Let’s Encrypt. Установив клиент Let’s Encrypt (certbot) из репозитория Ubuntu 20.04.

Установим Certbot для apache

sudo apt install certbot python3-certbot-apache

Убедимся что у нас присутствуют конфиг файлы для наших сайтов в /etc/apache2/sites-available и в файрволле открыты необходимые для работы протокола HTTPS порты TCP, после чего запустим нашего

sudo certbot --apache

Скрипт задаст нам некотоыре вопросы, на которые нужно будет дать ответы, так же перечислит сайты для кторых обнаружены конфиг файлы на веб сервере и предложит редиректить соединения с 80 порта на 443 по умолчанию (я рекомендую выбрать именно такой вариант). Далее будут сгенерированны SSL сертификаты для выбранных сайтов или для всех сайтов если мы укажем такую опцию, а так же скрипт настроит периодичную проверку сертификатов на предмет истечения срока действия и перегенерацию.

Было обнаружено, что Certbot не может автоматически добавлять заголовок HSTS в файл конфигурации Apache для Nextcloud. Если вы хотите включить HSTS (HTTP Strict Transport Security), отредактируйте файл.

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

Затем мы можем добавить следующую строку в блок сервера SSL, чтобы включить заголовок HSTS.

Header always set Strict-Transport-Security "max-age=31536000"

Сохраните и закройте файл. Затем отправьте текст конфигурации Apache.

sudo apache2ctl -t

Если тест прошел успешно, перезагрузите Apache, чтобы изменения вступили в силу.

sudo systemctl reload apache2

Шаг 6: Завершите установку в веб-браузере

Теперь вы можете получить доступ к мастеру веб-установки Nextcloud, используя соединение HTTPS. Чтобы завершить установку, вам необходимо создать учетную запись администратора, ввести путь к папке данных Nextcloud, ввести сведения о базе данных, созданной на шаге 2. Папка данных — это место, где хранятся файлы пользователей. В целях безопасности лучше всего разместить каталог данных за пределами корневого веб-каталога Nextcloud. Поэтому вместо хранения файлов пользователей в /var/www/nextcloud/data/ мы можем изменить его на /var/www/nextcloud-data. который можно создать с помощью следующей команды:

sudo mkdir /var/www/nextcloud-data

Затем убедитесь, что у пользователя Apache (www-data) есть разрешение на запись в каталог данных.

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

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

Как сбросить пароль пользователя Nextcloud из командной строки

Если вы потеряли пароль своей учетной записи администратора и не настроили доставку электронной почты в Nextcloud, вам необходимо сбросить пароль, выполнив следующую команду на своем сервере. Замените nextcloud_username своим настоящим именем пользователя.

sudo -u www-data php /var/www/nextcloud/occ user:resetpassword nextcloud_username

Есть и другие команды, которые могут оказаться полезными. Список доступных команд

sudo -u www-data php /var/www/nextcloud/occ

или

sudo -u www-data php /var/www/nextcloud/console.php

Шаг 7: Увеличьте лимит памяти PHP

Ограничение памяти PHP по умолчанию составляет 128 МБ. NextCloud рекомендует 512 МБ для лучшей производительности. Чтобы изменить лимит памяти PHP, отредактируйте файл php.ini.

sudo nano /etc/php/7.4/apache2/php.ini

Найдите строку

memory_limit = 128M

Измените значение

memory_limit = 512М

Перезагрузите Apache что бы применить настройки

sudo systemctl reload apache2

Если на вашем сервере есть файл /etc/php7.4/fpm/php.ini, это означает, что на вашем сервере также работает PHP-FPM. Я также рекомендую изменить memory_limit в PHP-FPM.

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

Найдите параметр memory_limit и измените значение. После сохранения файла перезагрузите PHP-FPM, чтобы изменения вступили в силу.

sudo systemctl reload php7.4-fpm

Шаг 8: Настройте кэширующего сервера Redis для NextCloud

Если вы перейдете к настройкам NextCloud -> общие сведения, вы можете увидеть следующее предупреждение:

No memory cache has been configured. To enhance your performance please configure a memcache if available.

Мы включим кэширование памяти для nextCloud с помощью Redis. Выполните следующую команду, чтобы установить сервер Redis из репозитория Ubuntu.

sudo apt install redis-server

Проверим версию Redis

redis-server -v

Пример вывода:

Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=66bd629f924ac924

Далее проверим, запущен ли Redis

sudo systemctl status redis

Если сервер остановлен, запускаем

sudo systemctl start redis-server

Включаем автозапуск службы при старте системы

sudo systemctl enable redis-server

Чтобы настроить Redis в качестве кеша для nextCloud, нам нужно установить расширение PHP для взаимодействия с Redis.

sudo apt install php-redis

Проверяем включилось ли расширение

php --ri redis

Результат

Redis Support => enabled
Redis Version => 5.1.1

Мы видим, что расширение Redis включено. Если он не включен, выполните следующую команду:

sudo phpenmod redis

Вам также может потребоваться перезагрузить Apache, если расширение Redis по-прежнему не включено.

sudo systemctl reload apache2

Далее поправим конфигурационный файл NextCloud

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

Добавьте следующие строки над );

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

Сохраняем и закрываем файл. Далее перезапускаем Apache и PHP-FPM

sudo systemctl restart apache2 php7.4-fpm

Теперь снова перейдите в настройки NextCloud -> общие сведения и обновите веб-страницу, предупреждение о кэшировании памяти должно исчезнуть.

Добавление отсутствующих индексов (Adding Missing Indexes)

Если вы видите следующее сообщение на странице «Настройки NextCloud -> общие сведения»,

The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically.

Необходимо вручную добавить эти индексы. Перейдите в корневой веб-каталог Nextcloud.

cd /var/www/nextcloud/

Выполните следующую команду, чтобы добавить индексы в базу данных Nextcloud.

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

Теперь, если вы обновите страницу «Настройки NextCloud -> общие сведения», предупреждение об отсутствующих индексах должно исчезнуть.

Увеличить предельный размер загружаемого файла

Если вы используете модуль Apache PHP для запуска PHP-скрипта, то ограничения на размер загружаемого файла нет. Если вы используете PHP-FPM для запуска скрипта PHP, вам необходимо изменить ограничение размера файла. Максимальный размер файла по умолчанию для загрузки в PHP-FPM составляет 2 МБ. Чтобы увеличить ограничение размера загрузки, отредактируйте файл конфигурации PHP.

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

Найдите строку

upload_max_filesize = 2M

Измените значение, например на 1024

Перезапустите PHP-FPM

sudo systemctl restart php7.4-fpm

Оставьте комментарий