Подготовка системы
Выполним предварительную настройку, прежде чем начать развертывание Nextcloud.
1. Обновляем списки пакетов.
Актуализируем списки пакетов в репозиториях, чтобы установки проходили без ошибок:
apt update При желании, мы также можем обновить пакеты:
apt upgrade2. Синхронизируем время.
Устанавливаем утилиту chrony:
apt install chronyВыставляем нужный часовой пояс:
timedatectl set-timezone Europe/Moscow* в данном примере московское время.
Разрешаем запуск демона chrony:
systemctl enable chrony3. Настройка брандмауэра.
По умолчанию в системах на базе Deb нет запрещающих правил в брандмауэре и нам ничего не нужно делать дополнительно. Но если в вашем случае настроен и используется брандмауэр на сервере, необходимо открыть порты 80 и 443.
Выполняем команды:
iptables -I INPUT -p tcp --dport 80 -j ACCEPTiptables -I INPUT -p tcp --dport 443 -j ACCEPTСохраним правила с помощью netfilter-persistent:
apt install iptables-persistentnetfilter-persistent saveНастройка сервера баз данных
В качестве СУБД используем MariaDB.
Устанавливаем:
apt install mariadb-serverРазрешаем автозапуск и стартуем сервис:
systemctl enable mariadbsystemctl start mariadbЗадаем пароль для суперпользователя mysql:
mysqladmin -u root passwordПодключаемся к MariaDB, создаем базу данных и пользователя:
mysql -uroot -pCREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;>
GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY 'nextcloud';\qУстановка и настройка веб-сервера
PHP
Перед тем, как устанавливать php, стоит изучить системные требования Nextcloud. Для корректной работы нужно установить рекомендуемую версию PHP.
На момент последнего обновления инструкции, рекомендовалось установить PHP версии 8.1. Для дальнейшего удобства работы, мы сохраним ее в переменную:
export PHP_VER=8.1Посмотреть, какая версия будет установлена из репозитория системы можно командой:
apt search --names-only '^php[.0-9]{3}$'а) Если она соответствует рекомендации Nextcloud, вводим команду для установки PHP, PHP-FPM и необходимых расширений:
apt install php php-fpm php-common php-zip php-xml php-intl php-gd php-mysql php-mbstring php-curl php-imagickб) Если рекомендованной PHP версии в репозитории нет, переходим к инструкции Установка разных версий PHP на Linux Ubuntu. А для установки расширений используем команду:
apt install php${PHP_VER}-fpm php${PHP_VER}-common php${PHP_VER}-zip php${PHP_VER}-xml php${PHP_VER}-intl php${PHP_VER}-gd php${PHP_VER}-mysql php${PHP_VER}-mbstring php${PHP_VER}-curl php${PHP_VER}-imagick php${PHP_VER}-gmp php${PHP_VER}-bcmath libmagickcore-6.q16-6-extra* где PHP_VER — ранее определенная нами переменная с рекомендованной версией PHP.
Установка php завершена и можно перейти к ее настройке.
Настраиваем php-fpm:
vi /etc/php/${PHP_VER}/fpm/pool.d/www.conf* путь к данной папке зависит от установленной версии php. В данном примере это 8.1 (задана через переменную PHP_VER).
Снимаем комментарии со следующей строки:
Цитироватьenv[PATH] = /usr/local/bin:/usr/bin:/bin
Настраиваем php.ini:
vi /etc/php/${PHP_VER}/fpm/php.ini
Цитироватьopcache.enable_cli=1
opcache.interned_strings_buffer=32
opcache.revalidate_freq=1
sed -i 's/;opcache.enable=.*/opcache.enable=1/' /etc/php/8.3/fpm/php.inised -i 's/;opcache.enable_cli=.*/opcache.enable_cli=1/' /etc/php/8.3/fpm/php.inised -i 's/;opcache.memory_consumption=.*/opcache.memory_consumption=128/' /etc/php/8.3/fpm/php.inised -i 's/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/' /etc/php/8.3/fpm/php.inised -i 's/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/' /etc/php/8.3/fpm/php.iniРазрешаем автозапуск php-fpm и перезапускаем его:
systemctl enable php${PHP_VER}-fpmsystemctl restart php${PHP_VER}-fpmNGINX
Nextcloud можно развернуть на NGINX или Apache. В данной инструкции будем использовать первый.
Устанавливаем веб-сервер:
apt install nginxСоздаем виртуальный домен и настраиваем его для работы с облачным сервисом:
vi /etc/nginx/sites-enabled/nextcloud.confserver {
listen 80;
listen 443 ssl;
server_name nextcloud.yourdomain.com;
if ($scheme = 'http') {
return 301 https://$host$request_uri;
}
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 ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location = /.well-known/webfinger { return 301 /index.php/.well-known/webfinger; }
location = /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; }
location ^~ /.well-known{ return 301 /index.php/$uri; }
try_files $uri $uri/ =404;
}
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 ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
if ($request_method = OPTIONS) {
return 301 $scheme://$server_name/remote.php/webdav/;
}
}
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/php8.1-fpm.sock;
}
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires modified +30d;
access_log off;
}
}* где:
nextcloud.yourdomain.com — домен, на котором будет работать сервис;
/etc/nginx/ssl — каталог, в котором будут храниться сертификаты;
/var/www/nextcloud — каталог с порталом.
fastcgi_pass — обработчик скриптов. В нашем примере используется php-fpm. Обратите внимание, что путь до сокетного файла будет зависить от версии PHP.
Создаем каталог для хранения сертификатов и переходим в него:
mkdir /etc/nginx/sslcd /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.yourdomain.com/CN=nextcloud"* данная команда создаст сертификат на 4 года для URL nextcloud.yourdomain.com или nextcloud.
В нашем примере мы запустили nextcloud с использованием самоподписанного сертификата. Для продуктивной среды рекомендуется использовать купленный сертификат или бесплатный от Let's Encrypt.
После установки php мог установиться и запуститься apache. Отключаем его:
systemctl stop apache2systemctl disable apache2Проверяем конфигурацию nginx и перезапускаем сервис:
nginx -tsystemctl restart nginxРазрешаем автозапуск:
systemctl enable nginxУстановка Nextcloud
Устанавливаем пакет unzip:
apt install unzipImagemagik
apt install imagemagickНа странице nextcloud можно ознакомиться с возможными вариантами загрузки портала. Мы же возьмем последнюю версию.
Переходим во временную папку и скачиваем исходник:
cd /tmpwget https://download.nextcloud.com/server/releases/latest.zipРаспаковываем скачанный архив:
unzip latest.zipИ переносим содержимое архива в каталог /var/www:
mv nextcloud /var/wwwЗадаем права доступа:
chown -R www-data:www-data /var/www/nextcloudОткрываем браузер и переходим по адресу https://nextcloud.yourdomain.com, где nextcloud.yourdomain.com — адрес облачного сервиса.
Задаем логин и пароль для администратора. В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим в качестве логина, пароля и базы nextcloud.
Задаем параметры для подключения к базе данных
Завершаем установку.
Оптимизируем работу базы данных:
sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigintТюнинг после установки
Для корректной работы системы выполним дополнительную настройку. После входа в nextcloud под администратором, переходим в настройки для пользователя:
Переходим в настройку Nextcloud
В разделе «Параметры сервера» переходим в Основные сведения:
Переходим к общим сведениям
В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем:
В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем
Рассмотрим процесс решения некоторых из них.
1. Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ
Открываем на редактирование файл:
vi /etc/php/${PHP_VER}/fpm/php.iniМеняем настройку для memory_limit:
memory_limit = 512MПерезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpm2. В системе не установлены рекомендуемые модули PHP
Данная ошибка устраняется в зависимости от списка модулей, которых не хватает системе. Чаще всего, подходит команда:
Цитироватьdnf install php-<название модуля>
Например:
apt install php-gmp php-bcmathПосле перезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpm3. Не настроена система кеширования
Для решения проблемы мы должны установить и настроить одно из средств кэширования:
APCu
Redis
Memcached
Мы рассмотрим два последних варианта.
Redis
Устанавливаем сам Redis Server и модуль php:
apt install redis-server php-redis* в случае установки сервера Redis на отдельный сервер, необходимо выполнить на сервере Nextcloud только установку php-redis.
Перезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpmОткрываем конфигурационный файл для nextcloud:
vi /var/www/nextcloud/config/config.phpИ добавим:
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => 'localhost',
'port' => 6379,
),Готово.
Memcached
Выполняем установку модуля для php и сам сервис memcached:
apt install memcached php-memcachedПосле разрешаем его автозапуск:
systemctl enable memcachedПерезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpmПосле этого открываем конфигурационный файл для nextcloud:
vi /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,
),
), ...
Готово.
4. Не указан регион размещения этого сервера Nextcloud
Для решения проблемы открываем конфигурационный файл nextcloud:
vi /var/www/nextcloud/config/config.phpДобавляем:
...
'default_phone_region' => 'RU',Работа с пользователями из UNIX-Shell
В состав nextcloud входит php-скрипт occ, с помощью которого можно управлять сервисом из командной строки Linux.
Добавление пользователя
Создать нового пользователя можно командой:
sudo -u www-data php /var/www/nextcloud/occ user:add admin* где admin — имя учетной записи.
Сброс пароля
При необходимости сбросить пароль пользователя, можно воспользоваться командой:
sudo -u www-data php /var/www/nextcloud/occ user:resetpassword admin* где admin — учетная запись пользователя, чей пароль хотим сбросить.
Подключение папки nextcloud по webdav
Мы можем подключить пользовательские данные nextcloud в качестве сетевого диска или раздела. Рассмотрим процесс для Windows и Linux.
Windows
Для начала необходимо включить службу «Веб-клиент». Для этого открываем от администратора командную строку и вводим команды:
sc config webclient start= autonet start webclient* первая команда включит автозапуск службы; вторая — запустит ее.
После открываем командную строку от пользователя и создаем сетевой диск командой:
net use <Буква диска>: https://<путь до nextcloud>/remote.php/webdav /user:user passwordНапример, для нашей настройки:
net use N: https://nextcloud.yourdomain.com/remote.php/webdav /user:admin password* где N — буква сетевого диска; nextcloud.yourdomain.com — адрес нашего сервера; admin — учетная запись, которая была создана при установке системы; password — пароль от пользователя admin.
Ограничение на копирование файла с webdav
В Windows при попытке скопировать большой файл с папки webdav, мы можем получить ошибку «Ошибка 0x800700DF: Размер файла превышает установленное ограничение, сохранение файла невозможно.»:
Ошибка при копировании большого файла с папки webdav
Для решения проблемы необходимо на клиенте разрешить больший объем для загрузки файлов. Это делается в реестре — ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters, параметр FileSizeLimitInBytes. Для примера, если задать значение 4294967295 (максимально возможное), то мы получим ограничение в 4 Гб.
Также можно воспользоваться командой:
reg add "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v FileSizeLimitInBytes /t REG_DWORD /d 4294967295 /f* команду нужно запускать в консоли, запущенной от администратора. В данном примере мы задаем также ограничение в 4 Гб.
Linux
Установим клиент davfs2. Действия будут немного различаться в зависимости от дистрибутива Linux.
а) Ubuntu / Debian:
apt install davfs2б) CentOS / Red Hat:
yum install davfs2Теперь мы можем примонтировать
mount -t davfs -o noexec https://nextcloud.yourdomain.com/remote.php/webdav /mnt* в данном примере мы запустим команду на монтирование раздела по webdav в каталог /mnt. Обращение выполняется на наш сервер nextcloud.yourdomain.com.
После ввода команды, система попросит нас ввести логин и пароль от учетной записи Nextcloud:
Username: user
...
Password:
После каталог будет примонтирован.
Для постоянного монтирования серез fstab, открываем файл:
vi /etc/fstabДобавляем строчку:
https://nextcloud.yourdomain.com/remote.php/webdav/ /mnt davfs user,rw,_netdev 0 0После открываем файл:
vi /etc/davfs2/secretsИ добавляем строку:
/mnt user password* где /mnt — предполагаемый каталог, куда мы будем монтировать данные; user и password — логин и пароль от учетной записи в Nextcloud.
Монтируем каталог командой:
mount -a