Содержание
Установка
Рекомендую использовать роль для 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 можно не менять.
Добавление в автозагрузку
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 надо настроить реверс прокси.
Ниже приведён пример конфигурации 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
Возможные проблемы после установки
Не правильные опции при подключении
Обратите внимание на то, какие значения параметра 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
Обсуждение
При попытке запустить на CentOS в качестве демона выдаёт:
Job for comet.service failed because the control process exited with error code. See «systemctl status comet.service» and «journalctl -xe» for details.
В теме этой я с самого нуля почти, поэтому на самом старте тестового изучения «забуксовал»
Добрый день. Вам для начала надо бы проверить запускается ли комет сервер сам по собе а не как демон. После сборки у вас будет бинарный файл cpp_comet вы можете попробовать его запустить и посмотреть вывод. Вероятно там будут какие то ошибки.
при команде «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):
Call Stack (most recent call first):
– Configuring incomplete, errors occurred! See also «/etc/comet-server/CMakeFiles/CMakeOutput.log». See also «/etc/comet-server/CMakeFiles/CMakeError.log».
подскажите куда копать?
Здравствуйте!
Заинтересовался Вашим коммет сервером, пытаюсь установить на 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. Можете, пожалуйста, подсказать как исправить эту ошибку?
Ошибка похожа на проблемы в настройке пакетного менеджера а не комет сервера.
Добрый день при сборке 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'
Добрый день. Вероятно у вас не стоит что то из зависимостей связанных с mysql, какая у вас операционная система. Судя по ошибке линковщик не нашёл библиотеку mysql клиента