Супер Спарпёр!
SSPDev Wolves Brotherhood My Nextcloud AppleLife MAC-RU.NET Nextcloud+Apache Setup Nextcloud+Nginx Setup

Установка и настройка Nextcloud,
qBittorent и медиа-сервер Plex
на macOS 10.13.6 + nginx

После того, как я поднял облако на Apache (с использованием macOS Server 5.6.3) и столкнулся с отсутствием работы webdav через HTTPS, решил попробовать свои силы в Nginx.

Я пробовал ставить macOS 10.14 и 10.15 на сервер, но эти версии macOS больше нагружают процессор по сравнению с 10.13.6. А оно мне надо? К тому же использование macOS 10.13.6 позволяет использовать VPN (в macOS и iOS по-умолчанию есть клиент L2TP и это минимизирует количество стороннего софта на девайсах) в macOS Server (5.6.3), но есть один момент: Server.app обращается к встроенному в macOS Apache (слушает порты 80 и 443), в следствие чего при попытке включить nginx (если его выключить через терминал и там же попытаться включить), то он будет ругаться на занятые порты. Чтобы такого не было, надо в настройках Apache отключить прослушивание портов. Для этого в файле /Library/Server/Web/Config/Proxy/apache_serviceproxy.conf надо закомментировать listen 80 и listen 443 и перезапустить Server.app. И теперь все по красоте! Хоть в macOS и есть встроенный PHP, но в High Sierra его версия 7.1.36, если мне не изменяет память, что для меня не приемлемо. К тому же для работы Nextcloud необходимы некоторые модули, которых нет во встроенном PHP. Я решил воспользоваться Homebrew для установки всех необходимых мне компонентов.

По-мимо Nextcloud, я установил и настроил qBittorrent и медиа-сервер Plex. Я выбрал qBittorrent потому, что он поддерживает последовательную загрузку файлов, что очень удобно, если качаешь сериалы. Ну а Plex я выбрал потому, что просто понравился. От "сервера" я жду (в идеале) отсутствия необходимости физического контакта и низкого энергопотребления, так как он будет работать 24/7. Для этого я решил использовать имеющийся у меня системник Small Form Factor с блоком питания на 180W. Конфигурация следующая:
- Chipset Q270;
- i5-7500, 3.4GHz, 6MB L3;
- DDR4-2666 8GB RAM (есть возможность расширить до 64GB, но надо ли будет?);
- NVMe 128GB для установки ОС;
- 2хHDD 2.5" по 2TB (для RAID1);
- BCM94360CD (по желанию, но я хотел бы, чтобы в системе работали все фишки).

Так как для этого системника предусмотрена установка только одного HDD 3.5", а мне нужно сделать "зеркало" и подключать внешний HDD каким-либо способом я не хочу, было принято решение ловко модифицировать отсек для HDD адаптером 3.5"-to-2.5". В магазине я нашел дешевый пластиковый адаптер, в который можно установить 2 штуки 2.5", а так же я прикупил разветвитель питания SATA, так как в системнике не предусмотрена установка второго SATA-накопителя. Собрав всю конструкцию, можно приступать к установке macOS Server 10.13.6 High Sierra.

На время установки 10.13.6 необходимо отключить системник от интернета, так как он будет проверять текущую дату. Так как время 10.13.6 "уже прошло", нужно на верхней панели выбрать Утилиты -> Терминал и ввести команду для изменения текущей даты и времени "date 0717201018" (формат - mmddHHMMyy, 17.08.2018 20:10). Закрываем терминал. Идем в "Дисковая утилита", форматируем накопитель для установки ОС. Теперь надо сделать массив с зеркалирование, на случай поломки HDD. Нажимаем "Файл" -> "Ассистент RAID". В появившемся окне выбираем нужный пункт (я выбрал "С зеркалированием RAID1") и нажимаем "Далее". Ставим галки напротив нужных дисков (не логических, а физических) и нажимаем "Далее". Выбираем формат файловой системы (для HDD лучше выбрать Mac OS Extended, а для SSD - APFS), вводим название будущего RAID-массива и выбираем размер блока (я выбрал 256КБ). Галку "Перестраивать автоматически" я оставил. "Далее". После форматирования HDD, выходим из дисковой утилиты и жмем на "Установить macOS High Sierra". Если не поменять время ОС, то на этом этом этапе вылетит ошибка о невозможности установки macOS. Надо обязательно отключить системник от интернета, чтобы время не восстанавливалось. После полной установки macOS (у меня это после второй перезагрузки) подключаем кабель интернета к системнику и заходим в установку macOS. Нажимаем "Установить macOS High Sierra", тут должно вылететь окно ошибки о невозможности установить macOS. Это означает, что время ОС восстановилось на текущее. Эта манипуляция нужна для того, чтобы во время стартовой настройки системы не вылетала ошибка при попытке авторизации в iCloud из-за измененного времени. В общем, настроиваем ОС, выходим на рабочий стол, идем в "Системные настройки" -> "Общий доступ", редактируем имя компа на нужное, делаем прочие настройки системы на свой вкус. Далее идем в Mac App Store, скачиваем и устанавливаем обновления (по-желанию, но я обновил, чтобы не висели и не делали мозг). Нам понадобится macOS Server 5.6+ (из MAS можно скачать 5.6.3; в macOS 10.14 будет уже без GUI Web-server и VPN).

