Установка Nextcloud на Windows Server

Материал из system.c
Перейти к навигации Перейти к поиску

Введение

Итак Nextcloud. Локальное облако. Я заинтересовался этим проектом для замены у клиентов бесконечных "общих папок", которые в смысле безопасности и распределения прав доступа вообще никак. Плюс возможность отправлять вместо собственно файла во вложении к письму, ссылку на него. Данное описание не претендует на полноту. В любом случае, в интернете достаточно описаний. Скорее это заметки о моментах, которые обычно опускают.

Подготовка системы

Установка VirtualBox

Все попытки установить Nextcloud на IIS закончились ничем :(. Установка запускалась, но при завершении настроек не создавались таблицы в базе данных. Тестовая установка на Debian показала, что это именно проблема Windows сервера. Было решено устанавливать на виртуальную машину apache, php, а SQL сервер и папку с данными оставить на host машине. Это вопрос удобства миграции. На виртуальной машине достаточно перенести папку web сервера, а все данные сохраняются на host машине.
В качестве виртуальной машины был выбран VirtualBox. QEMU работает очень медленно, а поддержки KVM в Windows понятно нет.
Скачиваем установщик по ссылке. Сначала я установил 6-ю версию, но при запуске виртуальной машины мне выдало ошибку. Поиск по коду свелся к советам типа "протрите фары и похлопайте дверцами". Удалил 6-ю версию и скачал 5.2, все заработало.
Установка и создание виртуальной машины в VirtualBox достаточно тривиально и здесь я это описывать не буду. Диск я выбрал размером 16Gb, памяти 1Gb и два виртуальных процессора.

Установка Debian

Образ Debian берем отсюда. Запускаем VM. При установке следуем инструкциям. При выборе пакетов указываем web-server, чтобы apache не устанавливать потом. После завершения добавляем необходимые пакеты. Сначала sudo.

   # apt install sudo
   # usermod -a -G sudo sergiy

Последней командой добавляем пользователя в группу wheel.
Далее необходимо установить пакеты, необходимые для сборки модулей ядра. Все это понадобиться для дополнений гостевой системы.

   # sudo apt install linux-headers-$(uname -r) cpp gcc make

После того, как все это хозяйство настроится установим дополнения гостевой системы. В меню виртуальной машины выбираем "Устройства" - "Подключить образ диска Дополнений гостевой ОС...". Монтируем виртуальный CD-ROM командой

   # sudo mount /media/cdrom -o exec

Запускаем установку дополнений

   # cd /media/cdrom
   # sudo ./VBoxLinuxAdditions.run

Установка займет некоторое время необходимое для сборки модулей.
В файл /etc/fstab добавляем следующую строку

   имя_общей_папки точка_монтирования vboxsf auto,uid=33,gid=33,umask=0007 0 0

,где

  • имя_общей_папки имя общей папки его указали в диалоге создания VirtualBox,
  • точка_монтирования - куда монтируем общую папку,
  • vboxsf - тип файловой системы,
  • auto,uid=33,gid=33,umask=0007 - параметры монтирования, uid и gid указываем для пользователя и папки www-data, umask - для прав доступа к папке монтирования равным 770, это требования nextcloud.

Настройки сети я в данном описании пропускаю, так как это вещь достаточно индивидуальная.
По окончании перезагружаем виртуальную машину.

Установка и настройка MySQL

Установка MySQL на WIndows описана в этой статье, так что остается только создать базу данных для Nextcloud. Запускаем командную строку от имени Администратора и переходим в папку bin каталога с MySQL. Запускаем MySQL командой

   mysql -u root -p

и выполняем следующие команды:

   CREATE DATABASE nextcloud;
   CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'new_password_here';
   GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;
   FLUSH PRIVILEGES;
   EXIT;

Естественно имена имена бызы данных, пользователя, пароль указываете собственные. И не забудьте заменить localhost на адрес вашего сервера в виртуальной машине.

Установка PHP и настройка apache

Далее нам потребуется установить php и необходимые дополнения. Выполняем команду

   # sudo apt install php php-mysql php-zip php-dom php-xml php-soap php-apcu 
   > php-smbclient php-ldap php-redis php-xmlrpc php-mbstring php-gd php-curl
   > php-intl php-json php-imagick 

После установки php необходимо в файле php.ini отредактировать следующие параметры

   memory_limit = 512M ; рекомендуемый для Nextcloud объем памяти

Перезапускаем сервер apache

   # sudo service apache2 restart

Установка Nextcloud

Скачиваем Nextcloud отсюда. В простейшем варианте просто распаковываем в папку /var/www/html на виртуальной машине. И меняем права на папку

   # sudo chown -R www-data:www-data /var/www/html/nextcloud/
   # sudo chmod -R 755 /var/www/html/nextcloud/

Можно пробовать. В адресной строке браузера вводим http://адрес_сервера/nextcloud и переходим к настройке.

Создание самоподписанного сертификата и настройка SSL соединения

Nextcloud настоятельно рекомендует настроить SSL для работы с файловым архивом. В принципе рекомендация логичная, но тут возникают некоторые проблемы. Выпуск нормального сертификата обойдется в сумму более 10000 руб. в год, что для простенького локального облака как-то чересчур! Вариант с Let's Encrypt великолепный, но, внезапно, ни один из виденных мной регистраторов доменных имен в зоне ru не дает возможности вставить DNS запись. Увы, но если нет желания платить внушительную сумму приходится мериться с самоподписанным сертификатом, игнорируя ругательства браузеров. Для выпуска сертификата необходимо ввести команду:

   # sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/apache.key -out /etc/ssl/certs/apache.crt

Где:

  • -days - срок действия сертификата (берем 10 лет или на ваше усмотрение);
  • -keyout - папка для ключа (может быть любой);
  • -out - папка для сертификата.

После запуска команды отвечаем на вопросы. Аккуратнее с полем "Common name", туда требуется ввести корректное доменное имя сайта. Все, сертификат готов.
Далее нам необходимо подготовить конфигурационный файл apache. Идем в папку /etc/apache2/sites-available и ищем там файл default-ssl.conf. В этом файла нужно отредактировать (или добавить если их нет) следующие строки:

   ServerAdmin admin@example.com
   ServerName your_domain.com
   ServerAlias www.your_domain.com
   DocumentRoot /var/www/html
   ...
   SSLCertificateFile /etc/ssl/certs/apache.crt
   SSLCertificateKeyFile /etc/ssl/private/apache.key

После установки

WebDAV

При монтировании папки Nextcloud как сетевого диска в Windows возникают проблемы. Запрашивает пароль и выдает ошибку 67 - "Сетевой путь не найден". Для исправления ошибке необходимо в реестре по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters в параметре BasicAuthLevel проставить значение 2 и перезапустить службу Веб-клиент.

Запуск виртуальной машины как службы

Для этих целей можно использовать VirtualboxVmService. Скачайте программу соответственно свой версии VirtualBox, запустите установку. Собственно все, остается только отредактировать файл VBoxVmService.ini (по умолчанию он находится в папке C:\vms).

   [Settings]
   # Путь к дирректории .VirtualBox для вашего профиля. Она обычно располагается 
   # в персональной папке пользователя.
   VBOX_USER_HOME=C:\Users\Администратор\.VirtualBox
   # Стартовать или нет VBoxWebSrv.exe, VirtualBox HTTP веб сервер автоматически.
   # Может быть «yes» или «no». Оставьте ее в «no» если вы не знаете что это.
   RunWebService=no
   # Параметр используется для замедления выключения компьютера чтобы предотвратить
   # крах виртуальной машины при выключении или перезагрузке. (5000=5 секунд). 
   # Заметьте что Windows имеет ограниченя как долго контроллер сервиса будет ждать
   # когда система перезагрузится. Лимит времени определен в переменной 
   # WaitToKillServiceTimeout в следующей ветке реестра 
   # HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control. Ваше значение PauseShutdown
   # не должно превышать это значение в реестре.
   PauseShutdown=5000
   # Далее следуют секции виртуальных машин. Их может быть несколько, сответственно
   # Vm0, Vm1 и т. д.
   [Vm0]
   # Имя для запуска VM (Чуствительно к регистру!)
   VmName=nextcloud
   # Метод выключения («savestate», или «acpipowerbutton»). Когда используется
   # «savestate», состояние машины сохраняется и может быть возобновлено когда
   # она старует в следующий раз. Когда используется «acpipowerbutton» , VM просто
   # выключится. Если ваша VM долго выключается рекомендуется использовать
   # savestate, который завершает намного быстрее.
   ShutdownMethod=acpipowerbutton
   # Будет или нет VM стартовать автоматически когда VBoxVmService работает. 
   # По умолчанию установлено в «yes».
   AutoStart=yes

После редактирования ini-файла требуется запустить службу VBoxVmService.