Апостол - это платформа (framework) для разработки серверных приложений (системных служб) под ОС Linux.
Апостол разработан на языке программирования C++ с применением асинхронной модели программирования на базе epoll API с прямым доступом к СУБД PostgreSQL (через библиотеку: libpq
) специально для высоко-нагруженных систем.
Ключевым элементом платформы является HTTP-сервер с прямым доступом к СУБД PostgreSQL.
Уникальность решения заключается в том, что и HTTP-сервер, и сокеты PostgreSQL находятся в едином цикле обработки событий, что позволяет мгновенно передавать данные с HTTP-сервера в базу данных. Другими словами, между HTTP-сервером и базой данных нет посредников, которые обычно представлены скриптовыми языками программирования. Это, в свою очередь, позволяет выполнять запросы к базе данных с максимальной эффективностью и минимальными временными задержками.
- Основные преимущества:
- Автономность: После сборки Вы получаете полностью готовый к работе бинарный файл в виде системной службы (демона) под ОС Linux;
- Скорость: Запросы к HTTP-серверу и базе данных выполняются на столько быстро на сколько это позволяет операционная система и СУБД;
- Пул соединений: Апостол имеет собственный настраиваемый пул соединений с PostgreSQL.
Фреймворк имеет модульную конструкцию, встроенный HTTP-сервер и PostgreSQL клиент.
-
WebServer (Веб-сервер);
- Обеспечивает работу Swagger UI который будет доступен по адресу http://localhost:8080 в вашем браузере после запуска Апостол.
-
PGFetch (Postgres Fetch);
- Предоставляет возможность принимать и отправлять
HTTP-запросы
на языке программированияPL/pgSQL
.
- Предоставляет возможность принимать и отправлять
- AuthServer (Сервер авторизации OAuth 2.0);
- AppServer (Сервер приложений);
- MessageServer (Сервер сообщений: SMTP/FCM/API);
- FileServer (Файл сервер);
- Replication (Репликация базы данных);
- StreamServer (Сервер потоковых данных).
Апостол имеет встроенную поддержку WebSocket: WebSocket API.
Объединив всё выше перечисленное можно создать информационную систему Апостол CRM, Центральную систему для станций зарядки электо-автомобилей или Telegram бот на PL/pgSQL почему бы и нет ;-).
С Апостол Ваши возможности ограничены только Вашей фантазий.
Свидетельство о государственной регистрации программы для ЭВМ.
Реализованные на Апостол проекты:
- CopyFrog (Платформа на базе искусственного интеллекта для создания, рекламных текстов, видео-креативов, маркетинговых описаний товаров и услуг)
- OCPP CSS (Центральная система в виде сервиса для зарядных станций)
- Ship Safety ERP (ERP-система для организации производственной деятельности судоходных компаний)
- PlugMe (CRM-система для зарядных станций и владельцев электромобилей)
- DEBT Master (Система для автоматизации взыскания долгов)
- BitDeals (Сервис обработки биткоин-платежей)
Вы можете собрать образ самостоятельно или получить уже готовый из докер-хаб:
docker build -t apostol .
docker pull apostoldevel/apostol
Если собрали самомтоятельно:
docker run -d -p 8080:8080 -p 8081:8081 -p 5433:5432 --rm --name apostol apostol
Если получили готовый образ:
docker run -d -p 8080:8080 -p 8081:8081 -p 5433:5432 --rm --name apostol apostoldevel/apostol
Swagger UI будет доступен по адресу http://localhost:8080 или http://host-ip:8080 в вашем браузере.
Pgweb - веб-обозреватель для PostgreSQL будет доступен по адресу http://localhost:8081 или http://host-ip:8081 в вашем браузере.
Вместо pgweb можно использовать любой другой инструмент для работы с базами данных. PostgreSQL из контейнера будет доступен на порту 5433.
auto/ содержит файлы со скриптами
cmake-modules/ содержит файлы с модулями CMake
conf/ содержит файлы с настройками
src/ содержит файлы с исходным кодом
├─app/ содержит файлы с исходным кодом: Apostol
├─core/ содержит файлы с исходным кодом: Apostol Core
├─lib/ содержит файлы с исходным кодом библиотек
| └─delphi/ содержит файлы с исходным кодом библиотеки*: Delphi classes for C++
└─modules/ содержит файлы с исходным кодом дополнений (модулей)
www/ содержит файлы с Веб-сайтом
Для установки Апостол Вам потребуется:
- Компилятор C++;
- CMake или интегрированная среда разработки (IDE) с поддержкой CMake;
- Библиотека libpq-dev (libraries and headers for C language frontend development);
- Библиотека postgresql-server-dev-all (libraries and headers for C language backend development).
Для того чтобы установить компилятор C++ и необходимые библиотеки на Ubuntu выполните:
sudo apt-get install build-essential libssl-dev libcurl4-openssl-dev make cmake gcc g++
Подробное описание установки C++, CMake, IDE и иных компонентов необходимых для сборки проекта не входит в данное руководство.
Для того чтобы установить PostgreSQL воспользуйтесь инструкцией по этой ссылке.
Для того чтобы установить базу данных необходимо выполнить:
- Прописать наименование базы данных в файле db/sql/sets.conf (по умолчанию: web)
- Прописать пароли для пользователей СУБД libpq-pgpass:
$ sudo -iu postgres -H vim .pgpass
*:*:*:http:http
- Указать в файле настроек
/etc/postgresql/{version}/main/pg_hba.conf
:# TYPE DATABASE USER ADDRESS METHOD local web http md5
- Применить настройки:
$ sudo pg_ctlcluster <version> main reload
- Выполнить:
$ cd db/ $ ./install.sh --make
Параметр --make
необходим для установки базы данных в первый раз. Далее установочный скрипт можно запускать или без параметров или с параметром --install
.
Для установки Апостол (без Git) необходимо:
- Скачать Апостол;
- Распаковать;
- Настроить
CMakeLists.txt
(по необходимости); - Собрать и скомпилировать (см. ниже).
Для установки Апостол с помощью Git выполните:
git clone https://github.com/apostoldevel/apostol.git
cd apostol
./configure
cd cmake-build-release
make
sudo make install
По умолчанию бинарный файл apostol
будет установлен в:
/usr/sbin
Файл конфигурации и необходимые для работы файлы, в зависимости от варианта установки, будут расположены в:
/etc/apostol
или
~/apostol
apostol
- это системная служба (демон) Linux.
Для управления apostol
используйте стандартные команды управления службами.
Для запуска apostol
выполните:
sudo systemctl start apostol
Для проверки статуса выполните:
sudo systemctl status apostol
Результат должен быть примерно таким:
● apostol.service - Apostol
Loaded: loaded (/etc/systemd/system/apostol.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2019-04-06 00:00:00 MSK; 3y ago
Process: 461158 ExecStartPre=/usr/bin/rm -f /run/apostol.pid (code=exited, status=0/SUCCESS)
Process: 461160 ExecStartPre=/usr/sbin/apostol -t (code=exited, status=0/SUCCESS)
Process: 461162 ExecStart=/usr/sbin/apostol (code=exited, status=0/SUCCESS)
Main PID: 461163 (apostol)
Tasks: 2 (limit: 77011)
Memory: 2.6M
CPU: 44ms
CGroup: /system.slice/apostol.service
├─461163 apostol: master process /usr/sbin/apostol
└─461164 apostol: worker process ("pq fetch", "web server")
Управлять apostol
можно с помощью сигналов.
Номер главного процесса по умолчанию записывается в файл /run/apostol.pid
.
Изменить имя этого файла можно при конфигурации сборки или же в apostol.conf
секция [daemon]
ключ pid
.
Главный процесс поддерживает следующие сигналы:
Сигнал | Действие |
---|---|
TERM, INT | быстрое завершение |
QUIT | плавное завершение |
HUP | изменение конфигурации, запуск новых рабочих процессов с новой конфигурацией, плавное завершение старых рабочих процессов |
WINCH | плавное завершение рабочих процессов |
Управлять рабочими процессами по отдельности не нужно. Тем не менее, они тоже поддерживают некоторые сигналы:
Сигнал | Действие |
---|---|
TERM, INT | быстрое завершение |
QUIT | плавное завершение |