[Модуль] Yandex Home (yandexhome)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

VOVA_iS
Сообщения: 205
Зарегистрирован: Пн фев 04, 2019 10:23 pm

Re: [Модуль] Yandex Home (yandexhome)

Сообщение VOVA_iS »

Divan писал(а): Сб апр 25, 2020 7:45 pm

Потом запускаю certbot --apache и получаю эту ошибку
SPOILERSPOILER_SHOW

Код: Выделить всё

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Error while running apache2ctl configtest.
Action 'configtest' failed.
The Apache error log may have more information.

AH00526: Syntax error on line 57 of /etc/apache2/sites-enabled/webhooks.conf:
SSLCertificateFile: file '/etc/apache2/ssl/webhooks/fullchain.pem' does not exist or is empty

The apache plugin is not working; there may be problems with your existing configuration.
The error was: MisconfigurationError("Error while running apache2ctl configtest.\nAction 'configtest' failed.\nThe Apache error log may have more information.\n\nAH00526: Syntax error on line 57 of /etc/apache2/sites-enabled/webhooks.conf:\nSSLCertificateFile: file '/etc/apache2/ssl/webhooks/fullchain.pem' does not exist or is empty\n",)
root@mjdm-style:/home/gladmin#
Пробовал сделать получить ключи отдельно, не ставя на ubuntu certbot и положить сюда /etc/apache2/ssl/webhooks, так же не работает.

Т.к. я не планировал (и не намерен в будущем) выставлять MajorDoMo в Интернет, то для задачи публикации вебхуков решено было поднять отдельный виртуальный сервер Apache, который будет в режиме реверс-прокси перенаправлять запросы от Яндекс на доступный только из локальной сети виртуальный сервер с MajorDoMo. Соответственно SSL-сертификат ставится именно на него. На этом моменте остановлюсь подробнее (см. ниже).
SPOILERSPOILER_SHOW
Вариант публикации вебхуков через реверс-прокси на базе веб-сервера Apache.
Первым делом активируем модули Apache - ssl, proxy и proxy_http.

sudo a2enmod ssl proxy proxy_http

Рестартуем Apache

sudo systemctl restart apache2

и проверяем, что модули загрузились

sudo apachectl -M | grep 'ssl\|proxy'

В ответе должно быть три строки.

proxy_module (shared)
proxy_http_module (shared)
ssl_module (shared)
Создаем конфигурационный файл нового виртуального сервера. Я назвал его webhooks.

sudo nano /etc/apache2/sites-available/webhooks.conf

Содержимое файла (с комментариями).

<IfModule mod_ssl.c>
<VirtualHost *:443>

# e-mail
ServerAdmin [email protected]

# Доменное имя
ServerName majordomo.keenetic.pro

# Рабочая директория
DocumentRoot /var/www/webhooks

# Разграничение доступа
<Directory *>
Options All -Indexes
Order deny,allow
deny from all
</Directory>

# Определяем, что и куда нужно перенаправить.

# URL авторизации (authorize.php)
<Location /modules/yandexhome/authorize.php>
ProxyPass http://127.0.0.1/modules/yandexhome/authorize.php
ProxyPassReverse http://127.0.0.1/modules/yandexhome/authorize.php
</Location>

# URL для получения и обновления токена (token.php)
<Location /modules/yandexhome/token.php>
ProxyPass http://127.0.0.1/modules/yandexhome/token.php
ProxyPassReverse http://127.0.0.1/modules/yandexhome/token.php
</Location>

# URL обработчика навыка (smarthome.php)
<Location /modules/yandexhome/smarthome.php>
ProxyPass http://127.0.0.1/modules/yandexhome/smarthome.php
ProxyPassReverse http://127.0.0.1/modules/yandexhome/smarthome.php
</Location>

# URL на директорию с картинками для формы авторизации
<Location /modules/yandexhome/img>
ProxyPass http://127.0.0.1/modules/yandexhome/img
ProxyPassReverse http://127.0.0.1/modules/yandexhome/img
</Location>

# URL на директорию со стилями для формы авторизации
<Location /modules/yandexhome/css>
ProxyPass http://127.0.0.1/modules/yandexhome/css
ProxyPassReverse http://127.0.0.1/modules/yandexhome/css
</Location>

# Включаем логи
ErrorLog ${APACHE_LOG_DIR}/error.webhooks.log
CustomLog ${APACHE_LOG_DIR}/access.webhooks.log combined

