Данный проект включает в себя как библиотеку для кодирования и декодирования EGTS-пакетов, так и непосредственно сам сервер, а также генератор пакетов.
- Библиотека;
- Сервер;
- Установка;
- Запуск;
- Запуск в Docker;
- Формат конфигурационного файла;
- Развертывание контейнера на тестовом Debian-сервере.
Библиотека основана на:
Больше информации о протоколе можно найти на данном ресурсе.
Пример кодирования пакета:
package main
import (
"github.com/kuznetsovin/egts-protocol/libs/egts"
"log"
)
func main() {
pkg := egts.Package{
ProtocolVersion: 1,
SecurityKeyID: 0,
Prefix: "00",
Route: "0",
EncryptionAlg: "00",
Compression: "0",
Priority: "11",
HeaderLength: 11,
HeaderEncoding: 0,
FrameDataLength: 3,
PacketIdentifier: 137,
PacketType: egts.PtResponsePacket,
HeaderCheckSum: 74,
ServicesFrameData: &egts.PtResponse{
ResponsePacketID: 14357,
ProcessingResult: 0,
},
}
rawPkg, err := pkg.Encode()
if err != nil {
log.Fatal(err)
}
log.Println("Bytes packet: ", rawPkg)
}
Пример декодирования пакета:
package main
import (
"github.com/kuznetsovin/egts-protocol/libs/egts"
"log"
)
func main() {
pkg := []byte{0x01, 0x00, 0x03, 0x0B, 0x00, 0x03, 0x00, 0x89, 0x00, 0x00, 0x4A, 0x15, 0x38, 0x00, 0x33, 0xE8}
result := egts.Package{}
state, err := result.Decode(pkg)
if err != nil {
log.Fatal(err)
}
log.Println("State: ", state)
log.Println("Package: ", result)
}
Сервер обрабатывает и по возможности сохраняет всю телематическую информацию из подзаписей типа EGTS_SR_POS_DATA
. Если пакет содержит несколько таких подзаписей, то сервер обрабатывает каждую из них.
git clone https://github.com/Daniil11ru/EGTS
cd egts-protocol
make
./bin/receiver -c config.yaml
config.yaml
– конфигурационный файл.
Соберите образ:
make docker
Запустите контейнер:
-
Без указания конфигурационного файла и порта:
docker run --name egts-receiver egts:latest
-
С указанием конфигурационного файла и порта:
docker run --name egts-receiver -v ./configs:/etc/egts-receiver -p 6000:6000 egts:latest
Пример docker-compose.yml
:
version: '3'
services:
postgresql:
image: postgresql:latest
container_name: egts_postgresql
egts:
image: egts:latest
container_name: egts_receiver
ports:
- "6000:6000"
volumes:
- ./configs:/etc/egts-receiver/
host: "127.0.0.1"
port: "6000"
conn_ttl: 10
log_level: "DEBUG"
storage:
...
Описание параметров:
- host – адрес;
- port – порт;
- conn_ttl – если сервер не получает информацию дольше указанного количества секунд, то соединение закрывается;
- log_level – уровень журналирования;
- storage – секция для указания информации о хранилище.
-
Установить Docker и Docker Compose на тестовом сервере;
-
Завести на тестовом сервере учетную запись deploy и наделить правами пользования Docker и Docker Compose:
adduser --disabled-password --gecos "" deploy usermod -aG docker deploy
-
Добавить ключи:
- Локально сгенерировать пару ключей:
ssh-keygen -t ed25519 -C "deploy@ci" -f deploy_ci_key
- Добавить публичный ключ как ключ развертывания на GitHub (Settings -> Deploy keys);
- Добавить приватный ключ как
ACTIONS_SSH_KEY
в "секреты" репозитория; - Скопировать публичный ключ на тестовый сервер:
su - deploy mkdir -p ~/.ssh && chmod 700 ~/.ssh echo "ssh-ed25519 AAAAC3NzaC1... mail@domen" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
- Добавить IP тестового сервера как
TEST_HOST
в "секреты" репозитория; - Добавить GitHub Personal Access Token как
GHCR_TOKEN
с правами на чтение, запись и удаление пакетов, а также на чтение кода в "секреты" репозитория.
- Локально сгенерировать пару ключей: