Содержание

Установка

Рекомендую использовать роль для ansible-galaxy, а если использование ansible для установки не подходит то следуйте инструкциями в этой статье.

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

Для debian 9

apt-get update
apt-get install cmake make cpp gcc libssl-dev g++ nginx pkg-config libmariadbclient-dev-compat mysql-client flex mailutils uuid-dev git

Если не получится поставить пакет libmariadbclient-dev-compat то попробуйте с пакетом libmariadbclient-dev

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

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

Если возникли ошибки смотрите список вероятных проблем в низу страницы.

Настройки

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

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

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

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

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

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

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

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

Запуск

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

./cppcomet

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

systemctl start comet.service

Подключение к комет серверу

Порт и ip для подключений от вебсокетов задаются в секции ws параметрами

ip = 0.0.0.0
port = 8087

, После запуска комет сервера если открыть адрес ( ВашДомен.com:8087 ), на котором должен быть комет сервер то должна открыться страница комет сервера. Если страница с приветсвием комет сервера открылась успешно то можно попробовать подключиться из javascript api. Для этого при подключении надо задать параметр node и если у вас port установлен не как 80, то надо указать ещё и порт для подключения.

CometServer().start({user_id:1, user_key:"userHash", node:"ВашДомен.com:8087"}),

После этого комет сервер можно использовать, но только по протоколу http, для работы по протоколу https надо настроить ревирс прокси для предварительной расшифровки трафика.

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

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

Если есть желание то в качестве реверс прокси для websockets можно настроить не nginx а apache2 или что-то ещё. Если не получается настроить nginx, то можно попробовать найти в гугле другие примеры по запросу «как настроить реверс прокси для websockets»

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

default
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;
	}
}

Возможные проблемы после при сборке

Ошибка

GCC version must be at least 4.9!

означает, что вам надо установить gcc как минимум 4.9

Инструкция для ubuntu по установки gcc 4.9

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

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

Обратите внимание на то, какие значения параметра 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> 

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

yum install libuuid libuuid-devel