# Указываем пути к файлам SSL-сертификата
SSLCertificateFile /etc/apache2/ssl/webhooks/fullchain.pem
SSLCertificateKeyFile /etc/apache2/ssl/webhooks/privkey.pem
SSLCertificateChainFile /etc/apache2/ssl/webhooks/chain.pem

# АктивируемSSL
SSLEngine on

</VirtualHost>
</IfModule>
Здесь ключевые моменты это активация SSL и секции Location, в которых определются правила перенаправления входящего трафика.

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

sudo mkdir /var/www/webhooks

Активируем новый виртуальный сервер

sudo a2ensite webhooks.conf

и обновляем конфигурацию Apache для применения изменений.

sudo systemctl reload apache2


У Вас ругается на отсутсвие файла
Проверяйте написание файла
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan »

Сделал сертификаты, загрузил их в папку /etc/apache2/ssl/webhooks/
создал конфигурационный файл sudo nano /etc/apache2/sites-available/webhooks.conf, просто заменил DNS и почту
сделал
sudo mkdir /var/www/webhooks
sudo a2ensite webhooks.conf

До этого момента все норм, но после этого, запустив sudo systemctl reload apache2 - получил следующую ошибку, апач не хочет работать, я несколько раз пересоздал виртуалки и ошибка все повторяется.
SPOILERSPOILER_SHOW
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
Если набрать systemctl status apache2.service, то получаю следующее
SPOILERSPOILER_SHOW
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) (Result: exit-code) since Sat 2020-04-25 18:48:28 UTC; 13min ago
Process: 2070 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 2291 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=1/FAILURE)
Process: 2085 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 2110 (apache2)
Tasks: 11 (limit: 2290)
CGroup: /system.slice/apache2.service
├─2110 /usr/sbin/apache2 -k start
├─2125 /usr/sbin/apache2 -k start
├─2126 /usr/sbin/apache2 -k start
├─2127 /usr/sbin/apache2 -k start
├─2128 /usr/sbin/apache2 -k start
├─2129 /usr/sbin/apache2 -k start
├─2166 /usr/sbin/apache2 -k start
├─2250 /usr/sbin/apache2 -k start
├─2263 /usr/sbin/apache2 -k start
├─2264 /usr/sbin/apache2 -k start
└─2266 /usr/sbin/apache2 -k start

апр 25 18:49:58 mjdm-style apachectl[2192]: The Apache error log may have more information.
апр 25 18:49:58 mjdm-style systemd[1]: apache2.service: Control process exited, code=exited status=1
апр 25 18:49:58 mjdm-style systemd[1]: Reload failed for The Apache HTTP Server.
апр 25 19:01:40 mjdm-style systemd[1]: Reloading The Apache HTTP Server.
апр 25 19:01:40 mjdm-style apachectl[2291]: AH00526: Syntax error on line 57 of /etc/apache2/sites-enabled/webhooks.conf:
апр 25 19:01:40 mjdm-style apachectl[2291]: SSLCertificateFile: file '/etc/apache2/ssl/webhooks/fullchain.pem' does not exist or is empty
апр 25 19:01:40 mjdm-style apachectl[2291]: Action 'graceful' failed.
апр 25 19:01:40 mjdm-style apachectl[2291]: The Apache error log may have more information.
апр 25 19:01:40 mjdm-style systemd[1]: apache2.service: Control process exited, code=exited status=1
апр 25 19:01:40 mjdm-style systemd[1]: Reload failed for The Apache HTTP Server.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
VOVA_iS
Сообщения: 205
Зарегистрирован: Пн фев 04, 2019 10:23 pm

Re: [Модуль] Yandex Home (yandexhome)

Сообщение VOVA_iS »

Вывод команды

Код: Выделить всё

ls -l /etc/apache2/ssl/webhooks
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan »

При команде ls -l /etc/apache2/ssl/webhooks

Получил следующее
SPOILERSPOILER_SHOW
total 0
lrwxrwxrwx 1 root root 43 апр 25 18:48 chain.pem -> ../../archive/XXXXXXXX.myddn s.me/chain1.pem
lrwxrwxrwx 1 root root 47 апр 25 18:48 fullchain.pem -> ../../archive/XXXXXXXX.m yddns.me/fullchain1.pem
lrwxrwxrwx 1 root root 45 апр 25 18:48 privkey.pem -> ../../archive/XXXXXXXX.myd dns.me/privkey1.pem
Если я отключу ssl командой a2dismod ssl то апач стартует, если я включу a2enmod ssl, то апач не хочет стартовать. Откуда тут chain1.pem, если я загрузил chain.pem?

