Инструкция по локальной установке - AlexMisha/callcenter GitHub Wiki

Заранее должны быть установлены

Git https://git-scm.com/

Docker https://www.docker.com/

JDK 11 https://jdk.dev/download/ или https://www.oracle.com/java/technologies/javase-downloads.html

Maven https://maven.apache.org/

psql https://www.postgresql.org/download/


Клонируем проект

git clone https://github.com/AlexMisha/callcenter.git

Создаем локальную сеть для docker контейнеров

docker network create --subnet=192.168.100.0/24 callcenternet

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

В корне проекта выполнить

mvn clean install

Некоторые тесты могут упасть, пока не развернута БД

Для локальной разработки можно пропускать запуск тестов при сборке (но прогонять перед передачей на ревью):

mvn clean install -DskipTests

Можно изменить путь, где будет развернут итоговый jar файл, с помощью параметра callcenter.deploy.path

Например, mvn clean install -Dcallcenter.deploy.path=/opt/callcenter

Установка БД

Развертывание docker контейнера

Получаем docker образ PostgreSQL

docker pull postgres

Создаем volume папку для сохранения данных БД между запусками контейнера

mkdir -p $HOME/docker/volumes/postgres (либо через UI своей ОС создаем обычную папку)

Запускаем контейнер

docker run --rm --name pg-callcenter -e POSTGRES_PASSWORD=fa7aa9aed8f1dba6fac0f0eaf06d6bf73d4655ea72b9909bf0e5d48b88dfe30c -e POSTGRES_USER=callcenter_user -e POSTGRES_DB=callcenter --net callcenternet --ip 192.168.100.101 -d -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres

В результате будет развернут docker контейнер с PostgreSQL внутри. Имя БД - callcenter, имя пользователя - callcenter_user, пароль - fa7aa9aed8f1dba6fac0f0eaf06d6bf73d4655ea72b9909bf0e5d48b88dfe30c

Проверить, что все развернуто правильно, т.е. подключиться к БД, можно командой

psql -h 192.168.100.101 -U callcenter_user -d callcenter (будет потребован пароль)

Исполнение миграций

Для обеспечения версионности БД используется liquibase

В проекте определены 2 контекста: prod - основная структура БД, таблицы, последовательности и test - миграции, содержащие в себе тестовые данные

Чтобы выполнить все миграции, нужно, перейдя в корень проекта callcenter, выполнить:

mvn -pl backend liquibase:update

Только для контекста prod:

mvn -pl backend liquibase:update -Dliquibase.contexts="prod"

Только для контекста test:

mvn -pl backend liquibase:update -Dliquibase.contexts="test"

Все миграции можно откатывать до определенного тега командой

mvn -pl backend liquibase:rollback -Dliquibase.rollbackTag="$TAG_NAME", где $TAG_NAME - имя тега.

Имена тегов можно посмотреть в xml файлах миграций backend/src/main/resources/db.changelog

Результат исполнения миграций можно проверить в интерфейсе psql (например, вывести список таблиц \dt)

Установка Asterisk

Качаем архив отсюда и распаковываем https://drive.google.com/open?id=1pg9RBChsZZTxEAZdhVIzgU59d5A4053Y

Загружаем образ из архива

docker load -i asterisk-centos.tar

Создаем папку, где будут храниться записи телефонных разговоров

Запускаем контейнер командой

docker run --rm --name asterisk -v $CALL_RECORDS_PATH:/opt/callcenter/data/callrecords/ --net callcenternet --ip 192.168.100.100 --cap-add=NET_ADMIN -p 5060:5060/udp -p10000-10020:10000-10020/udp -p5036:5036/udp -p8088:8088 -p8089:8089 -it asterisk-centos bash

Где $CALL_RECORDS_PATH - путь до ранее созданной папки для записей телефонных разговоров, например, /opt/callcenter/data/callrecords/ (последний слеш должен быть в пути)

Далее нужно либо создать self-signed сертификат, либо использовать имеющийся.

В первом случае генерируем сертификат так, как описано тут

В результате в контейнере в директории /etc/asterisk/keys должен лежать файл asterisk.pem.

Во втором случае нужно поменять все конфигурации в /etc/asterisk (grep -r "asterisk.pem") на существующий сертификат.

В терминале контейнера пишем

service asterisk start

Затем

asterisk -r

Не обращаем внимания на возможные ошибки и пр.

В консоли asterisk вводим

cdr show pgsql status

Если вывело что-то вроде Connected to [email protected], port 5432 using table cdr for 13 seconds. , значит все ок.

Запуск коллцентра

В папке, где расположен jar файл (по умолчанию это папка target/ в корне проекта) коллцентра выполнить

java -jar callcenter-0.0.1-SNAPSHOT.jar --callcenter.callRecordsPath=$CALL_RECORDS_PATH

Где $CALL_RECORDS_PATH - путь до ранее созданной папки для записей телефонных разговоров

Приложение будет доступно по адресу localhost:8080