Инструкция по локальной установке - AlexMisha/callcenter GitHub Wiki
Заранее должны быть установлены
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