Go to file
Andrey Kutin ca9912f8de Add systemd unit, example config, and deb packaging 2026-07-03 09:44:39 +03:00
deploy Add systemd unit, example config, and deb packaging 2026-07-03 09:44:39 +03:00
src Add project source files and build configuration 2026-07-03 09:40:24 +03:00
CMakeLists.txt Add systemd unit, example config, and deb packaging 2026-07-03 09:44:39 +03:00
LICENSE Initial commit 2026-07-03 06:30:47 +00:00
README.md Add project source files and build configuration 2026-07-03 09:40:24 +03:00
config.json Add project source files and build configuration 2026-07-03 09:40:24 +03:00
configure.sh Add project source files and build configuration 2026-07-03 09:40:24 +03:00

README.md

cards

Веб-сервер на C++20 с использованием Boost.Beast и PostgreSQL. Отдаёт случайные записи из базы данных по REST API.

Требования

  • Компилятор с поддержкой C++20 (GCC 10+, Clang 10+)
  • CMake >= 3.14
  • PostgreSQL (runtime) + libpq + libpqxx >= 7.0
  • Boost (system)
  • nlohmann_json 3.x

Установка зависимостей (Debian/Ubuntu):

sudo apt-get install libboost-all-dev libpq-dev libpqxx-dev nlohmann-json3-dev cmake build-essential

Сборка

./configure.sh

Или вручную:

mkdir -p build && cd build
cmake ..
make -j"$(nproc)"
cd ..

Бинарник: build/bin/cards

Конфигурация

По умолчанию читает config.json из рабочей директории. Можно указать путь к другому файлу:

./build/bin/cards /path/to/config.json

Поля config.json

server

Поле Тип Значение по умолчанию
address string "0.0.0.0"
port int 8080
threads int 4

database

Поле Тип Значение по умолчанию
host string "localhost"
port int 5432
dbname string "testdb"
user string "postgres"
password string (пусто)

Переменные окружения

Переопределяют соответствующие поля config.json:

  • DB_HOST
  • DB_PORT
  • DB_NAME
  • DB_USER
  • DB_PASSWORD

Пример:

DB_PASSWORD=secret ./build/bin/cards

API

Метод Путь Описание
GET / Случайная запись из таблицы random_data
GET /health Проверка состояния сервера

Пример ответа GET /

{
    "id": 3,
    "name": "Gamma",
    "value": 300,
    "description": "Third test record",
    "created_at": "2025-01-01 12:00:00",
    "timestamp": 1735732800000000000
}

Пример ответа GET /health

{
    "status": "ok",
    "timestamp": 1735732800000000000
}

База данных

При первом запуске автоматически создаётся таблица random_data и заполняется десятью тестовыми записями.

Схема таблицы:

CREATE TABLE random_data (
    id          SERIAL PRIMARY KEY,
    name        VARCHAR(100) NOT NULL,
    value       INTEGER NOT NULL,
    description TEXT,
    created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Сборка deb-пакета

cd build
cmake ..
cpack

Результат: cards-1.0.0-Linux.deb

Завершение работы

Для остановки сервера отправьте сигнал SIGINT (Ctrl+C) или SIGTERM.