Здесь видно, что нет никаких 1
SPOILERSPOILER_SHOW
ключи.jpg
ключи.jpg (26.91 КБ) 5527 просмотров
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan »

Наконец-то сдвинулось. Теперь DNS прошел проверку на SSL, в Яндекс диалогах я создал и опубликовал. Но появилась другая проблема, это Forbidden You don't have permission to access this resource и о ней ниже.

Какие были ошибки и почему не работало?

1) Неверно сделал запрос сертификата с помощью certbot, изначально я выбирал sudo certbot --apache, который автоматически настраивал конфиг апача и делал редирект с http на https. Нужно было выбрать sudo certbot certonly --apache, это просто получить сертификат без внесении настроек в конфиг апача.

2) Как получил сертификат через sudo certbot certonly --apache, то получил сообщение, где хранятся ключи
SPOILERSPOILER_SHOW
13.jpg
13.jpg (61.36 КБ) 5504 просмотра
3) Вместо этих путей
SPOILERSPOILER_SHOW
# Указываем пути к файлам SSL-сертификата
SSLCertificateFile /etc/apache2/ssl/webhooks/fullchain.pem
SSLCertificateKeyFile /etc/apache2/ssl/webhooks/privkey.pem
SSLCertificateChainFile /etc/apache2/ssl/webhooks/chain.pem
я указал
SPOILERSPOILER_SHOW
# Указываем пути к файлам SSL-сертификата
SSLCertificateFile /etc/letsencrypt/live/xxxxxxxx/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxxxxxxx/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/xxxxxxxx/chain.pem

но теперь другая проблема и я не могу объединить аккаунты, пишет, что "Не удается получить доступ к сайту", куда копать то?

Forbidden
You don't have permission to access this resource.
SPOILERSPOILER_SHOW
12.JPG
12.JPG (23.59 КБ) 5504 просмотра

Права на папку назначил такие
SPOILERSPOILER_SHOW
права.jpg
права.jpg (26.21 КБ) 5504 просмотра
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan »

Урра ), заработало. Как я понимаю, что сообщение Forbidden. You don't have permission to access this resource, так и должно быть, никакие права не нужно назначать папке webhooks. Оставлю свою хронологию действии, это может помочь в будущем кому-то.

С сертификатом разобрался, про них я спрашивал и написал выше.

Для тех, у кого стоит Ubuntu 18.04.4 LTS и будете ставить Certbot, то тут есть но, см. ниже

Add Certbot PPA
SPOILERSPOILER_SHOW
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe - если запустить эту команду, то получим ошибку add-apt-repository universe error: universe invalid, в таком случае запускаем эту команду sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

В Яндекс Диалог сделал следующие настройки.

В строке Endpoint URL порт указал
SPOILERSPOILER_SHOW
Endpoint URL.jpg
Endpoint URL.jpg (14.35 КБ) 5487 просмотров
В настройке "Авторизация" порты не указал
SPOILERSPOILER_SHOW
Связка аккаунтов.jpg
Связка аккаунтов.jpg (15.42 КБ) 5487 просмотров
Связка аккаунтов - настройка.jpg
Связка аккаунтов - настройка.jpg (69.77 КБ) 5487 просмотров
Перешел в раздел "Тестирование"
Появилось окно авторизации, а при попытки объединить аккаунт появилось сообщение об ошибке
SPOILERSPOILER_SHOW
Паспорт ошибка.jpg
Паспорт ошибка.jpg (26.09 КБ) 5487 просмотров
в логах MD была такая запись

Код: Выделить всё

smarthome.php >>> HTTP/1.1 401 Unauthorized
Content-Type: application/json
WWW-Authenticate: Bearer realm="Service"

Добавил в исключение в файл config.php, который лежит по пути /var/www/config.php

Код: Выделить всё

if (!(preg_match('/\/authorize\.php/is', $_SERVER['REQUEST_URI']) ||
      preg_match('/\/token\.php/is', $_SERVER['REQUEST_URI']) ||
      preg_match('/\/smarthome\.php/is', $_SERVER['REQUEST_URI'])))
{
   Define('HOME_NETWORK', '192.168.0.*'); - здесь указал свою сеть
   Define('EXT_ACCESS_USERNAME', 'user');
   Define('EXT_ACCESS_PASSWORD', 'password');
}
После всех манипуляции по прежнему не получалось объединить аккаунт. Пересоздал связку аккаунта и после этого все заработало - диалог опубликован.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород

Re: [Модуль] Yandex Home (yandexhome)

Сообщение SmoKE_xDDD »

