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

Автор: | 13 ноября, 2021

Nextcloud — это опенсорсное программное обеспечение, которое позволяет создавать облачное хранилище и отправлять туда файлы из любого места. Представьте, что вы используете Dropbox, Google Диск или iCloud, только теперь ещё можете полностью контролировать, где и как хранятся ваши файлы.

Узнать версию ОС Linux

cat /etc/issue
cat /etc/os-release
Ubuntu 20.04.3 LTS \n \l

Узнать версию ядра

uname -a
Linux cloud 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Если на вашем сервере используется фаервол UFW, то вам надо разрешить удалённое подключение к порту 22:

sudo ufw allow ssh

Задать статический IP:

sudo nano /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.7
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-search workgroup

Перезагрузиться.

Если нужен SMB client (для подключения внешних накопителей в Nextcloud), LDAP и Midnight Commander:

apt-get install smbclient php-ldap mc -y

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

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

NOTICE: Not enabling PHP 7.4 FPM by default.
NOTICE: To enable PHP 7.4 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.4-fpm
NOTICE: You are seeing this message because you have apache2 package installed.

Настройка безопасности MYSQL

sudo mysql_secure_installation
  • Set root password? [Y/n] y
  • Remove anonymous users? [Y/n] y
  • Disallow root login remotely? [Y/n] y
  • Remove test database and access to it? [Y/n] y
  • Reload privilege tables now? [Y/n] y

Войдем в консоль базы данных.

sudo /etc/init.d/mysql start
sudo mysql -uroot -p

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

create database nextcloud;
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
create user nextclouduser@localhost identified by 'ваш пароль';
create user nextclouduser@localhost identified by 'ocpEi1pPSh4I';
grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'ваш пароль';
grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'ocpEi1pPSh4I';
FLUSH PRIVILEGES;
exit;

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

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

sudo nano /etc/apache2/apache2.conf

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

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

ServerAdmin admin@5house.win
DocumentRoot /var/www/html/nextcloud/
ServerName cloud.5house.win 

<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>

Где cloud.5house.win – это название вашего домена.

Скачиваем NextCloud:

cd /tmp
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
wget --no-check-certificate 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, задаем нашу базу данных, создаем администратора, запуск в одну строку:

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/html/nextcloud/occ config:system:set trusted_domains 1 --value=cloud.5house.win

Результат:

System config value trusted_domains => 1 set to string cloud.5house.win

Запускаем Apache2:

sudo a2ensite nextcloud.conf
sudo a2dissite 000-default.conf
sudo a2enmod rewrite headers env dir mime setenvif ssl
sudo systemctl reload apache2

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

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

 sudo ufw allow 80,443/tcp sudo ufw reload

Не забыть сопоставить в DNS записи ip host

Устанавливаем сертификат SSL letsencrypt:

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

Самоподписанный SSL-сертификат

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
Country Name (2 letter code) [AU]:By
State or Province Name (full name) [Some-State]:Minsk
Locality Name (eg, city) []:Minsk
Organization Name (eg, company) [Internet Widgits Pty Ltd]:5house. inc
Organizational Unit Name (eg, section) []:it
Common Name (e.g. server FQDN or YOUR name) []:cloud.5house.win
Email Address []:admin@5house.win
sudo chmod 0600 /etc/ssl/private/apache-selfsigned.key

Измените значение DocumentRoot на то, где вы установили NextCloud ранее. Затем измените значения SSLCertificateFile и SSLCertificateKeyFile на то место, где мы сохранили наши файлы SSL.

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

<VirtualHost *:443>
ServerAdmin admin@5house.win
DocumentRoot /var/www/html/nextcloud/
ServerName cloud.5house.win

<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

SSLEngine on
   SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
   SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>

Подключения виртуального хоста apache:

sudo a2ensite nextcloud.conf
sudo apachectl configtest
sudo systemctl reload apache2

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

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

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

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

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

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

'htaccess.RewriteBase' => '/',

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

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

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

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

netxCloud-Security-and-Settings-Check

Разрешённое максимальное значение использования памяти 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

Не указан регион размещения этого сервера Nextcloud, что требуется для возможности проверки номеров телефонов без указания кода страны. Чтобы разрешить пользователям сервера указывать номера телефонов без указания кода страны, добавьте параметр «default_phone_region» с соответствующим кодом страны в соответствии с ISO 3166-1

Добавляем в файл nextcloud/config/config.php следующий параметр:

sudo nano /var/www/html/nextcloud/config/config.php
'default_phone_region' => 'RU',

Модуль php-imagick в этом случае не поддерживает SVG. Для лучшей совместимости рекомендуется установить его.

sudo apt install imagemagick

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

При использовании модулей 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

Отключение Создайте свою бесплатную учётную запись
Отключение ссылки на https://nextcloud.com/signup/
Нужно добавить в файл nextcloud/config/config.php

sudo nano /var/www/html/nextcloud/config/config.php
'simpleSignUpLink.shown' => false,

Запуск заданий через Cron

sudo crontab -u www-data -e
добавить строку
*/5 * * * * php -f /var/www/html/nextcloud/cron.php

Приложения:
Brute-force settings
Whitelist IPs IP-адреса из белого списка
С помощью этого приложения администратор может исклчюить IP-адрес или диапазон от этой защиты, что может быть полезно для целей тестирования или при ложных срабатываниях из-за большого количества пользователей на одном IP-адресе.

Antivirus for files (ClamAV (open source) or Kaspersky Scan Engine)

Restrict login to IP addresses
Это приложение позволяет администраторам ограничить вход на свой следующий облачный сервер определенными диапазонами IP-адресов. Обратите внимание, что существующие сессии будут оставаться открытыми.
автор: Lukas Reschke Лицензия: AGPL

To show entries:

mysql -e "use nextcloud;select * from oc_bruteforce_attempts;

To delete all these entries:

mysql -e "use nextcloud;delete from oc_bruteforce_attempts;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *