[BS] Real Time Chat

[BS] Real Time Chat 1.4.0

Нет прав для скачивания
Кстати вопрос

А этот чат как ведёт архивы сообщений ?
Как долго хранится архив сообщений ? Как настраивается (где) автоудаление, если оно есть ?
Есть ли возможность дублировать сообщения в какуюто тему форума ?

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

Опишу процесс установки чата на форум, на примере установки для
сайта "your-site.com", расположенного у пользователя "username",
с корнем сайта в директории "/home/username/domains/your-site.com/public_html",
при этом internal_data вынесен из корня сайта в директорию "/home/username/internal_data/" (если не вынесен, вы можете просто исправить пути)

Пишу тут везде пути полностью специально, так правильнее, да и удобнее для облегчения восприятия, повторения и правки под условия вашего сервера.

Сайт работает в системе с systemd (Centos) под nxinx и php-fpm, но в дебианах-убунтах все должно быть аналогично.

Приступим!

NGINX (внести в основной конфиг, в конец раздела "http {" но до сайтовых конфигов что начинаются с "server {" ):
Код:
    ##
    # Connection header for WebSocket reverse proxy
    ##
    map $http_upgrade $connection_upgrade {
       default upgrade;
       ''      close;
    }

NGINX (внести virtual host/site конфиг, что начинается с "server {" перед 1й location ):
Код:
        # BS_Real_Time_Chat
        location /socket.io/ {
            proxy_pass http://127.0.0.1:{your_chat_port};
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }

где {your_chat_port} замените на например 2095 (или другой порт)
и этот же порт пропишите в поле "Порт:" на странице настроек чата
Там же укажите тот URI "/socket.io" , что был использован в location ,
в пункте "Тип клиент-серверной связи:" в подпункте "(WebSocket) Proxied address"


Настройка чата как systemd сервис:

Для этого в шеле создайте конфиг для старта процесса серверной части чата:
Код:
cat > /home/username/chat_systemd << 'EOF'
#!/usr/bin/env php
<?php
$phpVersion = phpversion();
if (version_compare($phpVersion, '7.0.0', '<'))
{
    die("PHP 7.0.0 or newer is required. $phpVersion does not meet this requirement. Please ask your host to upgrade PHP.");
}

$dir = __DIR__;
//require ($dir . '/src/XF.php');
require ($dir . '/domains/your-site.com/public_html/src/XF.php');

XF::start($dir);
XF::setupApp('XF\App');

\Workerman\Worker::$pidFile = '/home/username/internal_data/bs_chat.pid';

$runner = new \BS\RealTimeChat\Cli\WorkermanRunner();
$runner->run();
EOF

Если делаете от рута, не забудьте выставить владельцем вашего пользователя, от которого работает чат

chown username.username /home/username/chat_systemd

И также (от рута) создайте конфиг юнита
Код:
cat > /usr/lib/systemd/system/be_chat.service << 'EOF'
[Unit]
Description=Real Time Chat server
#Requires=mariadb.service
Requires=mysqld.service

[Service]
User=username
Group=username
Type=forking
PIDFile=/home/username/internal_data/bs_chat.pid
WorkingDirectory=/home/username/domains/your-site.com/public_html
ExecStart=/usr/bin/php /home/username/chat_systemd start -d
ExecStop=/usr/bin/php /home/username/chat_systemd stop
ExecReload=/usr/bin/php /home/username/chat_systemd restart -d
TimeoutSec=300
Restart=always

[Install]
WantedBy=multi-user.target
EOF

После чего выполните команды

systemctl daemon-reload
systemctl enable be_chat.service

Стартануть серверную часть чата и посмотреть его статус можно так :

systemctl start be_chat.service
systemctl status be_chat.service

После этого нелишне рестартовать и nginx (в котором ранее были внесены правки)
systemctl restart nginx.service
 
Последнее редактирование модератором:
NGINX (внести в основной конфиг, в конец раздела "http {" но до сайтовых конфигов что начинаются с "server {" ):
Годно, но есть нюансы. Мапы (да и другие глобальные настройки) лучше хранить в /etc/nginx/conf.d/ - чтобы не было печально после yum(dnf) update nginx. Рестарт унита лучше ставить Restart=on-success - т.е. когда демон вылетает с ошибкой, а не штатно завершает свою работу. И логи лучше писать с SyslogIdentifier либо вообще StandardError. Абсолютных путей лучше избегать.
PS: выше есть вариант проще, по сути тоже самое.
 