Помогайте =)
Искал в теме, но у меня нет проблем с доступом, SSL от кинетика, страницы открыты через htaccess

Код: Выделить всё

Произошла ошибка
Произошла ошибка в процессе получения данных от сервиса

7820-5ea7394f7a0f4902981d438c884531b0-1588149122
ЛогSPOILER_SHOW

Код: Выделить всё

11:32:02 0.25375700 POST /modules/yandexhome/authorize.php?state=https%3A%2F%2Fsocial.yandex.ru%2Fbroker2%2Fauthz_in_web%2Fdc9e1fe1e67c4074ab1b2e9007b1032d%2Fcallback&redirect_uri=https%3A%2F%2Fsocial.yandex.net%2Fbroker%2Fredirect&response_type=code&client_id=ca262042db3d-41d0be43 192.168.1.1 <<< {"authorized":"yes"}
11:32:02 0.37312800 authorize.php >>> HTTP/1.1 302 Found
Content-Type: application/json
Location: https://social.yandex.net/broker/redirect?code=81d32c55231d78d4f28e780425ec02bc7f6e6a40&state=https%3A%2F%2Fsocial.yandex.ru%2Fbroker2%2Fauthz_in_web%2Fdc9e1fe1e67c4074ab1b2e9007b1032d%2Fcallback

11:32:01 0.04635500 POST /modules/yandexhome/authorize.php?state=https%3A%2F%2Fsocial.yandex.ru%2Fbroker2%2Fauthz_in_web%2Fdc9e1fe1e67c4074ab1b2e9007b1032d%2Fcallback&redirect_uri=https%3A%2F%2Fsocial.yandex.net%2Fbroker%2Fredirect&response_type=code&client_id=ca262042db3d-41d0be43 192.168.1.1 <<< {"login":"тут логин","password":"тут пароль"}
11:31:59 0.79771200 GET /modules/yandexhome/authorize.php?state=https%3A%2F%2Fsocial.yandex.ru%2Fbroker2%2Fauthz_in_web%2Fdc9e1fe1e67c4074ab1b2e9007b1032d%2Fcallback&redirect_uri=https%3A%2F%2Fsocial.yandex.net%2Fbroker%2Fredirect&response_type=code&client_id=ca262042db3d-41d0be43 192.168.1.1 <<< []
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Divan »

1) Добавьте в исключение

Код: Выделить всё

if (!(preg_match('/\/authorize\.php/is', $_SERVER['REQUEST_URI']) ||
      preg_match('/\/token\.php/is', $_SERVER['REQUEST_URI']) ||
      preg_match('/\/smarthome\.php/is', $_SERVER['REQUEST_URI'])))
{
   Define('HOME_NETWORK', '192.168.0.*'); - здесь указал свою сеть
   Define('EXT_ACCESS_USERNAME', 'user');
   Define('EXT_ACCESS_PASSWORD', 'password');
}
2) Пересоздайте связку аккаунта
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Gigabyte
Сообщения: 2
Зарегистрирован: Пт фев 28, 2020 5:42 am

Re: [Модуль] Yandex Home (yandexhome)

Сообщение Gigabyte »

Всем привет! Не верю в демонов, но объяснения случившемуся найти не могу. Сидели с супругой ночью, вспоминали родственников, которых больше нет... И тут включается пылесос и чайник. Позже при детальном рассмотрении выяснилось, что в это время были какие то шевеления со стороны умного дома Яндекса. В мониторинге от Яндекса в этот момент имеются какие то ошибки:
SPOILERSPOILER_SHOW
Изображение
Но самое интересное в логах модуля мажордомо:
SPOILERSPOILER_SHOW
Изображение
В том месте, где виднеется строка "NUL" как раз всё и произошло.
Что это могло быть? Посторонних лиц ни на сервере ни в аккаунте Яндекса не было.

P.S., вероятно таинственные NUL из-за того, что я в кипише обесточил сервер и лог не до сохранился? Но сути дела не меняет, что это было?
C_3AXAPOB
Сообщения: 510
Зарегистрирован: Ср июн 08, 2016 4:17 pm

Re: [Модуль] Yandex Home (yandexhome)

Сообщение C_3AXAPOB »

Барабашка. Читал про это в журнале Огонёк за февраль 1992 года.

А если серьезно, Алисе иногда что-то слышится, разговор, работа телевизора она это по своему интерпретирует.
Orange pi pc plus, megaD-2561, Xiaomi
--------------------------------------------------
http://connect.smartliving.ru/profile/908
Ответить