Установка MajorDoMo на голую debian-11

Наш телеграмм канал

Здравствуйте! За 3 года эксплуатации MD на raspberry я немного устал менять SD карты и перенастраивать систему с нуля. Почему с нуля, да потому, что восстановление backup перестал работать. Обращаясь за консультацией решения моих ошибок в системе MD реакция гуру на использование raspbery совместно с SD картой, мягко говоря отвратительная. Поэтому я решил установить сервер MajorDoMo с самого начала на старенький ноутбук без GUI. Чиcтую debian-11. Поэтому по мере установки я буду конспектировать все действия которые мне пришлось проделать в момент установки и настройки сервера. Я надеюсь, что мои читатели умеют устанавливать linux на свои машины, поэтому я перейду сразу к установке и настройки системы в целом. Так как мне удобнее использовать SSH то в момент установки linux я поставил галочку для установки SSH подключения. Так же я установил галочку напротив WEB сервера и установка стандартных системных утилит. Я не буду расписывать какая команда за что отвечает так как сам многое не знаю, но я буду рассказывать своими словами, что я делаю, поэтому прошу всех специалистов linux не пинать меня а поправить, обещаю исправить неточности на которые вы укажите.

Подключаемся к серверу по SSH

Определяем наш текущий IP

ip addr show

Получаем примерно такой результат:

Устанавливаем статический IP

Редактируем файл настроек сети

sudo nano /etc/network/interfaces

скорее всего у вас будет ошибка – “-bash: sudo: команда не найдена”. Исправляется она установкой sudo вот этой командой из под root.

apt install sudo

далее повторяем редактирование файла настроек сети командой:

sudo nano /etc/network/interfaces

Меняем параметр dhcp на static, и дописываем параметры сети

Перезапускаем сеть:

systemctl restart networking

Если сетевой интерфейс не поднялся, выполняем команду:

sudo ifup enp0s3

Ну а теперь можно и обновиться:

sudo apt update && sudo apt upgrade

Настройка WEB сервера

Далее нужно установить WEB сервер, Apache. Но я при установке linux оставил галочки на WEB сервер. Если вы сделали так же то проверьте установлен у вас сервер или нет. Сделать это можно двумя способами. 

  1. вводим команду sudo httpd -v или:  sudo apache2 -v Пример вывода: Server version: Apache/2.4.38 (Debian)
    Server built:   2021-12-21T16:50:43
  2. Заходим в браузер и вводим IP вашего сервера. Вы должны получить страницу такого плана:

Всё же настройка WEB сервера необходима. Приступим:

запретим вывод версии Apache. Для этого откроем в редакторе Nano файл по пути:

sudo nano /etc/apache2/conf-enabled/security.conf

находим:

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Далее вносим изменения в его конфигурационный файл.

sudo nano /etc/apache2/sites-available/000-default.conf

Я просто удалил все записи из конфигурационного файла, и вставил в него следующее:

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Изменим следующий конфигурационный файл:

sudo nano /etc/apache2/apache2.conf

В самом его конце добавим вот такую строку:

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Перезагрузим Apache:

sudo apache2ctl restart

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

Для установки языка программирования PHP вводим следующую команду:

sudo apt-get install php php-cgi php-cli php-pear php-mysql php-mbstring php-xml -y

Устанавливаем CURL и его библиотеки:

sudo apt-get install curl libcurl4 libcurl3-dev php-curl -y

Устанавливаем PHP-модуль для веб-сервера Apache 2:

sudo apt-get install libapache2-mod-php -y

Включаем конфигурацию php7.3-cgi следующей командой:

sudo a2enconf php7.4-cgi

Перезапускаем сервис Apache:

sudo service apache2 reload

В редакторе nano создаем файл index.php в папке /var/www/html/

sudo nano /var/www/html/index.php

Вводим в созданный файл следующие строки:

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

В этой же папке у нас находится файл index.html. Удалим его командой:

sudo rm /var/www/html/index.html

Включаем работу коротким тегом <? /?> (для последних версий Apache). Для этого редактируем файл php.ini в папке /etc/php/7.3/apache2/

sudo nano /etc/php/7.4/apache2/php.ini

находим строчку:

и меняем на:

Если такой строчки нет, то просто вставляем в конце файла:

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Если этот этап пройден тогда переходим к установке MySQL

Устанавливаем MySQL:

На момент написания я использовал вот эту команду для установки MySQL:

sudo apt-get install mariadb-server-10.5 mariadb-client-10.5 -y

