Есть много вариантов запуска FreePBX — системы настройки сервера телефонии Asterisk. Мы будем разворачивать нашу систему в Docker
Устанавливаем Docker если он у Вас ещё не установлен. Я не буду тут писать инструкции так как их в интернете куча, например тут. Предполагаю, что Docker Вы уже установили.
Установка FreePBX
Есть небольшая разница в различной установке FreePBX и заключается она в том, куда Вы устанавливаете. На выделенный сервер в сети или на локальную машину. Так же есть ли другие сервисы на машине куда Вы устанавливаете FreePBX которые используют порт 80 (nginx, apache2 и т.п.). В случае если порт 80 уже занят, то в конфигурационном файле FreePBX нельзя указать другой порт web интерфейса FreePBX поскольку он не может корректно работать на другом порту. FreePBX будем делать на основе этого образа: tiredofit/freepbx
Вариант 1. Порт 80 не занят.
Это самое простое, создайте папку freepbx и создайте файл со следующим содержимым:
mkdir freepbx cd freepbx nano docker-compose.yaml
version: '2' services: freepbx-app: container_name: freepbx image: tiredofit/freepbx ports: - 80:80 - 5060:5060/udp - 5160:5160/udp - 18000-18100:18000-18100/udp - 4445:4445 volumes: - ./certs:/certs - ./data:/data - ./logs:/var/log - ./data/www:/var/www/html - ./db:/var/lib/mysql environment: - VIRTUAL_HOST=hostname.example.com - VIRTUAL_NETWORK=nginx-proxy - VIRTUAL_PORT=80 - ZABBIX_HOSTNAME=freepbx-app - RTP_START=18000 - RTP_FINISH=18100 - DB_EMBEDDED=TRUE restart: always networks: - proxy-tier cap_add: - NET_ADMIN networks: proxy-tier: external: name: netasterisk
сохраняем файл, если у Вас есть уже в Docker созданная Вами сеть, то можно подключиться к ней заменив в конфиге вконце name: netasterisk на Ваше имя сети, если сетей нет то создадим сеть с именем netasterisk
docker network create netasterisk
и запускаем наш контейнер
docker compose up -d
Для подключения IP телефонов необходимо чтобы FreePBX и IP-телефон (софтфон) находился в одной сети с FreePBX, если со стороны FreePBX можно сделать настройки NAT для доступа то если телефон находится за NAT то связи не будет, по этому если Вам необходимо иметь доступ к Вашей АТС из интернета то необходимо это делать через VPN сеть. У меня на телефоне стоит OpenVPN клиент и VoIP клиент, на сервере соответственно OPenVPN сервер и VoIP сервер FreePBX
Если FreePBX Вы устанавливаете на VPS сервер или на сервер на котором есть прямой доступ в интернет и доступ к телефонии Вы сделали через VPN то чтобы запретить доступ из интернет (для предотвращения регистрации злоумышленниками и использования Вашей IP-АТС посторонними) то достаточно в конфигурацию docker-compose добавить айпи адрес Вашего VPN
ports: - 192.168.55.1:80:80 - 192.168.55.1:5060:5060/udp - 192.168.55.1:5160:5160/udp - 192.168.55.1:18000-18100:18000-18100/udp - 192.168.55.1:4445:4445
Где 192.168.200.1 — айпи адрес Вашего VPN соединения на стороне FreePBX, у меня FreePBX стоит там же где и VPN сервер. И тогда сервер будет доступен только из VPN сети.
Вариант 2. Порт 80 занят.
в вышеприведенном конфиге надо закоментировать строку
- 80:80
и сделать перенаправление на хост с FreePBX, например вот так в nginx:
server { server_name freepbx.localhost; location / { proxy_pass http://freepbx:80/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
тут в строке proxy_pass http://freepbx:80/; перенаправление по имени контейнера, у меня nginx находится в docker контейнере в той же сети что и FreePBX, если по имени контейнер не доступен то пропишите ip адрес контейнера. Если FreePBX Вы устаноавливаете на удаленном сервере, то справедливо все вышенаписанное, только доступ в вэб панели через параметры ip адреса сервера или зарегистрированного DNS
После запуска контейнера надо подождать от 1 до 20 минут и потом в браузере зайти по адресу: http://localhost/admin если вариант установки 1 и http://freepbx.localhost/admin если перенаправление сделано через nginx по примеру выше
Вводим имя пользователя и два раза пароль, а так же свой e-mail и нажимаем кнопку
Теперь можно войти в настройки нажав FreePBX Administration
введите ранее заданные имя и пароль
смените языковые настройки в соответствии с Вашими представлениями и нажмите кнопку и подождите загрузки интерфейса.
Теперь нам надо сделать несколько настроек. Интерфейс можно переключить на русский язык. Для этого нажмите на кнопку в верхнем правом углу интерфейса
Добавим внутренние номера, для этого нажмите меню Приложения — Внутренние номера
нажмите добавить как указано на скриншоте выше и заполните Внутренний номер пользователя (нельзя в будущем изменить) и Отображаемое имя (можно изменить). И нажмите кнопку Сохранить
Добавьте несколько номеров. Для видеозвонков надо разрешить видеозвонки в меню: Настройки — Установки Asterisk для SIP в первой вкладке Общие настройки SIP внизу включите Поддержка видео и выберите используемые кодеки. После чего возможно совершать видеозвонки.
Если необходимо включить текстовые сообщения то зайдите в папку где лежит файл docker-compose.yaml и отредактируйте файлы:
nano ./data/etc/asterisk./sip_general_custom.conf
и вставьте туда следующий код:
accept_outofcall_message = yes outofcall_message_context = messages auth_message_requests = no
и файл
nano ./data/etc/asterisk./extensions_custom.conf
вставьте следующий код
[messages] exten => _XXX,1,MessageSend(sip:${EXTEN},"${CALLERID(name)}"${MESSAGE(from)})
после чего надо перезапустить asterisk
docker exec freepbx asterisk reload
После чего можно подключится к нашему серверу Asterisk, Порт для подключения 5160.