Kamailio(前身为OpenSER)是一个开源的SIP服务器项目,基于GPL授权。它以处理性能见长,每秒钟能处理上千个并发呼叫。其官方主页为http://www.kamailio.org。本文描述Kamailio的安装配置过程。安装环境为CentOS7,kamailio版本V5.2.2。
安装MariaDB服务器
Kamailio服务器安装前,必须先确保系统上已经安装MySQL或 MariaDB。
# yum install mariadb-server mariadb mariadb-devel
# systemctl start mariadb
获取kamailio源码
源码可以从GIT上克隆,或者下载发布的tar包。这里我们选择下载tar包。执行以下命令:
# cd /usr/local
# wget https://www.kamailio.org/pub/kamailio/5.2.2/src/kamailio-5.2.2_src.tar.gz
# tar vzxf kamailio-5.2.2_src.tar.gz
调优Makefile
首先生成编译相关的配置文件:
# cd kamailio-5.2.2/
# make cfg
接下来启用MySQL 模块。编辑 modules.lst文件:
# vim src/modules.lst
在变量include_modules下添加 db_mysql和dialplan。
include_modules= db_mysql dialplan
存盘退出编辑。
说明:这是一种机制,用于配置编译一些扩展模块(这些模块缺省是不编译的),比如lcr、dialplan、presence。如果不习惯编辑配置文件,可以用下面命令生成配置:
# make include_modules="db_mysql dialplan" cfg
注意: 如果你希望变更缺省安装目录,可以在make cfg命令中指定 PREFIX变量来设置安装路径:
# make PREFIX="/usr/local/kamailio" include_modules="db_mysql dialplan" cfg
更多编译参数信息请参考以下链接:
编译Kamailio
# make all
安装Kamailio:
# make install
按配置,二进制文件和脚本将被安装在以下目录中:
/usr/local/kamailio/sbin
主要可执行文件说明:
- kamailio - Kamailio SIP 服务器的执行文件
- kamdbctl – 用于创建管理数据库的脚本
- kamctl – 用于控制管理Kamailio SIP 服务器的脚本
- kamcmd – CLI命令行工具,是Kamailio SIP服务器提供的接口
要从命令行直接执行相应的二进制文件,请确保/usr/local/kamailio/sbin路径被设置在环境变量中。你可能通过命令echo $PATH检查一下。如果没有,可以使用bash,编辑/root/.bash_profile文件,添加以下两行:
PATH=$PATH:/usr/local/kamailio/sbin
export PATH
Kamailio 模块文件被安装在以下目录中:
/usr/local/kamailio/lib64/kamailio/modules/
相关文档和readme文件被安装在:
/usr/local/kamailio/share/doc/kamailio/
帮助手册被安装在:
/usr/local/kamailio/share/man/man5/
/usr/local/kamailio/share/man/man8/
配置文件的安装位置是:
/usr/local/kamailio/etc/kamailio/kamailio.cfg
创建MySQL数据库
要创建MySQL 数据库,就要用到数据库脚本。首先,编辑kamctlrc 文件配置数据库服务类型:
# vim /usr/local/kamailio/etc/kamailio/kamctlrc
找到 DBENGINE 变量,并把它的值设为:MYSQL:
DBENGINE=MYSQL
你可以修改kamctlrc 文件中的其他变量值,建议至少要修改用户连接创建数据库的缺省密码。
编辑好kamctlrc 文件之后,执行Kamailio提供的脚本创建数据库:
/usr/local/kamailio/sbin/kamdbctl create
你可以不加任何参数执行这个脚本,这时会得到脚本用法相关的一些帮助信息。创建过程中,创建过程中可能会要求你输入一些信息,比如Kamailio服务运行的域名,MySQL的root 用户密码待,还会有一些交互选择需要创建哪些表,我们把所有表都创建好。脚本将建立一个名为kamailio 的数据库,库中包含了运行Kamailio服务所需要的表。你可以随意修改kamctlrc文件中的缺省值。
这个脚本会在MySQL中添加两个用户:
- kamailio - (缺省密码 kamailiorw) – 拥有kamailio 数据库所有权限的用户
- kamailioro - (缺省密码 kamailioro) - user which has read-only access rights to kamailio database
重要提醒: 务必修改这两个用户的密码!!!
编辑配置文件
为了适应你的VoIP平台的具体需求,你必须编辑配置文件。
/usr/local/kamailio/etc/kamailio/kamailio.cfg
按照注释中的说明启用MySQL。基本上你必须在配置文件的顶部添加几行代码:
添加位置必须在####### Defined Values #########这一行之前。
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
如果kamailio 使用的MySQL用户的密码被修改,那么你必须更新 db_url参数中的对应值。
你可以在线参考kamailio.cfg
启动脚本
init.d脚本用于控制Kamailio服务器的开机起停。
源码目录下的子目录有脚本实例:
pkg/kamailio/obs/kamailio.init
把脚本拷贝为/etc/init.d/kamailio,然后设置相应权限:
# chmod 755 /etc/init.d/kamailio
然后,编辑脚本文件,变更$KAM 和$KAMCFG 的值,设置RUN_KAMAILIO=yes:
KAM =/usr/local/kamailio/sbin/kamailio
KAMCFG =/usr/local/kamailio/etc/kamailio/kamailio.cfg
现在,可以通过以下命令来起停Kamailio服务了:
/etc/init.d/kamailio start
/etc/init.d/kamailio stop
Service脚本,在源码包里的pkg/kamailio/obs/目录下有一个名为kamailio.service的模板,把它拷贝到/usr/lib/systemd/system/:
# cp kamailio.service /usr/lib/systemd/system/
拷贝后,编辑文件,修改Environment变量CFGFILE和ExecStart的值,让它指向我们的安装目录:
Environment='CFGFILE=/usr/local/kamailio/etc/kamailio/kamailio.cfg'
ExecStart=/usr/local/kamailio/sbin/kamailio -DD -P /var/run/kamailio/kamailio.pid -f $CFGFILE -m $SHM_MEMORY -M $PKG_MEMORY
缺省设置条件下,运行Kamailio服务器的用户和组名字都是kamailio。因此,我们需要创建相应的Linux帐户:
# mkdir -p /var/run/kamailio
# groupadd kamailio
# adduser --system -g kamailio --shell /bin/false \
--home /var/run/kamailio kamailio
# 将所有权限设置为/var/run/kamailio
# chown kamailio:kamailio /var/run/kamailio
现在,可以通过systemctl命令起停服务了,试一下:
# systemctl start kamailio
# systemctl stop kamailio
帐号测试
现在,万事俱备,只欠东风。你可以启动服务。但还需要分配帐号并设置话机终端。
可以通过kamctl 工具添加新帐号:
# kamctl add username password email
其中的email选项是可选的
# kamctl add test testpasswd test@mysipserver.com