Smalesh,
Относительные пути в скриптах, да еще запускающихся от рута, но использующие файлы юзера могут привести к очень неожиданным результатам.
Да, здесь я навскидку не вижу дыр с потенциально опасными путями, одако весь мой прикладной админский опыт говорит - абсоютные пути в таких делах недежнее, а потом уже легче для повторения-понимания неопытным юзером.
Все это сказано про шелл, для php я не имею ничего против оносительных путей.

Разве что расположение chat_systemd в корне сайта. Это неверно. Надо его класть в том же корне юзера (нампример), главное вне дерева сайта. А при таком варианте относительная адресация директорий сразу нарушается. Впрочем вы можете откорректировать и относительные пути, моя же задача была сделать простой и понятный пример.

По нжинксу - у всех свои правила конфигов. Но тут мы говорим про простые способы, а как их реализовывать - через инклюды, или директории с инклюд файлами - вопрос сторонний.

Про юнит, рестарты, куда писать логи - вкусовщина. А вот место куда в исходном примере клался юнит - неверное. Кроме того из-за отстуствия секции Install и места расположения, с ним не работали команды включить-выключить автостарт, вроде systemctl enable be_chat
 
для php я не имею ничего против оносительных путей
С абсолютными путями как раз про php и речь. В web-дире проблем особых нет, просто проверять php_sapi сугубо ради безопасности - это вопрос в кодеру
PHP:
if (PHP_SAPI != 'cli')
        {
            die('This script can only be run via the command line interface.');
        }
Вопрос к инклудам в nginx - это вопрос хорошего тона применительно к дистрибутиву (аналогичное соблюдается и в дебианах). Что же до расположения файла юнита - то ответ в man systemd.unit
1643722353351.png
За Install да, недосмотрел, но меня спрашивали только расположение.
 
Разве что расположение chat_systemd в корне сайта. Это неверно. Надо его класть в том же корне юзера (нампример), главное вне дерева сайта.
Разве? Этот файлик ведь, грубо говоря, хотфикс для chat_cli, который поставляется вместе с аддоном. В моем понимании такое должно таскаться вместе с сайтом, а не в каких-то отдельных папках
 
такое должно таскаться вместе с сайтом
Да, вместе с сайтом, но вне дерева доступных извне файлов сайта.
Вообще выкладывать чтото, что не должно взаимодействовать с внешним миром напрямую в доступные извне директории - не уместно.
Почему ?
Например потому, что файл без расширения скорее всего отдасться веб сервером наружу без парсинга, а зачем комуто покаывать какой либо исходный код ? А вдруг он както криво обработается интерпретатором веб сервера ? Вдруг туда можно будет чтото передать в переменных? В общем чревато.
 
В общем чревато.
Черевато чем? WorkermanRunner.php закрыт проверкой SAPI, ну увидит кто кусочек кода - и что дальше? Некрасиво, но не смертельно (по-хорошему chat_cli просто переимновать в chat_cli.php).
 
На виджеты добавил изображение в заголовке, но оно применилось и к чату где мне это так то не особо нужно
1643803012338.png

Можно его именно для чата как то отключить?
 
Можно отключить счётчик сообщений?
 
Я как и все плагины установил этот чат в консоле сервера я нечего не делал, обязательно нужно?
Т.К чат работает и всё нормально, или есть какие либо последствия?
 
Я как и все плагины установил этот чат в консоле сервера я нечего не делал, обязательно нужно?
Т.К чат работает и всё нормально, или есть какие либо последствия?
Разный принцип работы. Через обычные запросы или через вебсокеты
 
Matew, Понял, принцепи не обязательно тогда всё это делать.
Верно?
 
установил плагин.. работает в режиме (Ajax) Long polling.. дал права группам.. чат норм работает, но сайт начинает тормозить... отключаю чат - снова форум летает.. что может быть? Сайт расположен на довольно мощном ВПС
 
А можно же ставить этот чат через SSH на виртуальный хост?
 
Tokyo просто мне консоль пишет, что нет такой папки. я же ввожу php chat start -d

1652100165260.png

а тут хост и порт вводить чего?
 
Прочитайте внимательно инструкцию, пожалуйста
 
Matew А что мне делать с ошибкой в консоли? Там нет решения. Всё делаю по инструкции.
 
Современный облачный хостинг провайдер | Aéza

Похожие темы

Назад
Сверху Снизу