Установка

Рекомендую использовать роль для 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 для хранения данных пользователей для авторизации на сервере. И хранения времени, когда пользователь был в сети. И для хранения временных данных, таких как не доставленные сообщения и другие данные.

  • Создайте базу в 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

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

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

Обсуждение

Андрей Пастушенко, Костромская 18, 95, 2018/01/28 22:39

При попытке запустить на CentOS в качестве демона выдаёт:

Job for comet.service failed because the control process exited with error code. See «systemctl status comet.service» and «journalctl -xe» for details.

В теме этой я с самого нуля почти, поэтому на самом старте тестового изучения «забуксовал»

Trapenok Victor, 2018/01/29 03:54

Добрый день. Вам для начала надо бы проверить запускается ли комет сервер сам по собе а не как демон. После сборки у вас будет бинарный файл cpp_comet вы можете попробовать его запустить и посмотреть вывод. Вероятно там будут какие то ошибки.

Игорь, на виртуалке, 2018/04/19 11:39

при команде «cmake .» выдает: – The CXX compiler identification is unknown CMake Error: your CXX compiler: «CMAKE_CXX_COMPILER-NOTFOUND» was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name. – System: Linux 3.10.0-693.21.1.el7.x86_64 – Processor: x86_64 CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:108 (message):

Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES
OPENSSL_INCLUDE_DIR)

Call Stack (most recent call first):

/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:315 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake/Modules/FindOpenSSL.cmake:313 (find_package_handle_standard_args)
CMakeLists.txt:93 (find_package)

– Configuring incomplete, errors occurred! See also «/etc/comet-server/CMakeFiles/CMakeOutput.log». See also «/etc/comet-server/CMakeFiles/CMakeError.log».

подскажите куда копать?

Владимир, 2018/09/16 11:20

Здравствуйте!

Заинтересовался Вашим коммет сервером, пытаюсь установить на Debian 8 X64, но возникла ошибка. Сначала ругался на отсутствие пакета libmariadbclient-dev, я его поставил вручную, после этого установка завелась, но в конце установки вылезла эта ошибка:

Errors were encountered while processing: /var/cache/apt/archives/libmariadb-dev_1%3a10.3.9+maria~jessie_amd64.deb E: Sub-process /usr/bin/dpkg returned an error code (1)

На сервере до установки коммет сервера была установлена vesta cp. Можете, пожалуйста, подсказать как исправить эту ошибку?

Trapenok Victor, 2018/09/17 03:45

Ошибка похожа на проблемы в настройке пакетного менеджера а не комет сервера.

Роман, 2019/01/21 13:43

Добрый день при сборке CMakeFiles/cppcomet.dir/src/dbLink.cpp.o: In function `stmBase::init(dbLink*, char const*)': /root/comet/comet-server/src/dbLink.cpp:58: undefined reference to `mysql_stmt_close' /root/comet/comet-server/src/dbLink.cpp:61: undefined reference to `mysql_stmt_init' /root/comet/comet-server/src/dbLink.cpp:68: undefined reference to `mysql_stmt_prepare'

Trapenok Victor, 2019/01/21 16:50

Добрый день. Вероятно у вас не стоит что то из зависимостей связанных с mysql, какая у вас операционная система. Судя по ошибке линковщик не нашёл библиотеку mysql клиента

Ваш комментарий. Вики-синтаксис разрешён:
G F S O Y