Установка и настройка NextCloud на CentOS
Подготовка сервера
1. Системные требования
С актуальными системными требованиями можно ознакомиться на сайте разработчика в разделе Administration Manual- Installation and server configuration- System requirements . Необходимо убедиться, что наш сервер соответствует данным требованиям.
2. Правильное время.
Устанавливаем утилиту chrony:
dnf install chrony
Запускаем ее службу:
systemctl enable chronyd --now
Выставляем нужный часовой пояс:
timedatectl set-timezone Asia/Yekaterinburg
3. Настройка брандмауэра.
Выполняется следующими командами:
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload
4. Отключение SELinux.
Для отключения SELinux вводим две команды:
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
Настройка сервера баз данных
В качестве СУБД используем MariaDB.
Устанавливаем:
dnf install mariadb-server
Разрешаем автозапуск и стартуем сервис:
systemctl enable mariadb --now
Задаем пароль для суперпользователя mysql:
mysqladmin -u root password
Подключаемся к MariaDB, создаем базу данных и пользователя:
mysql -uroot -p
> CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY 'nextcloud';
> \q
Установка и настройка веб-сервера
PHP
В репозитории CentOS 8 есть требуемая версия пакета php. Для ее установки просто вводим команду:
dnf install php php-fpm php-pdo php-zip php-dom php-intl php-gd php-mysqli php-mbstring php-json php-process php-bcmath php-gmp php-imagick php-opcache
PHP-FPM
Сам пакет php-fpm мы установили на предыдущем шаге. Поэтому на данном этапе необходимо его настроить.
Открываем конфигурационный файл:
nano /etc/php-fpm.d/www.conf
Находим опцию listen. Проверяем ее значение:
listen = /run/php-fpm/www.sock
Разрешаем автозапуск php-fpm и запускаем его:
systemctl enable php-fpm --now
NGINX
Nextcloud можно развернуть на NGINX или Apache. В данной инструкции будем использовать первый.
Устанавливаем веб-сервер:
dnf install nginx
Для правильной работы nextcloud запросы должны идти по https. Для этого создаем виртуальный домен и настраиваем его для работы с облачным сервисом в NGINX:
nano /etc/nginx/conf.d/nextcloud.mysite.ru.conf
server { listen 80; server_name nextcloud.mysite.ru; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name nextcloud.mysite.ru; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/cert.key; root /var/www/nextcloud; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; client_max_body_size 10G; fastcgi_buffers 64 4K; rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect; rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect; rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect; index index.php; error_page 403 = /core/templates/403.php; error_page 404 = /core/templates/404.php; location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ ^/(data|config|\.ht|db_structure\.xml|README) { deny all; } location / { rewrite ^/.well-known/host-meta /public.php?service=host-meta last; rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last; rewrite ^/.well-known/carddav /remote.php/carddav/ redirect; rewrite ^/.well-known/caldav /remote.php/caldav/ redirect; rewrite ^(/core/doc/[^\/]+/)$ $1/index.html; try_files $uri $uri/ index.php; } location ~ ^(.+?\.php)(/.*)?$ { try_files $1 = 404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$1; fastcgi_param PATH_INFO $2; fastcgi_param HTTPS on; fastcgi_pass unix:/run/php-fpm/www.sock; } location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ { expires modified +30d; access_log off; } }
nextcloud.mysite.ru— имя сервера, на котором будет работать nextcloud;
/etc/nginx/ssl— каталог, в котором будут храниться сертификаты;
/var/www/nextcloud— каталог с порталом.
Создаем каталог для хранения сертификатов и переходим в него:
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
Генерируем сертификат:
openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=nextcloud.mysite.ru/CN=nextcloud"
в данном примере мы, всего лишь, создали самоподписанный сертификат, который не будет приниматься браузером и нужно будет пропускать предупреждение. Данный метод подходит для тестирования, а для продуктивной среды стоит купить сертификат или получить его бесплатно от Let's Encrypt
Проверяем конфигурацию nginx, разрешаем его автозапуск и перезапускаем сервис:
nginx -t
systemctl enable nginx --now
Установка Nextcloud
Для загрузки и распаковки архива нужны следующие пакеты:
dnf install wget unzip
Переходим во временную папку:
cd /tmp
сайт nextcloud и копируем ссылку на скачивание последней версии программы:
Скачиваем исходник для установки:
wget https://download.nextcloud.com/server/releases/nextcloud-20.0.1.zip
Распаковываем скачанный архив:
unzip nextcloud-*.zip -d /var/www
Задаем права доступа:
chown -R apache:apache /var/www/nextcloud
Открываем браузер и переходим по адресу <u>https://nextcloud.mysite.ru</u>, где nextcloud.mysite.ru— наш адрес облачного сервиса, который мы создали в NGINX. Если мы используем самоподписанный сертификат, браузер выдаст предупреждение безопасности — игнорируем его и переходим на страницу.
Прописываем логин и пароль администратора, которые хотим использовать для входа, кликаем по Хранилище и база данных :
Переключаемся на MySQL/MariaDB, вводим в качестве логина, пароля и базы nextcloud :
Завершаем установку, при желании, оставим галочку для установки рекомендованных приложений:
После установки мы окажемся в системе.
Проверка безопасности и параметров
Для корректной работы системы выполним дополнительную настройку системы. После входа в nextcloud под администратором, переходим в настройки для пользователя:
В разделе «Параметры сервера» переходим в Основные сведения :
В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем:
Рассмотрим процесс решения некоторых из них.
1. PHP не настроен правильно для получения переменных системного окружения
Открываем файл php.ini. При нашей установке, это:
nano /etc/php-fpm.d/www.conf
Снимаем комментарий с параметра PATH:
env[PATH] = /usr/local/bin:/usr/bin:/bin
Перезапускаем php-fpm:
systemctl restart php-fpm
2. Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ
Открываем на редактирование файл:
nano /etc/php.ini
Меняем настройку для memory_limit:
memory_limit = 512M
Перезапускаем php-fpm:
systemctl restart php-fpm
3. В базе данных отсутствуют некоторые индексы
Выполним команду для индексирования баз:
sudo -u apache php /var/www/nextcloud/occ db:add-missing-indices
4. Некоторые индексы базы данных не были преобразованы в тип big int
Выполним команду для преобразования в тип big int:
sudo -u apache php /var/www/nextcloud/occ db:convert-filecache-bigint
На запрос Continue with the conversion отвечаем утвердительно:
Continue with the conversion (y/n)? [n] y
5. В системе не установлены рекомендуемые модули PHP
Данная ошибка устраняется в зависимости от списка модулей, которых не хватает системе. Чаще всего, подходит команда:
dnf install php-<название модуля>
Установка некоторых модулей может вызвать затрудение. Например, imagick в CentOS 8 устанавливается по инструкции ниже.
Установим ImageMagick:
dnf --enablerepo=PowerTools install ImageMagick ImageMagick-devel
После устанавливаем пакеты, необходимые для сборки imagick:
dnf install php-devel php-pear make
Собираем imagick:
pecl install imagick
Создаем файл с расширением php:
nano /etc/php.d/20-imagick.ini
extension=imagick.so
Перезапускаем php-fpm:
systemctl restart php-fpm
6. Не загружен модуль OPcache
Устанавливаем модуль opcache командой:
dnf install php-opcache
Открываем конфигурационный файл:
nano /etc/php.d/10-opcache.ini
Редактируем следующее:
... opcache.max_accelerated_files=10000 ... opcache.save_comments=1 ... opcache.revalidate_freq=1 ...
Перезапускаем php-fpm:
systemctl restart php-fpm
7. Не настроена система кеширования
Для решения проблемы мы должны установить и настроить одно из средств кэширования:
- APCu
- Redis
- Memcached
Мы рассмотрим последний вариант. Для этого выполняем установку модуля по инструкции Установка и настройка memcached на CentOS.
После этого открываем конфигурационный файл для nextcloud:
nano /var/www/nextcloud/config/config.php
И добавим:
... 'memcache.local' => '\\OC\\Memcache\\Memcached', 'memcache.distributed' => '\\OC\\Memcache\\Memcached', 'memcached_servers' => array ( 0 => array ( 0 => 'localhost', 1 => 11211, ), ), ...
8. MySQL используется в качестве базы данных, но не поддерживает 4-байтовые символы
Выполняем конфигурирование в несколько этапов.
Настройка СУБД
Заходим в оболочку mysql:
mysql -uroot -p
Смотрим значение для переменной innodb_file_format:
> show variables like 'innodb_file_format';
Если видим значение «Antelope», меняем его на Barracuda:
> SET GLOBAL innodb_file_format=Barracuda;
Выходим из оболочки:
> quit
Настройка Nextcloud
Переводим Nextcloud в режим обслуживания:
sudo -u apache php /var/www/nextcloud/occ maintenance:mode --on
Перезагружаем mariadb (если на первом шаге нам пришлось менять значение для переменной innodb_file_format):
systemctl restart mariadb
Редактирование базы данных
Снова подключаемся к консоли управления СУБД:
mysql -uroot -p
Меняем кодировку для базы данных:
> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Выходим из mariadb:
> quit
Также задаем новую кодировку для nextcloud
sudo -u apache php /var/www/nextcloud/occ config:system:set mysql.utf8mb4 --type boolean --value="true"
Преобразуем все таблицы в базе:
sudo -u apache php /var/www/nextcloud/occ maintenance:repair
Завершаем режим обслужавания:
sudo -u apache php /var/www/nextcloud/occ maintenance:mode --off
Установка и настройка клиента
Для синхронизации файлов установим и настроим клиента. Nextcloud поддерживает установку на Windows, Linux, Mac, iOS и Android.
Переходим на страницу загрузки Nextcloud и скачиваем нужный клиент. После устанавливаем его, отвечая на все вопросы мастера по умолчанию. Для установки клиента на телефон, пользуемся Google Play или Apple App Store.
Запускаем клиентское приложение и переходим к настройке, кликнув по Войти :
На следующей странице вводим адрес нашего сервера и кликаем по Далее :
Нас перекинет на веб страницу для авторизации — вводим логин и пароль для пользователя. После успешной авторизации можно использовать клиент для синхронизации с файлов с нашим облаком.
Работа с пользователями из UNIX-Shell
В состав nextcloud входит php-скрипт occ, с помощью которого можно управлять сервисом из командной строки Linux.
Добавление пользователя
Создать нового пользователя можно командой:
sudo -u apache php /var/www/nextcloud/occ user:add admin
Сброс пароля
При необходимости сбросить пароль пользователя, можно воспользоваться командой:
sudo -u apache php /var/www/nextcloud/occ user:resetpassword admin
Подключение nextcloud как сетевой диск
Мы можем подключить пользовательские данные nextcloud в качестве сетевого диска.
Рассмотрим процесс для Windows.
Для начала необходимо включить службу «Веб-клиент».
Для этого открываем от администратора командную строку и вводим команды:
sc config webclient start= auto net start webclient
После открываем командную строку от пользователя и создаем сетевой диск командой:
net use <Буква диска>: https://<путь до nextcloud>/remote.php/webdav /user:user password
Nextcloud. Некоторые хитрости
Отключение сброса пароля
Нужно добавить в файл nextcloud/config/config.php
'lost_password_link' => 'disabled',
Отключение Создайте свою бесплатную учётную запись
Отключение ссылки на https://nextcloud.com/signup/
Нужно добавить в файл nextcloud/config/config.php
'simpleSignUpLink.shown' => false,
Увеличение размера загружаемых файлов
В ответ на предупреждение: Разрешённое PHP максимальное значение использования памяти ниже рекомендуемого значения в 512 МБ, необходимо внести исправления в php.ini
upload_max_filesize = 512M memory_limit = 512M
Strict-Transport-Security
В ответ на предупреждение: Заголовок HTTP «Strict-Transport-Security»
должен быть настроен как минимум на «15552000» секунд необходимо внести исправления в .htaccess:
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule>
Регион размещения сервера
Не указан регион размещения этого сервера Nextcloud, что требуется для возможности проверки номеров телефонов без указания кода страны.
Чтобы разрешить пользователям сервера указывать номера телефонов без указания кода страны, добавьте параметр «default_phone_region»
с соответствующим кодом страны в соответствии с ISO 3166-1
.
Опять же после обновления до 21 версии Nextcloud появляется такое предупреждение.
Открывает файл config.php
, расположенный в директории Nextcloud по пути config/config.php
и вставляем строку:
'default_phone_region' => 'RU',