Итак, настроили и обновили ОС, установили macOS Server 5.6.3, теперь открываем Terminal.app и приступаем к установке прочего необходимого, копипастим команды в терминал:

1. Устанавливаем CommandLine:

xcode-select --install

2. Устанавливаем Homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

3. Устанавливаем Nginx:

brew install nginx

brew services start nginx

Для запуска nginx вместе с системой:

sudo cp /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons

Создать директории для хранения конфигов:

mkdir - p /Volumes/путь_до_папки/sites-available

mkdir - p /Volumes/путь_до_папки/sites-enabled

После создания файла конфига для какого-нибудь хоста надо его сохранить в папке sites-available и командой добавить псевдоним файла в папку sites-enabled:

ln -sfv /Volumes/путь_до_папки/sites-available/nextcloud.conf /Volumes/путь_до_папки/sites-enabled/nextcloud.conf

Также надо настроить конфиг для Nginx:

sudo nano /usr/local/etc/nginx/nginx.conf

user имя_юзера staff; #изменить на свои

worker_processes auto;

error_log /var/log/nginx.error.log;

pid /usr/local/var/run/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log /usr/local/var/log/nginx/access.log;

error_log /usr/local/var/log/nginx/error.log;

sendfile on;

tcp_nopush on;

keepalive_timeout 75;

gzip on;

gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

server {

listen 80;

server_name localhost 127.0.0.1;

location / {

index index.html;

}

root /Volumes/путь_до_файла/default;

}

include /Volumes/путь_до_папки/sites-enabled/*.conf;

}

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

brew install php

brew services start php

4. Делаем запись в bash_profile, чтобы наш новый PHP использовался по-умолчанию:

echo 'export PATH="/usr/local/opt/php/bin:$PATH"' >> ~/.bash_profile

echo 'export PATH="/usr/local/opt/php/sbin:$PATH"' >> ~/.bash_profile

source ~/.bash_profile

5. Проверяем, принят ли наш PHP по-умолчанию:

php --version

Вывод:

PHP 7.3.13 (cli) (built: Dec 18 2019 16:09:46) ( NTS )

.....

6. Смотрим директории важных php-шных файлов:

php --ini

Вывод:

Configuration File (php.ini) Path: /usr/local/etc/php/7.3

Loaded Configuration File: /usr/local/etc/php/7.3/php.ini

Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d

Additional .ini files parsed: /usr/local/etc/php/7.3/conf.d/ext-opcache.ini

Нам важна вторая строка (про файл php.ini, туда надо изменения вносить).

7. Устанавливаем необходимые extensions (продолжаем копипастить):

pecl install xdebug

brew install pkgconfig

brew install imagemagick

pecl install imagick

pecl install apcu

brew install memcached

pecl install memcache

brew install ffmpeg

brew services restart php

8. Устанавливаем медиа-сервер Plex (я ставлю через brew, но можно и с оф.сайта скачать):

brew cask install plex-media-server

9. Устанавливаем и стартуем postgresql (можно и mariadb поставить, кому как нравится):

brew install postgresql

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

Теперь надо зайти в psql, создать БД, пользователя и дать ему права на эту БД (вносим свои данные):

sudo psql -U имя_лок_юзера -d postgres

CREATE USER имя_юзераБД WITH SUPERUSER PASSWORD 'пароль_юзераБД';

ALTER DATABASE postgres OWNER TO имя_юзераБД;

CREATE DATABASE имя_новойБД;

GRANT ALL ON DATABASE имя_новойБД TO имя_юзераБД;

\q

10. Теперь надо настроить php.ini, чтобы в Nextcloud не было предупреждений:

sudo nano /usr/local/etc/php/7.3/php.ini

Ищем строки, раскомментируем и меняем значения на указанные ниже:

memory_limit = 4096M (минимум 512 для Nextcloud)

cgi.fix_pathinfo=0

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=128

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=10000

opcache.revalidate_freq=1

opcache.save_comments=1

post_max_size = 200G

upload_max_filesize = 200G

Сохраняем конфиг (ctrl+O, Enter) и выходим (ctrl+X).

11. Теперь надо настроить www.conf:

sudo nano /usr/local/etc/php/7.3/php-fpm.d/www.conf

Ищем строки, раскомментируем и меняем значения на указанные ниже:

clear_env=no

pm = dynamic

pm.max_children = 120

pm.start_servers = 12

pm.min_spare_servers = 6

pm.max_spare_servers = 18

brew services restart php

12. Теперь надо настроить php-fpm.conf:

sudo nano /usr/local/etc/php/7.3/php-fpm.conf

Раскоментить строку error_log и добавить путь /usr/local/var/

error_log = /usr/local/var/log/php-fpm.log

14. Создаем и редактируем файл crontab, чтобы он с заданным периодом вызывал файл cron.php:

sudo touch ~/.crontab

sudo nano ~/.crontab

Теперь вносим настройки для вызова файла cron.php

*/5 * * * * php -f /директория_до_папки_облака/nextcloud/cron.php

