基于docker部署Asterisk20
快速搭建asterisk20可视通话完整流程,一键搭建快速部署完整可用
呼叫效果
一、Asterisk20编译和环境搭建
1.1、启动debain容器
docker run --name as --network host -t -d debian:bullseye
1.2.进入到容器
docker exec -it as bash
1.3、设置apt源
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free" >> /etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list
cat /etc/apt/sources.list
apt update
1.4、安装依赖环境:
apt install vim wget -y
apt-get install build-essential libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev
apt-get install gcc g++ make
apt install openssl=1.1.1*
apt-get install libcurl4-gnutls-dev ncurses-dev libssl-dev zlib1g-dev
apt-get install autotools-dev unixodbc-dev libltdl3-dev
apt-get install autotools-dev libltdl3-dev
apt-get install tdsodbc
apt-get install unixodbc
apt install python2.7
apt-get install libedit-dev
apt-get install uuid-dev
apt-get install libjansson-dev
apt-get install libxml2-dev
apt-get install libsqlite3-dev
apt-get install libmariadb-dev
apt install procps
apt install libopus-dev
apt install libcurl4
apt install libsrtp2-dev
apt install libmariadb-dev-compat
apt-get install xmlstarlet
apt install sngrep
1.5、下载源码
1.5.1下载asterisk源码
Index of /pub/telephony/asterisk/
网页下面的:
https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.6.0.tar.gz
1.5.2 *下载pjproject:
手动下载
的pjproject-2.13.1.tar.bz2
放入到 /tmp/下面,不然./configure 会一直失败。
1.5.3 下载res_srtp源代码
下载在/usr/local/src/
wget Download srtp-1.4.4.tgz (libsrtp)
tar -xvf srtp-1.4.4.tgz
进入 srtp目录
执行配置
./configure
make && make install
1.6检查依赖:
./configure --with-opus --with-res_srtp

出现这个就意味着成功了
make menuselect






1.7、编译
make

这样编译成功
1.8 安装
make install

1.9 安装配置
make samples

1.9.1下载opus:
Index of /pub/telephony/codec_opus/
这里选择:
在/usr/local/src下面下载
解压:
tar -xvf codec_opus-20.0_current-x86_64.tar.gz
进入目录下,把so库拷贝到lib库里面
cp codec_opus.so /usr/lib/asterisk/modules/
cp codec_opus_config-en_US.xml /var/lib/asterisk/documentation/thirdparty/
1.9.2 添加模块
添加/etc/asterisk/modules.conf
load => res_srtp.so
load => codec_opus.so
二、启动配置
2.1 启动
asterisk
asterisk -rcvvvvvddddd
进入命令模块

