RU::004-Администрирование::004-Установка
Header: Установка
====== Установка ======
Рекомендую использовать [[https://galaxy.ansible.com/CppComet/CppComet-ansible-role/|роль для 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 на основе файла [[https://github.com/Levhav/comet-server/blob/master/db.sql|db.sql]]
* В файле [[https://github.com/CppComet/comet-server/blob/master/comet.ini|comet.ini]] укажите реквизиты для доступа к бд в секции [db]
[db]
host = localhost
user = root
password = root
name = comet_db
port = 3305
Укажите пароль для доступа к api комет сервера
[main]
; пароль для доступа к api комет сервера
password = 0000000000000000000000000000000000000000000000000000000000000000
Остальные настройки из файла [[https://github.com/CppComet/comet-server/blob/master/comet.ini|comet.ini]] можно не менять.
Весь перечень настроек в статье [[comet:ini-file|Настройка файла 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
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
[[https://askubuntu.com/questions/428198/getting-installing-gcc-g-4-9-on-ubuntu/507068#507068|Инструкция для 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.h. Можно попробовать установить пакеты libuuid libuuid-devel
yum install libuuid libuuid-devel