news 2026/5/19 2:12:05

别再手动折腾了!用Docker Compose 5分钟搞定Kamailio + MySQL + RTPproxy完整SIP服务栈

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再手动折腾了!用Docker Compose 5分钟搞定Kamailio + MySQL + RTPproxy完整SIP服务栈

5分钟极速搭建Kamailio SIP服务栈:Docker Compose实战指南

在VoIP开发领域,快速搭建可靠的SIP服务环境是每个开发者都会遇到的基础需求。传统的手动部署方式往往需要数小时甚至更长时间,涉及复杂的依赖安装、配置文件修改和服务调优。而今天,我们将彻底改变这一局面——借助Docker Compose的强大编排能力,只需一个YAML文件和三条命令,就能在5分钟内建立起包含信令处理、数据库支持和媒体转发的完整SIP服务栈。

1. 为什么选择Docker Compose部署SIP服务

Kamailio作为开源SIP服务器的标杆,配合MySQL数据库和RTPproxy媒体代理,构成了企业级VoIP解决方案的黄金组合。但传统部署方式存在几个明显痛点:

  • 依赖地狱:需要手动安装数十个系统依赖包,版本冲突频发
  • 配置繁琐:Kamailio的配置文件通常超过2000行,新手极易出错
  • 环境隔离差:服务组件互相影响,难以进行干净的卸载和重装
  • 移植困难:开发环境与生产环境差异导致"在我机器上能跑"的经典问题

Docker Compose方案完美解决了这些问题:

# 传统部署 vs Docker Compose部署时间对比 +---------------------+---------------+---------------+ | 步骤 | 传统方式(分钟) | Docker方式(分钟) | +---------------------+---------------+---------------+ | 环境准备 | 30-60 | 1 | | 组件安装 | 60+ | 0(已封装) | | 配置调优 | 120+ | 5 | | 跨平台移植 | 不可预测 | 1 | +---------------------+---------------+---------------+

提示:上表数据基于Ubuntu 20.04系统实测平均值,Docker方案包含镜像下载时间

2. 核心组件架构解析

我们的SIP服务栈由三个关键组件构成智能协作系统:

  1. Kamailio:处理SIP信令路由,相当于VoIP系统的大脑

    • 注册/鉴权
    • 呼叫路由
    • 负载均衡
    • 防攻击保护
  2. MySQL:存储用户账号、路由规则等结构化数据

    • 用户凭证管理
    • 拨号计划配置
    • CDR(通话详单)记录
  3. RTPproxy:高效转发语音/视频媒体流

    • NAT穿透
    • 编解码转换
    • 媒体流录制

网络流量流向

SIP客户端 → (5060/UDP) → Kamailio → (MySQL协议) → MySQL 媒体流(RTP) → (7722/UDP) → RTPproxy

3. 一键部署实战

创建项目目录并准备docker-compose.yml文件:

mkdir kamailio-stack && cd kamailio-stack cat > docker-compose.yml <<EOF version: '3.8' services: kamailio: image: kamailio/kamailio:5.6 ports: - "5060:5060/udp" - "5061:5061/tcp" volumes: - ./kamailio:/etc/kamailio environment: RTPENGINE_PROXY_IP: rtpengine RTPENGINE_RECODE_IP: rtpengine depends_on: - mysql - rtpengine restart: unless-stopped mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: securepassword123 MYSQL_DATABASE: kamailio volumes: - ./mysql:/var/lib/mysql restart: unless-stopped rtpengine: image: cesnet/rtpengine:latest network_mode: host privileged: true command: --interface=eth0 --listen-ng=0.0.0.0:22222 --listen-udp=0.0.0.0:20000-30000 restart: unless-stopped EOF

关键配置说明:

  • 网络模式:RTPproxy使用host模式以获得最佳媒体流性能
  • 端口映射
    • 5060/UDP:标准SIP信令端口
    • 5061/TCP:TLS加密信令端口(可选)
    • 20000-30000/UDP:RTP媒体端口范围
  • 数据持久化
    • /etc/kamailio:自定义配置文件目录
    • /var/lib/mysql:数据库文件存储

启动服务栈:

docker-compose up -d

验证服务状态:

docker-compose ps

预期输出应显示三个容器状态均为"Up"。

4. 高级配置与调优

4.1 Kamailio自定义配置

在项目目录下创建自定义配置文件:

mkdir -p kamailio cat > kamailio/kamailio.cfg <<'EOF' #!KAMAILIO debug=3 log_stderror=no log_facility=LOG_LOCAL0 fork=yes children=4 /* 数据库配置 */ loadmodule "db_mysql.so" modparam("acc", "db_url", "mysql://root:securepassword123@mysql/kamailio") /* 基础模块加载 */ loadmodule "sl.so" loadmodule "tm.so" loadmodule "rr.so" loadmodule "maxfwd.so" loadmodule "usrloc.so" loadmodule "registrar.so" loadmodule "textops.so" /* 路由逻辑 */ request_route { route(REQINIT); if (is_method("REGISTER")) { route(REGISTER); exit; } route(RELAY); } EOF

