Установка

Рекомендуемые ОС ubuntu, debian, centos


apt-get update
apt-get install cmake make cpp gcc libssl-dev g++ nginx libmysqlclient-dev mysql-server mysql-client flex mailutils uuid-dev git

Собираем из исходных кодов


git clone https://github.com/Levhav/comet-server
cd comet-server
cmake .
make

Настройки

CppComet использует базу данных mysql для хранения данных пользователей для авторизации на сервере. И хранения времени, когда пользователь был в сети. И для хранения временных данных, таких как не доставленные сообщения и другие данные.

  • Создайте базу в mysql на основе файла db.sql
  • В файле comet.ini укажите реквизиты для доступа к бд в секции [db]

[db]
host = localhost
user = root
password = root
name = comet_db
port = 3305

Укажите пароль для доступа к api комет сервера


[main] 
; пароль для доступа к api комет сервера
password = 0000000000000000000000000000000000000000000000000000000000000000

Остальные настройки из файла comet.ini можно не менять.


Весь перечень настроек в статье Настройка файла comet.ini


Запуск

Запуск в консольном режиме


./cpp_comet

Запуск в режиме демона


systemctl start comet.service

Добавление в автозагрузку

cp ./comet.service /etc/systemd/system
systemctl daemon-reload
systemctl enable comet.service

Настройка nginx в качестве реверс прокси

Для того чтоб настроить работу комет сервера на одной машине с другим сервером. Или просто иметь возможность работы не только по http но и по https надо настроить реверс прокси.

Ниже приведён пример конфигурации nginx для проксирования трафика до комет сервера с /comet-server на комет сервер запущенный на порту 82 и всего остального трафика на веб сервер запущенном на порту 8080


server {
    listen 0.0.0.0:80;   
    server_name comet-server.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_connect_timeout 120;
        proxy_send_timeout 120;
        proxy_read_timeout 180;
    }

    keepalive_disable none;
    lingering_close always;
    send_timeout 3600s;

    location /comet-server {
        proxy_pass http://127.0.0.1:82;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_redirect off;
        keepalive_timeout 900;
        proxy_read_timeout 900;
    } 
}

# HTTPS server


server {
    listen 0.0.0.0:443;  
    server_name comet-server.com;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/comet-server.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/comet-server.com/privkey.pem;

    ssl_session_timeout 70m;

    ssl_protocols SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;

    keepalive_disable none;
    lingering_close always;
    send_timeout 3600s;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_connect_timeout 120;
        proxy_send_timeout 120;
        proxy_read_timeout 180;

    }

    location /comet-server {
        proxy_pass http://127.0.0.1:82;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_redirect off; 
        keepalive_timeout 900;
        proxy_read_timeout 900;
    }
}

Возможные проблемы после установки

Не правильные опции при подключении

Обратите внимание на то какие значения параметра port указаны в секциях [ws] и [cometql] именно на этих портах комет сервер будет ожидать входящие подключения.

В шаблоне comet.ini поставляемом в репозитории параметр port для подключений из JavaScrip api выставлен в 8087 Это значит что подключатся надо так:

cometApi.start({user_id:1, user_key:"userHash", node:"example.ru:8087"})

Параметр port для подключений из CometQL выставлен в 3300 Это значит что подключатся надо так:

$link = mysqli_connect("example.ru", "root", "", "CometQL_v1", 3300);

Так же обратите внимание на то что надо указывать имя базы данных CometQL_v1, оно символизирует версию апи и вероятно потом выйдет версия CometQL_v2 и можно будет при подключении выбирать версию для работы.

Не читаемый файл comet.ini

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

Ошибка при сборке в CentOS


CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
MYSQL_INCLUDE_DIR (ADVANCED)

Не может найти заголовочные файлы mysql клиента. Можно попробовать установить пакет mysql-devel


yum install mysql-devel

Ошибка при сборке в CentOS


/etc/comet-server/comet-server/src/mystring.cpp:15:51: фатальная ошибка: uuid/uuid.h: Нет такого файла или каталога
 #include <uuid/uuid.h> 

Не может найти заголовочные файлы mysql клиента. Можно попробовать установить пакет mysql-devel


yum install libuuid libuuid-devel