Далее необходимо сделать первоначальную конфигурацию MySQL сервера. К этой процедуре нужно отнестись более внимательно и обязательно нужно записать данные которые вы сейчас будете вводить.
Вводим в командную строку следующее:

sudo mysql_secure_installation

  1. Так как мы только что установили MySQL, пароля у нас нет, он пустой. На этом шаге просто нажимаем Enter.
  2. Далее нам будет предложено изменить этот пароль. Нажимаем Y и вводим пароль (ЗАПИСЫВАЕМ ЕГО!!!)
  3. После ввода пароля нам будет предложено его повторить. Повторяем. Обратите внимание на то, что при вводе пароля на экране ничего не буде происходить, символов, звёздочек, подчёркиваний вы не уведите.
  4. Далее нам буде предложено удалить анонимного пользователя который был создан при установке MySQL в тестовых целях. Соглашаемся введя буку Y.
  5. Далее скрипт предложит запретить вход в систему удаленно.
    Вводим букву Y.
  6. На следующем шаге скрипт предлагает удалить тестовую базу данных: Соглашаемся Y.

  7. Далее будет предложено сохранить внесенные в скрипт изменения:
    Здесь вводим Y, после чего происходит выход из скрипта и возвращение к командной строке.

Вот и вся предварительная настройка MySQL.

Правим конфигурационный файл 50-server.cnf

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Найдем в этом файле строчку:

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

Перед строчкой, которая следует сразу же за только что поменянной, поставим знак решетки # (закомментируем), она должна принять следующий вид:

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Устанавливаем PhpMyAdmin:

Сначала необходимо добавить две ссылки в репозиторий. 

nano /etc/apt/sources.list

вставляем в этот файл эти ссылки:

После этого обновите репозиторий командой

apt-get update
 

PhpMyAdmin — это веб-приложение, которое позволяет через браузер осуществлять администрирование сервера MySQL. Устанавливается оно командой:

sudo apt-get install phpmyadmin php-mbstring php-gettext -y

В процессе установки нам нужно будет ответить на ряд вопросов. Сначала нам будет предложено выбрать версию web-сервера:

Поскольку у нас установлен Apache, то выбираем пункт apache2, нажимаем пробел (чтобы в выбранном пункте отобразилась звездочка), и нажимаем Enter.

Далее нам будет предложено сконфигурировать базы данных при помощи «dbconfig-common»: Здесь мы выбираем Нет!

Далее в браузере проверьте работу PhpMyAdmin. Введите адрес

localhost/phpmyadmin

Введите логин «root» и пароль который вы установили при установке MYSQL. Если у вас появилась ошибка #1698 — Access denied for user ‘root’@’localhost’ тогда вам нужно сделать следующее:

Для получения доступа к базе данных MySQL/MariaDB обычному пользователю без использования sudo привилегий, зайдите в приглашение командной строки MySQL

sudo mysql

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

После ввода последней команды происходит выход из командной строки MySQL.

Далее нам нужно подправить конфигурационный файл apache.conf

sudo nano /etc/phpmyadmin/apache.conf

В открывшемся файле, после строчки DirectoryIndex index.php вставляем строчку:

В этой строчке ip 127.0.0.1 оставляем неизменным, а 192.168.1.0 меняем на ip вашей сети. Адрес моей сети 192.168.1.1

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Включаем mod_rewrite:

mod_rewrite — один из самых часто используемых модулей веб-сервера Apache. Этот модуль предоставляет гибкий и мощный способ манипулирования URL-адресами, используя неограниченное количество правил. Включается он следующей командой:

sudo a2enmod rewrite

Перезагрузим Apache:

sudo apache2ctl restart

Настройка PHP:

Вносим одинаковые изменения в два конфигурационных файла. Сначала мы внесем изменения в файл находящийся по пути /etc/php/7.4/apache2/php.ini

sudo nano /etc/php/7.4/apache2/php.ini

ищем в этом файле строку error_reporting, и приводим ее к следующему виду:

Так же меняем:

max_execution_time — значение 30 меняем на 90

max_input_time — значение 60 меняем на 180

post_max_size — значение 8M меняем на 200M

upload_max_filesize — значение 2M меняем на 50M

max_file_uploads — значение 20 меняем на 150

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Внесем точно такие же изменения в конфигурационный файл, находящийся по пути /etc/php/7.4/cli/php.ini

sudo nano /etc/php/7.4/cli/php.ini

Вносим изменения которые находятся выше.

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Для применения всех изменений нам снова нужно перезапустить Apache

sudo /etc/init.d/apache2 restart

На этом установку и настройку Web-сервера можно считать законченной.

