1. Установка Apache2 и PHP.

Важно! Я не несу ответственности за то, что вы делаете со своим компьютером. Используйте это руководство и помните, что всё что вы делаете вы делаете на свой страх и риск.

Первым делом для установки NextCloud 19 необходимо установить web-сервер и PHP.

NextCloud нуждается в ImageMagick для создания предварительного просмотра изображений (он все равно должен работать, хотя и не для SVG). В CentOS 8 ImageMagick был заменен GraphicMagick, являющийся форком ImageMagick. К сожалению, NextCloud не может использовать GraphicMagick и все еще зависит от ImageMagick. Единственный надежный способ — скомпилировать ImageMagick из исходного кода и установить расширение pecl. Поскольку это громоздкий процесс, который когда-нибудь устареет, я решил не включать его в это руководство.

1.1. Устанавливаем PHP 7.4:

# dnf install epel-release
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf module install php:remi-7.4
# dnf install httpd php php-dom php-mbstring php-gd php-pdo php-json php-xml php-zip php-curl php-pear php-intl php-bcmath php-gmp setroubleshoot-server bzip2 php-pecl-imagick

2. Установка базы данных.

Теперь, когда вы установили программное обеспечение, вам нужно выбрать базу данных. У вас есть три варианта:

  • SQLite: представляет собой базу данных из одного файла. Эта база рекомендуется только для небольших установок, так как значительно замедлит работу NextCloud
  • MariaDB/MySQL: является популярной базой данных с открытым исходным кодом, особенно среди веб-разработчиков. Данная база данных рекомендуется к установке.
  • PostgreSQL: популярная база данных корпоративного класса. Сложнее, чем MySQL/MariaDB.

Выбор базы данных на самом деле не изменит функциональность NextCloud (за исключением случаев, когда вы используете SQLite), поэтому выбирайте то, что вы знаете лучше всего. Если вы не уверены, выберите MariaDB/MySQL.

Ниже для примера буду устанавливать MySQL.

2.1. Установка базы данных:

# dnf install mariadb-server php-mysqlnd

2.2. Запуск (и добавление в автозагрузку) службы:

# systemctl enable --now mariadb

2.3. Следующим шагом является настройка системы управления базами данных:

# mysql_secure_installation

Во время настройки вам будет предложено выбрать пароль root. Постарайтесь установить надежный пароль.

2.4. Далее нужно включить 4-байтовую поддержку (для emoji):

# echo -e "[mysqld]\ninnodb_large_prefix=true\ninnodb_file_format=barracuda\ninnodb_file_per_table=1" >> /etc/my.cnf.d/00-innodb.cnf

2.5. Перезапустите сервер базы данных:

# systemctl restart mariadb

2.6. Теперь нужно войти в базу данных (вам будет предложено ввести пароль, который вы только что установили):

$ mysql -u root -p

2.7. Теперь когда вы вошли, создадим базу данных:

mysql> CREATE DATABASE nextcloud;

2.8. Теперь нужно создать пользователя, который будет использоваться для подключения к базе данных:

mysql> CREATE USER 'nc_user'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD_HERE';

2.9. Последний шаг — предоставить права новому пользователю:

mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nc_user'@'localhost';
mysql> FLUSH PRIVILEGES;

2.10. Когда вы закончите, нажмите Ctrl-D, чтобы выйти.

3. Установка NextCloud.

Этот шаг включает в себя получение Nextcloud и настройку Apache.

3.1. На этом этапе мы загружаем программное обеспечение и извлекаем его:

# cd /var/www/html# curl -o nextcloud-19-latest.tar.bz2 https://download.nextcloud.com/server/releases/latest-19.tar.bz2
# tar -xvjf nextcloud-19-latest.tar.bz2# mkdir nextcloud/data
# chown -R apache:apache nextcloud# rm nextcloud-19-latest.tar.bz2

3.2. Теперь нам нужно создать новый файл в /etc/httpd/conf.d/nextcloud.conf со следующим содержимым:

# nano /etc/httpd/conf.d/nextcloud.conf

Alias /nextcloud "/var/www/html/nextcloud/"
<Directory /var/www/html/nextcloud/>
  Options +FollowSymlinks
  AllowOverride All
 <IfModule mod_dav.c>
  Dav off
 </IfModule>
 SetEnv HOME /var/www/html/nextcloud
 SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>

4. Настройка связки Apache и SELinux.

На этом шаге мы запустим (и включим) веб-сервер и настроим SELinux. Во многих руководствах вам будет предложено отключить SELinux (потому что это сложный компонент для управления).

4.1. Вместо этого я предлагаю вам оставить его включенным и добавить правила для NextCloud:

# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.htaccess'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
# restorecon -Rv '/var/www/html/nextcloud/'

4.2.1. Если вы решили использовать Mariadb/MySQL/PostgreSQL, вам также необходимо разрешить Apache доступ к нему:

# setsebool -P httpd_can_network_connect_db 1

4.2.2. В случае, если вы выбрали PostgreSQL, вам также необходимо включить httpd_execmem:

# setsebool -P httpd_execmem 1

4.3. Еще одна важная вещь, которую нужно сделать — это увеличить лимит памяти PHP:

# sed -i '/^memory_limit =/s/=.*/= 512M/' /etc/php.ini

4.4. Теперь, когда вы настроили SELinux, давайте запустим и включим Apache:

# systemctl start httpd
# systemctl enable httpd

5. Настройка firewall.

Чтобы открыть порты, необходимые для работы NextCloud 19, выполните следующие действия:

# firewall-cmd --add-service http --permanent
# firewall-cmd --add-service https --permanent
# firewall-cmd --reload

6. Установка Nextcloud.

6.1. Переходим по ссылке http://YOUR_IP_ADDRESS/nextcloud/ и дожидаемся открытия страницы установки.

6.2. Введите имя пользователя и пароль администратора.

6.3. Затем нажмите “Хранилище и база данных“. Здесь нужно выбрать базу данных, которую настраивали в шаге 2 данного руководства. В качестве примера я настраивал MySQL/MariaDB. Выбираем базу данных MySQL/MariaDB, имя базы данных, имя пользователя и пароль для доступа к базе, а также адрес сервера.

База данных: MySQL/MariaDB
Имя пользователя: nc_user
Пароль: YOUR_PASSWORD_HERE
Имя базы: nextcloud
Сервер: localhost

6.4. После того, как всё ввели, нажимаем кнопку «Завершение установки». Если все данные введены правильно, то через некоторое время вас перебросить на следующую страницу.

7. Включить кэширование (рекомендуется).

NextCloud может быть очень медленным, если не настроить решение для кэширования. В этом руководстве будет рассмотрено два решения для кэширования:

  • PHP OPcache: встроенное решение для кэширования PHP, которое ускоряет выполнение сценариев.
  • Redis server: быстрое хранилище значений ключей в памяти, которое ускоряет все в NextCloud.

7.1. Установка и настройка OPcache.

7.1.1. Установим OPcache в систему:

# dnf install php-opcache

7.1.2. Отредактируйте файл, расположенный по пути /etc/php.d/10-opcache.ini:

# nano /etc/php.d/10-opcache.ini

; Enable Zend OPcache extension module
zend_extension=opcache
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Эти значения рекомендованы разработчиками NextCloud, но вы можете настроить их в соответствии со своими потребностями.

7.1.3. Перезагружаем Apache:

# systemctl restart httpd

7.2. Установка и настройка Redis.

7.2.1. Откройте терминал и введите следующую команду:

# dnf install redis php-pecl-redis

7.2.2. Отредактируйте файл конфигурации NextCloud, расположенный по пути /var/www/html/nextcloud/config/config.php . Добавьте выделенные строки:

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

<?php
$CONFIG = array (
  'instanceid' => '',
  'passwordsalt' => '',
  'secret' => '',
  'trusted_domains' =>
  array (
    0 => 'YOUR_IP',
  ),
  'datadirectory' => '/var/www/html/nextcloud/data',
  'dbtype' => 'mysql',
  'version' => '19.0.0.12',
  'overwrite.cli.url' => 'http://YOUR_IP/nextcloud',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'nc_user',
  'dbpassword' => 'YOUR_PASSWORD_HERE',
  'installed' => true,
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.local' => '\OC\Memcache\Redis',
  'redis' => [
    'host' => 'localhost',
    'port' => 6379,
    'timeout' => 3,
  ],
);

Эти настройки позволят NextCloud использовать Redis для кэширования и блокировки файлов.

7.2.3. Теперь нужно настроить Apache для доступа к Redis с включенным SELinux:

# setsebool -P httpd_can_network_connect 1

7.2.4. Осталось включить и запустить Redis, и перезапустите веб-сервер:

# systemctl enable --now redis
# systemctl restart httpd php-fpm

8. Предоставление доступа к NextCloud из вне.

8.1. Для начала вам необходимо будет пробросить порты 80 и 443 на роутере до сервера с Nextcloud. После чего регистрируем своё собственное доменное имя. Оба эти шага — тема для отдельных статьей и подробно на них я останавливаться не будут.

8.2. Далее нужно будет создать виртуальный хост в Apache. Использую текстовый редактор необходимо отредактировать файл /etc/httpd/conf.d/nextcloud.conf, который создавали ранее:

<VirtualHost *:80>
  ServerName YOURDOMAIN.TLD
  ServerAdmin YOUR@EMAIL.TLD
  DocumentRoot /var/www/html/nextcloud
  <directory /var/www/html/nextcloud>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews
    SetEnv HOME /var/www/html/nextcloud
    SetEnv HTTP_HOME /var/www/html/nextcloud
  </directory>
</VirtualHost>

Важно установить в ServerName имя вашего домена.

8.3. Теперь добавим ваш домен в доверенные домены Nextcloud в файле конфигурации:

# -u apache php /var/www/html/nextcloud/occ config:system:set trusted_domains 2 --value=YOURDOMAIN.TLD

8.4. Осталось перезагрузить web-сервер:

# systemctl restart httpd

9. Получение SSL-сертификата с помощью Let’s Encrypt!

9.1. Установим certbot:

# dnf install certbot certbot-apache

9.2. Запускаем процедуру получения сертификата, попутно отвечая на все вопросы:

# certbot --apache

9.3. После получения сертификата остается только перезапустить web-сервер:

# systemctl restart httpd