Сохраняем и выходим. Задаем наш новый файл crontab, как основной:

crontab ~/.crontab

15. Идем на сайт Nextcloud, скачиваем архив с папкой Nextcloud актуальной версии.

16. Теперь надо настроить конфиг для хоста облака:






Если всё настроено верно, то откроется страница установки Nextcloud:

start page

Жмем "Next", выбираем место установки (я ничего не менял и оставил папку nextcloud):

change directory

Жмем "Next", даем браузеру время подумать, скачать и установить файлы облака. После этого появится страница, в верхней части которой будет сообщение с предупреждением о том, что "работа Nexcloud на macOS не стабильна, поэтому используйте на свой страх и риск":

MACOS, MF!!!

Ниже мы увидем форму создания логина и пароля администратора облака,

admins login and pass

установки директории самого хранилища наших файлов (если его не изменить, то Nextcloud позже выдаст предупреждение, что для безопасности надо бы использовать отдельную директорию для файлов, поэтому я директорию nextcloud/data меняю на nextcloud-data и каталог с моими данными будет в папке рядом с основной папкой облака)

directory of data

По-умолчанию, Nextcloud предлагает нам использовать SQLite, но предупреждает о нежелательности его использования:

sqlite

Выбираем Postgresql (или MariaDB/MySQL, если вы создали эту базу) и вносим имя_юзераБД, пароль_юзераБД, имя_новойБД, директорию оставляем localhost и жмем "Завершить установку".

psql

Браузер подумаем и перекинет нас на главную страницу облака. В верхнем правом углу жмем на иконку пользователя и нажимаем "Настройки", слева жмем "Общие сведения".

Настройки

На этой странице будут отображены предупреждения о необходимости соответствующей настройки Nextcloud.

Предупреждения

Исправление предупреждений сделайте после того, как закончите с созданием виртуальных хостов и редактированием его конфига. Первые два предупреждения исчезнут, когда откроете веб-интерфейс облака через домен, который будет ссылаться непосредственно на папку /nextcloud. Третье предупреждение исчезнет, когда настроите 'trusted_proxies' в файле config.php (см.ниже). Предупреждения об использовании SQLite не будет, если использовать MariaDB или Postgresql. Пятое и шестое предупреждение исчезнет, когда внесете в конфиг виртуального хоста редирект на указанные в предупреждении директории (решение см.ниже). Предупреждение про кеширование исчезнет (при условии, что в файл php.ini внесены вышеуказанные правки), когда впишите в config.php сроку 'memcache.local'... (см.ниже). Чтобы исправить последнее предупреждение, нужно открыть терминал и вбить команду "сd /путь_до_папки_облака/nextcloud", а затем ввести команду:

php -f occ db:convert-filecache-bigint


Предупреждение

Ниже находится настройка канала обновления (чтобы проверить наличие обновлений, надо нажать на кнопку "Stable" и нажать на поле "Stable" и обновить страницу браузера).

updates

updates

Переходим в "Основные параметры" и выбираем Cron. Браузер не закрываем.

cron

Нужно настроить файл config.php, который находится в папке /nextcloud/config:

sudo nano /директория_до_папки_облака/nextcloud/config/config.php

Над строкой 'datadirectory' пишем:

'memcache.local' => '\OC\Memcache\APCu',


memcache

Сохраняем конфиг и выходим.

Теперь установим бота Let's encrypt. Перед всей этой работой я создал дополнительные домены для облака, Plex и qBittorent. Рядом с папкой nextcloud создадим папки plex и qbittorrent. Открываем терминал:

brew install letsencrypt

sudo certbot --nginx

Далее вбиваем мыло и выбираем нужный домен

Облако установлено. Теперь займемся qBittorrent. В настройках qBittorent включаем веб-интерфейс, включаем доступ оп HTTPS и добавляем сертификат+ключ. (на время настройки я сделал самоподписанный сертификат)