Создание базы данных.

Открывfем любой браузер и вводим IP адрес нашего сервера следующего формата http://IP_адрес_сервера/phpmyadmin где IP_адрес_сервера — это ip адрес вашей малинки. В моём случае 192.168.1.111
попадаем вот на такую форму ввода. Так как я уже создал базу данных то скриншоты будут немного отличаться от тех которые будете видеть вы на своих экранах. Имейте это в виду при дальнейшем ознакомлении со статьёй.

Вводим пользователя root пароль тот (rootpsw), который мы создали и запомнили при установке MySQL. Нажимаем кнопку Вперед, и попадаем в панель управления PhpMyAdmin: Теперь нам нужно создать базу данных db_terminal. Чтобы ее создать, нажимаем «Создать БД» в левой части окна. Затем, в поле Имя базы данных вводим db_terminal и нажимаем кнопку Создать:

После нажатия кнопки Создать, мы переходим в созданную нами базу данных db_terminal.

В верхней части окна ищем кнопку Импорт, и нажимаем её.

И вот тут возникнут проблемы. Но решаются они довольно таки просто. От вас требуется максимум внимания и концентрации. Но только на этом этапе. И так о каких же проблемах я говорю, об ошибках которые посыплются на вас в огромном количестве в виде так называемой «красной простыни» Я не могу точно передать суть ошибки но вы должны посмотреть на строчку примерно вот такого вида:

Вас должно интересовать номер строки который указан после знака #. В нашем случае это строка с номером #601 (у меня была строка с номером 551). Номер строки с указанием на ошибку может быть разный. Наша задача открыть файл в редакторе nano и найти там нужную строчку. И так поехали исправлять:

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php

Нажимаем комбинацию клавиш Ctrl+W (это поиск по файлу) вставляем в строку поиска вот это:

нажимаем enter и переходим на начало искомой строки. Далее мы её редактируем что бы получилось вот такая строка:

Обратите внимание на скобки.

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

И так первый файл мы изменили. Теперь нам нужно изменить ещё один файл.

sudo nano /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

Точно так же нажимаем комбинацию клавиш Ctrl+W вставляем в строку поиска вот это:

нажимаем enter и так же переходим на начало искомой строки. Далее мы её редактируем что бы получилось вот такая строка:

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Вот и всё. Ах да, для чего же нам нудно было знать номер строки указанной в ошибке. Да просто. В ваших файлах может быть добавлен какой то пробел лишний или что то в этом роде и поиском который я описал по комбинации клавиш Ctrl+W вы просто не смогли бы найти нужную строчку. А так можно открыть редактируемый файл в любом текстовом редакторе где отображается номер строки, найти визуально эту строчку и сделать изменения.

Ну да ладно, продолжаем далее настраивать наш сервер. В верхней части окна ищем кнопку Импорт, и нажимаем её.

Теперь нам нужен сам файл базы данных db_terminal.sql, из которого мы импортируем все данные. Скачаем дистрибутив MajorDomo на свой компьютер и разархивируем его. Нажимаем кнопку Обзор: и выбираем из распакованного архива вот этот файл db_terminal.sql. Перематываем это окно в самый низ, и нажимаем кнопку Вперед. Всё, наша база данных заполнилась нужными таблицами.

Установка MajorDoMo

Создадим папку в которой будет находиться наш MajorDoMo.

sudo mkdir /home/majordomo

переходим в эту папку:

cd /home/majordomo

Скачиваем дистрибутив MajorDoMo c githab.

sudo wget https://github.com/sergejey/majordomo/archive/master.zip

распакуем дистрибутив командой:

sudo unzip master.zip

Далее переносим распакованную систему MajorDomo в директорию Web-сервера командой:

sudo cp -rp /home/majordomo/majordomo-master/* /var/www

Теперь надо скопировать и скрытый файл .htaccess. Указываем его явно:

sudo cp -rp /home/majordomo/majordomo-master/.htaccess /var/www

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

Файлам устанавливаем права 0644

sudo find /var/www/ -type f -exec chmod 0644 {} \;

Директориям даём права 0755

sudo find /var/www/ -type d -exec chmod 0755 {} \;

Проверяем как распределились права:

ls -lh /var/www

должно быть так:

MajorDoMo (а именно сервисы: apache и php) работает от пользователя www-data. Права доступа к каталогу /var/www, где лежат файлы Majordomo по умолчанию принадлежат root. Изменим владельца директории /var/www на www-data при помощи следующей команды:

sudo chown -R www-data:www-data /var/www

Далее даём доступ пользователю www-data к медиа устройствам. Для этого добавляем его в группу audio.

sudo usermod -a -G audio www-data

Проверить, что пользователь www-data появился в группе audio можно командой:

cat /etc/group | grep audio

Правка основного конфигурационного файла MajorDoMo

Переходим в терминал или PuTTY и поехали далее:

sudo cp /var/www/config.php.sample /var/www/config.php

Далее пользователя www-data нужно сделать владельцем конфигурационного файла config.php

sudo chown www-data: /var/www/config.php

файл config.php в редакторе Nano

sudo nano /var/www/config.php

Прописываем имя пользователя и пароль в нужных строчках:

 

DB_USER — это пользователь

DB_PASSWORD — пароль

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Основной цикл

Создадим файл описание сервиса для запуска основного цикла системы.

sudo nano /etc/systemd/system/majordomo.service

Заполним его вот этим кодом:

Сохраним изменения Ctrl+O, Enter, Ctrl+X, Enter.

Отключаем режим «Strict mode» для MySQL. Для этого создадим конфигурационный файл:

sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf

Заполняем его этими двумя строками:

Добавляем главный цикл в автозагрузку.

sudo systemctl enable majordomo

Запускаем основной цикл системы:

sudo systemctl start majordomo

Перезапускаем наш Raspberry:

sudo reboot

Переключаемся на наш браузер и вводим адрес нашего сервера «Безумного дома». Радуемся и читаем в моих статьях как же теперь из этого сервера сделать классные вещи!.

Теперь нужно сделать последний штрих – установить MQTT брокер. Без него многие устройства системы работать не смогут.

Установка MQTT брокера

sudo apt update

Чтобы установить Mosquitto, введите:

sudo apt install mosquitto mosquitto-clients

По умолчанию в Debian сервис Mosquitto запускается сразу после установки. Давайте проверим стандартные настройки программы. Для этого нужно подписаться на тему с помощью одного из клиентов Mosquitto.

Темы – это такие метки, которые присваиваются опубликованным сообщениям и на которые можно подписываться. Они организованы в иерархию (например, sensors/outside/temp или sensors/outside/humidity). Упорядочивание тем полностью зависит от ваших требований.

Откройте новую сессию терминала, в результате у вас должно быть два терминала. Запустите в новом терминале команду mosquitto_sub, чтобы подписаться на тему:

Флаг –h указывает имя хоста сервера MQTT, флаг -t – тему. После запуска команды на экране не появится вывода, поскольку mosquitto_sub ждет получения сообщений. Вернитесь в первый терминал и опубликуйте сообщение:

Команда mosquitto_pub использует те же флаги, что и mosquitto_sub, но в этот раз нужен дополнительный флаг –m (он позволяет ввести текст сообщения). Нажмите Enter, и вы увидите в другом терминале ваше MQTT-сообщение «hello world».

Введите во втором терминале CTRL+C, чтобы остановить mosquitto_sub, но не прерывайте подключения (оно понадобится нам позже).

Далее в конфиг файле добавляем следующие строки:

sudo nano /etc/mosquitto/mosquitto.conf

Должно быть примерно так:

Перегружаемся:

sudo systemctl restart mosquitto

Теперь нужно настроить парольную аутентификацию.

Настройка пароля MQTT

Mosquitto предоставляет утилиту mosquitto_passwd для создания файла паролей. Эта команда предложит ввести пароль для указанного пользователя и поместит его в файл /etc/mosquitto/passwd.

sudo mosquitto_passwd -c /etc/mosquitto/passwd 8host

Откройте конфигурации Mosquitto и добавьте в них информацию о новом файле:

sudo nano /etc/mosquitto/conf.d/default.conf

На экране появится пустой файл. Введите в него:

В конце файла нужно обязательно оставить пустую строку.

Строка allow_anonymous false блокирует анонимных пользователей. Строка password_file задает путь к файлу паролей. Сохраните и закройте файл.

Теперь нужно перезапустить Mosquitto и проверить новые настройки:

sudo systemctl restart mosquitto

Попробуйте опубликовать сообщение без пароля:

mosquitto_pub -h localhost -t “test” -m “hello world”

Сервер должен отклонить его:

Connection Refused: not authorised.
Error: The connection was refused.

Прежде чем снова попробовать отправить сообщение, перейдите во второй терминал и подпишитесь на тему test, на этот раз указав имя пользователя и пароль:

mosquitto_sub -h localhost -t test -u “8host” -P “password”

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

Вернитесь в первый терминал и опубликуйте сообщение:

mosquitto_pub -h localhost -t “test” -m “hello world” -u “8host” -P “password”

Сообщение появится во втором терминале. Если всё так, настройка пароля Mosquitto прошла успешно.

На данный момент пароли существуют в незашифрованном виде. Чтобы исправить это, нужно настроить Mosquitto для поддержки SSL-шифрования.

Настройка поддержки SSL

Чтобы настроить SSL-шифрование, нужно показать Mosquitto, где хранятся сертификаты Let’s Encrypt. Откройте конфигурационный файл.

sudo nano /etc/mosquitto/conf.d/default.conf

Добавьте в конец файла такие строки, оставив две строки, что мы добавили ранее.

Теперь файл содержит два отдельных блока listener. Первый, listener 1883 localhost, обновляет прослушиватель MQTT по порту 1883 (стандартный нешифрованный порт MQTT). Часть localhost привязывает этот порт к интерфейсу локального хоста, а значит, к нему не будет внешнего доступа (так или иначе, внешние запросы заблокировал бы брандмауэр).

Строка listener 8883 настраивает зашифрованный прослушиватель по порту 8883. Это стандартный порт MQTT+SSL (что также называется MQTTS). Следующие три строки, certfile, cafile и keyfile указывают Mosquitto путь к файлам сертификата Let’s Encrypt.

Сохраните и закройте файл. Перезапустите Mosquitto:

sudo systemctl restart mosquitto

Откройте порт 8883 в брандмауэре.

sudo ufw allow 8883
Rule added
Rule added (v6)

Создайте ещё одно тестовое сообщение с помощью mosquitto_pub, добавив несколько опций SSL:

mosquitto_pub -h mqtt.example.com -t test -m “hello again” -p 8883 –capath /etc/ssl/certs/ -u “8host” -P “password”

Обратите внимание: вместо localhost здесь используется полное имя хоста. Поскольку сертификат SSL предназначен для домена (в данном случае для mqtt.example.com), при попытке подключиться к localhost вы получите ошибку: ведь имя хоста не совпадает с именем хоста в сертификате (хотя оба они указывают на один и тот же сервер Mosquitto).

Флаг –capath /etc/ssl/certs/ включает SSL для mosquitto_pub и сообщает, где найти root-сертификаты. Обычно они устанавливаются операционной системой, потому путь зависит от ОС. Команда mosquitto_pub проверяет подпись сертификата сервера Mosquitto. Команды mosquitto_pub и mosquitto_sub не смогут создать SSL-соединение без этой опции (или её аналога, –cafile) даже по стандартному порту 8883.

Если все работает правильно, во втором терминале появится сообщение «hello again». Теперь MQTT-сервер полностью готов к работе.

Если вы хотите расширить функции MQTT поддержкой веб-сокетов, следуйте инструкциям следующего раздела.

Поддержка веб-сокетов (опционально)

Для взаимодействия с JavaScript в браузерах протокол MQTT предоставляет поддержку стандартных веб-сокетов. Если эта функция вам не нужна, можете просто не включать ее.

Чтобы включить ее, нужно добавить новый блок listener в настройки Mosqiutto:

sudo nano /etc/mosquitto/conf.d/default.conf

Добавьте в конец файла:

Этот блок почти такой же, как предыдущие блоки, но в нем указан другой номер порта и есть строка protocol websockets. У MQTT нет стандартного порта для поддержки веб-сокетов, но обычно для этого используется 8083.

Сохраните и закройте файл. Перезапустите сервер:

sudo systemctl restart mosquitto

Откройте порт 8083 в брандмауэре:

sudo ufw allow 8083

Чтобы протестировать новые настройки, используйте открытый MQTT-клиент для браузера (например, Eclipse Paho JavaScript Client). Откройте клиент Paho JavaScript Client в браузере.

На экране появится окно настроек.

Заполните эту форму:

  • Host: домен сервера (mqtt.example.com).
  • Port: 8083.
  • ClientId: можно оставить значение по умолчанию (js-utility-DI1m6).
  • Path: можно оставить по умолчанию, /mqtt.
  • Username: имя пользователя Mosquitto (в нашем случае 8host).
  • Password: ваш пароль.

В остальных полях можно оставить значения по умолчанию.

Нажмите кнопку Connect, после чего клиент Paho подключится к серверу Mosquitto.

Чтобы опубликовать сообщение, перейдите в раздел Publish Message, в Topic введите test, а затем введите любое сообщение в поле Message. Нажмите кнопку Publish. Сообщение появится в терминале mosquitto_sub.

Добавить комментарий