RRGP Chat

RGP Chat — установка на свой сервер

Чат — PHP-приложение с базой MariaDB/MySQL. Ставится на обычный сервер за 15–20 минут. Все данные и секреты остаются у вас.

Что нужно

apt update
apt install -y nginx php-fpm php-mysql php-mbstring php-curl php-gd php-xml mariadb-server certbot python3-certbot-nginx rsync

Шаг 1. Код

Распакуйте пакет rgp-chat-*.tar.gz в каталог чата:

mkdir -p /var/www/chat-mysite/chat
tar -xzf rgp-chat-1.0.tar.gz -C /var/www/chat-mysite/chat
mkdir -p /var/www/chat-mysite/chat/uploads /var/www/chat-mysite/chat/cache

Шаг 2. База данных

DBPASS=$(openssl rand -hex 16); echo "Пароль БД: $DBPASS"
mysql -e "CREATE DATABASE chat_mysite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
          CREATE USER 'chat_mysite'@'localhost' IDENTIFIED BY '$DBPASS';
          GRANT ALL ON chat_mysite.* TO 'chat_mysite'@'localhost'; FLUSH PRIVILEGES;"

Шаг 3. Настройки и секреты

Скопируйте config.example.php в /var/www/chat-mysite/chat/config.php и поправьте значения:

Константа Что вписать
CHAT_TITLE_OVERRIDE Название чата
CHAT_ACCENT Цвет кнопок, #rrggbb
CUSTOM_LOGIN_URL Адрес входа на вашем сайте (кнопка «Войти на сайте» для гостя)
CUSTOM_ROOMS Список комнат: ключ, название, описание (по желанию)
SITE_BASE_URL https://chat.вашсайт.ru
DB_NAME, DB_USER Как создали на шаге 2
OWNER_AGENT_ID Ваш sub (id в вашем сайте): станете владельцем чата

Отдельным файлом secrets.php (права 600, не коммитить) задайте секреты:

<?php
define('DB_PASS', 'ПАРОЛЬ_БД_ИЗ_ШАГА_2');
define('APP_TICKET_SECRET', 'ДЛИННАЯ_СЛУЧАЙНАЯ_СТРОКА');   // openssl rand -hex 32; тот же секрет — на сервере вашего сайта
chmod 600 /var/www/chat-mysite/chat/secrets.php
chown -R www-data:www-data /var/www/chat-mysite
cd /var/www/chat-mysite/chat && sudo -u www-data php install.php      # создаёт таблицы

Шаг 4. nginx

/etc/nginx/sites-available/chat.mysite.ru:

server {
    server_name chat.mysite.ru;
    root /var/www/chat-mysite/chat;
    index index.php index.html;
    client_max_body_size 40m;

    location ~ /(secrets|config)\.php$ { deny all; }
    location ~ ^/(lib|cache|tools|cron)/ { deny all; }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_read_timeout 120s;
    }
    location ~ /uploads/ { add_header Cache-Control "public, max-age=604800"; }
    location ~ /\. { deny all; }

    listen 80;
    listen [::]:80;
}
ln -s /etc/nginx/sites-available/chat.mysite.ru /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d chat.mysite.ru --redirect          # выпускает сертификат; DNS уже должен указывать на сервер

Обязательно проверьте, что закрыты секретные файлы (должно быть 403):

curl -s -o /dev/null -w "%{http_code}\n" https://chat.mysite.ru/secrets.php
curl -s -o /dev/null -w "%{http_code}\n" https://chat.mysite.ru/config.php
curl -s -o /dev/null -w "%{http_code}\n" https://chat.mysite.ru/tools/chatctl.php

Шаг 5. Вебхуки (если нужны)

echo '* * * * * www-data php /var/www/chat-mysite/chat/cron/webhooks.php >/dev/null 2>&1' > /etc/cron.d/chat-mysite-webhooks

Шаг 6. Проверка

  1. Откройте https://chat.mysite.ru/: страница загрузилась, виден блок «Как войти».
  2. Сделайте билет по DEVELOPER-GUIDE.md, раздел 3, и откройте ссылку входа: вы в чате, комнаты доступны.
  3. Создайте ключ API: sudo -u www-data php tools/chatctl.php create-key "Проверка" и вызовите curl … /v1.php?r=ping.

Обновление

Распакуйте новый пакет поверх каталога, не затирая config.php, secrets.php, uploads/:

tar -xzf rgp-chat-NEW.tar.gz -C /var/www/chat-mysite/chat --exclude=config.php --exclude=secrets.php --exclude=uploads
cd /var/www/chat-mysite/chat && sudo -u www-data php install.php      # добавит недостающие таблицы

Резервные копии

Копируйте раз в сутки базу и загрузки:

mysqldump chat_mysite | gzip > /backup/chat_mysite-$(date +%F).sql.gz
tar -czf /backup/chat_mysite-uploads-$(date +%F).tgz -C /var/www/chat-mysite/chat uploads

Что в самостоятельной установке не работает

Видеоэфиры и звонки в чатах платформы требуют отдельного медиасервера: в этот пакет он не входит. Уведомления на телефон (Web Push) заработают, если сгенерировать ключи VAPID и вписать VAPID_PUBLIC_KEY в конфиг и VAPID_PRIVATE_PEM в secrets.php.