exit 退出命令模式
2.2 重启
在命令模式下,输入core restart now
2.3 查询依赖库
进入命令模式
module show like res_http_websocket.so
module show like res_pjsip_transport_websocket.so
module show like codec_opus.so
module show like res_crypto.so
module show like res_srtp.so
2.4修改时区
输入命令:tzselect
选择Asia->china->beijing 按文字提示输入数字,最后yes
然后copy 下面的文件替换
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
输入date -R 时间就是这边的时间了。
三、数据库配置
3.1安装odbc的mysql驱动
下载驱动
解压
tar -xv -f mysql-connector-odbc-8.0.19-linux-debian10-x86-64bit.tar.gz
mkdir /usr/local/mysql-connector-odbc
cp -r mysql-connector-odbc-8.0.19-linux-debian10-x86-64bit/* /usr/local/mysql-connector-odbc
创建数据库 asterisk
查询下面的数据表建立数据
/usr/local/asterisk/asterisk20/contrib/realtime/mysql/mysql_config.sql
添加一个2007的账号,账号密码都为2007
|
insert into ps_aors (id, max_contacts,remove_existing) values (2007, 1,'yes'); insert into ps_auths (id, auth_type, password, username) values (2007, 'userpass', 2007, 2007); insert into ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media,rtp_symmetric,rewrite_contact,force_rport,asymmetric_rtp_codec) values (2007, 'transport-udp', '2007', '2007', 'default', '', 'ulaw|alaw|opus|gsm|g726|g729|vp8|h264|h265', 'no','yes','yes','yes','yes'); |
给cdr表添加一个字段
calldate datetime
不然插入坐席的时候 会失败。
|
ALTER TABLE cdr ADD COLUMN calldate DATETIME DEFAULT CURRENT_TIMESTAMP; |
3.2 配置文件
#vi /etc/odbc.ini
|
[asterisk] Description = Test asterisk Driver = /usr/local/mysql-connector-odbc/lib/libmyodbc8a.so SERVER = 172.17.0.1 PORT = 3306 DATABASE = asterisk USER = root PASSWORD = 12345 OPTION = 67108864 SocketBufferSize = 4096 FetchBufferSize = 100 CHARSET = UTF8 |
#vi /etc/asterisk/res_odbc.conf
[asterisk]
enabled => yes
dsn => asterisk
;username => root
;password => 123456
pre-connect => yes
#vi /etc/asterisk/sorcery.conf
[res_pjsip]
endpoint=realtime,ps_endpoints
auth=realtime,ps_auths
aor=realtime,ps_aors
domain_alias=realtime,ps_domain_aliases
contact=realtime,ps_contacts
[res_pjsip_endpoint_identifier_ip]
identify=realtime,ps_endpoint_id_ips
#vi /etc/asterisk/extconfig.conf
[settings]
ps_endpoints => odbc,asterisk
ps_auths => odbc,asterisk
ps_aors => odbc,asterisk
ps_domain_aliases => odbc,asterisk
ps_endpoint_id_ips => odbc,asterisk
ps_contacts=>odbc,asterisk
ps_registrations=>odbc,asterisk
#vi /etc/asterisk/modules.conf
preload = res_odbc.so
preload = res_config_odbc.so
noload = chan_sip.so
#vi /etc/asterisk/pjsip.conf
[transport-udp]
type=transport
protocol=udp ;udp,tcp,tls,ws,wss
bind=0.0.0.0
external_media_address=192.168.20.29
external_signaling_address=192.168.20.29
配置cdr通话记录
vim /etc/asterisk/cdr_odbc.conf
[global]
dsn=asterisk
loguniqueid=yes
dispositionstring=yes
table=cdr ;"cdr" is default table name
usegmtime=no ; set to "yes" to log in GMT
hrtime=yes ;Enables microsecond accuracy with the billsec and duration fields
newcdrcolumns=yes ; Enable logging of post-1.8 CDR columns (peeraccount, linkedid, sequence
重启服务
在命令模式下,输入core restart now
#./asterisk -vvvvc
pjsip show endpoints
输出如果有object了那么就ok了。

3.3 配置呼叫计划
#vi /etc/asterisk/extensions.conf
在文件的末尾,添加如下代码,注意exten => _2XXX,1,NoOp()中的_2XXX只的是账号的2000端,这个错了的话,无法呼叫成功的。
[default]
exten => _2XXX,1,NoOp()
same => n,Dial(PJSIP/${EXTEN})
如果全部号码都接入那么exten修改为
exten => _X.,1,NoOp()
打开 Asterisk 的配置文件 logger.conf,通常位于 /etc/asterisk/logger.conf
增加
debug => notice,warning,error,debug
保存
输入命令:logger reload
3.4 配置彩铃
3.4.1 音频格式
把相应的材料转换为 xxx.gsm格式 或者xxx.g729 ,具体格式看你写的端点支持的格式
比如文件名dingding.gsm
在/var/lib/asterisk/sounds 目录下创建目录 dingding
并且把dingding.gsm拷贝到dingding下面
如 mkdir dingding
cp dingding.gsm /var/lib/asterisk/sounds/dingding/
3.4.2加铃声配置
vim /etc/asterisk/musiconhold.conf
|
[ding] mode=files directory=/var/lib/asterisk/sounds/dingding |
3.4.3 修改呼叫计划
增加呼叫彩铃
vim /etc/asterisk/extensions.conf
修改任意的号码都接入
|
[default] exten => _X.,1,NoOp() same => n,Dial(PJSIP/${EXTEN},,m(ding)) #呼叫时候增加背景彩铃 same=> n,Hangup() |
重启之后你就能够正常听见彩铃了。
3.5 配置web
vim /etc/asterisk/http.conf
enabled=yes
bindaddr=0.0.0.0 #0.0.0.0表示本机的所有IP都可以访问
bindport=8088 #登陆服务器的端口
enablestatic=yes
vim /etc/asterisk/manager.conf
[general]
enabled = yes
webenabled = yes
port = 5038
bindaddr = 0.0.0.0
[admin] #登录时的账户名称
secret=admin #登录时的账户密码
read = system,call,log,verbose,command,agent,config,read,write,originate
write = system,call,log,verbose,command,agent,config,read,write,originate
http://192.168.20.29:8089/httpstatus
显示如下:

四、演示效果
命令模式下重启:
core restart now
下载程序linephone
呼叫,开始出现铃声。
对方接听后,出现如下画面。


五、部署
此步骤是方便后期移植部署
5.1导出镜像快照
docker export -o as_debian_240223.tar as
当前目录下会存在 as_debian_240223.tar
5.2 加载镜像快照
docker import as_debian_240223.tar as:1.0.0
修改名称
docker image tag [id] as:base
![]()
可以看到咱们得镜像已经好庞大了 3.1GB ,因为我把代码和编译等一系列工具都放进去了,后面感觉大了可以自己裁剪,删除相关代码工具,还有一些比如日志、配置等可以采取映射的方式到宿主机。
5.3 自定义镜像
新建文件:
Dockerfile
内容:
|
FROM as:1.0.0 #EXPOSE 5060 #添加时区环境变量,上海 ENV TimeZone=Asia/Shanghai CMD asterisk && tail -f /var/log/asterisk/debug |
as:1.0.0为本地镜像,需要docker images 能够查询到对应的数据。
在当前目录执行文件
docker build -t as:1.0.1 .
可以看到
![]()
5.4 宿主机增加配置
mkdir -p /usr/local/as/etc
mkdir -p /usr/local/as/log
在etc下面创建odb.ini
把之前的内容填写进来。
|
[asterisk] Description = Test asterisk Driver = /usr/local/mysql-connector-odbc/lib/libmyodbc8a.so SERVER = 172.17.0.1 PORT = 3306 DATABASE = asterisk USER = root PASSWORD = 12345 OPTION = 67108864 SocketBufferSize = 4096 FetchBufferSize = 100 CHARSET = UTF8 |
创建 pjsip.conf
#vi pjsip.conf
[transport-udp]
type=transport
protocol=udp ;udp,tcp,tls,ws,wss
bind=0.0.0.0
external_media_address=192.168.20.29
external_signaling_address=192.168.20.29
六 执行
直接使用主机的网络。【推荐】
docker run --name=assip \
-v /usr/local/as/etc/odbc.ini:/etc/odbc.ini \
-v /usr/local/as/etc/pjsip.conf:/etc/asterisk/pjsip.conf \
-v /usr/local/as/log:/var/log/asterisk \
-itd --net=host --restart=always as:1.0.1
采用映射端口(映射端口太多容易卡死)
|
docker run --name=as1 \ -v /usr/local/as/etc/odbc.ini:/etc/odbc.ini \ -v /usr/local/as/etc/pjsip.conf:/etc/asterisk/pjsip.conf \ -v /usr/local/as/log/:/var/log/asterisk/ \ -p 5060:5060 -p 10000-20000 -p 5038:5038 -p 5039:5039 -p 8089:8089 \ -itd --restart=always as:1.0.1 |
指定容器名为as1
运行镜像 as:1.0.1
然后采用客户端连接上可以正常使用了,可以语音可以视频,网络好的情况都是比较流畅的,而且接上了数据库可以自我改造
建议采用客户端,开源还可以自己改造
linephone
Linphone open source VoIP SIP softphone - voice, video and instant messaging
七、相关的资源包下载:
https://download.csdn.net/download/p731heminyang/88868795

更多推荐

所有评论(0)