Установка NextCloud на Ubuntu 20.04 (Apache, MariaDB)

2020-08-26 2009 комментарии
Рассмотрим установку и настройку личного облачного хранилища NextCloud с веб-сервером Apache и системой управления базой данных MariaDB на Ubuntu 20.04

NextCloud - набор инструментов с открытым исходным кодом для создания личного облачного хранилища.

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

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

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

Установка NextCloud (Apache, MariaDB)

Обновим систему:

sudo apt update && sudo apt dist-upgrade -y

Установим Apach и MariaDB:

sudo apt install -y apache2 libapache2-mod-php mariadb-server mariadb-client

Установим необходимые PHP модули:

sudo apt install -y php-imagick 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

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

sudo mysql

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

create database nextcloud;
create user [email protected] identified by 'ваш пароль';
grant all privileges on nextcloud.* to [email protected] identified by 'ваш пароль';

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

flush privileges;

exit;

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

В самом верху следующей команды добавляем название своего домена:

sudo nano /etc/apache2/apache2.conf
ServerName example.com

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

sudo nano /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot /var/www/html/nextcloud/

ServerName example.com 

<Directory /var/www/html/nextcloud/>

Options +FollowSymlinks

AllowOverride All

Require all granted

<IfModule mod_dav.c>

Dav off

</IfModule>

SetEnv HOME /var/www/html/nextcloud

SetEnv HTTP_HOME /var/www/html/nextcloud

</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Где example.com – это название вашего домена.

Скачиваем NextCloud:

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

tar xjvf latest.tar.bz2

sudo cp -R nextcloud /var/www/html/

Меняем владельца каталога:

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

Устанавливаем NextCloud, задаем нашу базу данных, создаем администратора:

cd /var/www/html//nextcloud/

sudo -u www-data php /var/www/html/nextcloud/occ maintenance:install \

--database "mysql" --database-name "nextcloud" --database-user "nextclouduser" \

--database-pass "пароль базы mysql" --admin-user "имя пользователя админа" --admin-pass "ваш пароль"

Результат:

Nextcloud was successfully installed

Добавляем свой домен в базу доверенных доменов NextCloud:

sudo -u www-data php /var/www/nextcloud/occ config:system:set \

trusted_domains 1 --value=example.com

Результат:

System config value trusted_domains => 1 set to string example.com

Запускаем Apache2:

sudo a2ensite nextcloud.conf

sudo a2dissite 000-default.conf

sudo a2enmod rewrite headers env dir mime setenvif ssl

sudo systemctl reload apache2

Шифрование домена NextCloud:

Не забудьте открыть порты 80 и 443:

sudo ufw allow 80,443/tcp
sudo ufw reload
Устанавливаем сертификат:

sudo apt install -y certbot python3-certbot-apache

sudo certbot --apache --agree-tos --redirect --staple-ocsp --email адрес почты -d название домена

На этом установка NextCloud завершена. Перейдите по ссылке https://example.com, где example.com – это название вашего домена. Приступим к настройке.

Удаление index.php с домена NextCloud

По умолчанию адрес домена с NextCloud автоматически дополняется "index.php" . Пример: https://example.com/index.php/

Убираем index.php , тем самым делая адрес более красивым.

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

В строке 'overwrite.cli.url' => 'http://localhost' заменяем http://localhost на свой домен: https://example.com

И под ним добавляем следующую строку:

'htaccess.RewriteBase' => '/',

Пример на скриншоте.

Затем обновляем .htaccess:

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

Известные ошибки

Исправления ошибок NextCloud. Если перейти по адресу https://example.com/settings/admin/overview , т.е в раздел Общие сведения, то проверка безопасности возможно обнаружит одни из следующих популярных ошибок.

Решение ошибки: Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/7.4/apache2/php.ini

sudo systemctl reload apache2

Решение ошибки: Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «15552000» секунд. Для улучшения безопасности рекомендуется включить HSTS согласно нашим подсказкам по безопасности

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

В конце, под блоком SSL добавляем следующий параметр:

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


И перезапускаем веб-сервер:

sudo systemctl reload apache2

Решение ошибки: Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информации

sudo apt install -y redis-server php-redis

sudo systemctl start redis-server

sudo systemctl enable redis-server

sudo phpenmod redis

sudo nano /var/www/html/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

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

При использовании модулей Apache PHP, по умолчанию задан предел загружаемого файла в 2 МБ. Обходим данное ограничение, увеличиваем предел загружаемого файла по своему усмотрению (в этом примере мы задаем предел в 5024 МБ):

sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 5024M/g' /etc/php/7.4/fpm/php.ini

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

sudo systemctl restart php7.4-fpm

Решение ошибки: В базе данных отсутствуют некоторые индексы. Из-за того, что добавление индексов в большие таблицы могло занять некоторое время, они не добавлялись автоматически

cd /var/www/html/nextcloud/

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

Решение ошибки: В некоторых столбцах базы данных отсутствует преобразование в большой тип int. Из-за того, что изменение типов столбцов в больших таблицах могло занять некоторое время, они не менялись автоматически

cd /var/www/html/nextcloud/

Переводим NextCloud в режим обслуживания:

sudo -u www-data php occ maintenance:mode --on

И вводим следующую команду:

sudo -u www-data php occ db:convert-filecache-bigint

Отключаем режим обслуживания:

sudo -u www-data php occ maintenance:mode --off

После этого Проверка безопасности и параметров, скорее всего не выявит проблем.

© . Анатолий Гусляков

Комментарии и отзывы

Добавляя комментарий, ознакомьтесь с Правилами сообщества

Нашли ошибку?