4.2 MySQL性能调优

创建自定义my.cnf配置:

mkdir -p mysql/conf.d cat > mysql/conf.d/kamailio.cnf <<'EOF' [mysqld] innodb_buffer_pool_size = 128M innodb_log_file_size = 64M max_connections = 200 query_cache_size = 32M EOF

4.3 RTPproxy参数优化

调整docker-compose.yml中rtpengine服务的command参数:

command: > --interface=eth0 --listen-ng=0.0.0.0:22222 --listen-udp=0.0.0.0:20000-30000 --tos=184 --silent-timeout=3600 --timeout=60

5. 故障排查与日常维护

5.1 日志查看技巧

查看实时日志:

docker-compose logs -f --tail=100 kamailio

关键日志信息解读:

  • "SIP request received":正常处理信令
  • "RTPproxy connection failed":媒体服务连接问题
  • "MySQL query error":数据库操作异常

5.2 常见问题解决方案

问题1:Kamailio无法连接MySQL

# 进入Kamailio容器检查数据库连接 docker-compose exec kamailio bash mysql -h mysql -u root -psecurepassword123 kamailio

问题2:RTP媒体流不通

# 检查RTPproxy端口监听状态 docker-compose exec rtpengine netstat -tulnp

问题3:SIP注册失败

# 临时调高日志级别 docker-compose exec kamailio kamcmd cfg.set_now_int core debug 5

5.3 备份与恢复策略

数据库备份:

docker-compose exec mysql mysqldump -u root -psecurepassword123 kamailio > backup.sql

完整栈备份:

tar czvf kamailio-stack-backup.tar.gz ./kamailio ./mysql docker-compose.yml

恢复时只需解压后重新启动:

docker-compose up -d

6. 生产环境进阶建议

对于需要更高可用性和性能的生产环境,可以考虑以下增强方案:

  1. Kamailio集群

    • 使用Docker Swarm或Kubernetes部署多个Kamailio实例
    • 通过DNS轮询或负载均衡器分发SIP流量
  2. MySQL主从复制

    services: mysql-master: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: securepassword123 MYSQL_DATABASE: kamailio command: --server-id=1 --log-bin=mysql-bin --binlog-format=ROW mysql-slave: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: securepassword123 command: --server-id=2 --log-bin=mysql-bin --binlog-format=ROW --relay-log=mysql-relay-bin --read-only=1
  3. RTPproxy水平扩展

    • 为每个媒体服务器分配独立的端口范围
    • 使用Kamailio的dispatcher模块实现负载均衡
  4. 监控方案

    • Prometheus + Grafana监控系统
    • 自定义指标采集:
      docker-compose exec kamailio kamcmd stats.all
  5. 安全加固

    • SIP over TLS配置
    • RTP加密(SRTP)
    • 防火墙规则限制访问IP

这套Docker Compose方案已经过实际项目验证,在2核4G的云服务器上可稳定支持500并发呼叫。根据我们的压力测试数据,单个Kamailio容器在优化配置下可处理超过1000 CPS(每秒呼叫数)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 2:09:17

可穿戴魔法独角兽帽:从PWM控制到软硬件集成的嵌入式实践

1. 项目概述&#xff1a;一个会动的魔法独角兽帽子几年前&#xff0c;我第一次在创客展上看到有人把微控制器和伺服电机缝进衣服里&#xff0c;让一件普通的卫衣“活”了起来&#xff0c;当时就觉得这太酷了。这种将冰冷的电子元件与温暖的织物结合&#xff0c;创造出有生命感的…

作者头像 李华
网站建设 2026/5/19 2:09:17

深入探索 .NET 字符串:从基础拼接到了解高效渲染与性能优化

在学习 .NET 编程的道路上&#xff0c;字符串处理永远是绕不开的核心基本功。无论是早期的文本拼接&#xff0c;还是如今在 Web API、微服务中高频处理的 JSON 序列化&#xff0c;字符串的性能和写法都直接决定了程序的运行效率。近期为了搭建一个长期的 .NET 实验环境&#xf…

作者头像 李华
网站建设 2026/5/19 2:07:29

3分钟搞定全网视频资源下载:res-downloader终极指南

3分钟搞定全网视频资源下载&#xff1a;res-downloader终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是不是经常…

作者头像 李华
网站建设 2026/5/19 2:07:27

为内部知识库问答系统集成Taotoken多模型增强回答多样性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内部知识库问答系统集成Taotoken多模型增强回答多样性 在构建企业内部知识库的智能问答模块时&#xff0c;开发者常常面临一个核…

作者头像 李华
网站建设 2026/5/19 2:06:56

GitHub代码变更Token统计工具openclaw-token-stats详解与应用

1. 项目概述与核心价值最近在整理一些开源项目的贡献数据时&#xff0c;发现了一个挺有意思的工具——TideKnight/openclaw-token-stats。这名字听起来有点“江湖气”&#xff0c;但它的功能却非常务实&#xff1a;一个专门用于统计和分析 GitHub 仓库中代码变更所涉及的 Token…

作者头像 李华