尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

编译安装Freeswitch 1.10.12

编译安装Freeswitch 1.10.12
📅 发布时间:2026/6/19 3:55:59

网上大部分安装博客来自https://github.com/freeswitch/mod_unimrcp 的readme 文档,但这是两年前的版本(2023),当前最新稳定版是1.10.12,2024年发布。用旧的教程安装,新的版本存在包错。但是我估计在把各个项目都切到2023年的tag或者branch,再按照文档执行编译过程应该是没问题的。不过目前需求是用2024的版本,所以没去尝试。

回到正题,https://github.com/signalwire/freeswitch 项目的 docker/build 目录有三个Dockerfile文件,是2025年提交,本人亲测按照步骤可以成功安装最新稳定版freeswitch 1.10.12。下面是三个Dockerfile的作用说明。

文件 作用
base-image-from-repo.Dockerfile 用docker运行此Dockerfile,从官方源安装fs,需要官网的token。优点是简单快捷。缺点是无法更改源码和配置,即无法自定义编译的模块。
base-image-from-source.Dockerfile 用docker运行此Dockerfile,生成一个镜像。该镜像包含了编译过程中需要的所有依赖。然后用此镜像可以编译fs源码,生成Debian 下的deb安装包。但是生成的安装包在Debain12 直接安装会有很多依赖包错。
debs-from-source.Dockerfile 用docker运行此Dockerfile,生成一个镜像。用该镜像可以生成安装fs 的deb 包时所需要的依赖包。

到一台可以访问外网(减少各种依赖和包无法访问导致的报错!)且已经安装了git和docker的Linux服务器,新建一个目录执行下面的操作。

先编译fs源码成deb安装包

git clone https://github.com/signalwire/freeswitch
cd freeswitch
# fs-base-image中具备了编译fs源码所需要的所有依赖
docker build -t fs-base-image -f docker/build/base-image-from-source.Dockerfile .
# 如果要指定标签和版本号
#   docker build -t fs-base-image \
#     --build-arg LIBKS_REF=v1.0.0 \
#     --build-arg BUILD_NUMBER=123 \
#     -f docker/build/base-image-from-source.Dockerfile .# 创建宿主机保存的目录,也可以指定另外目录
mkdir -p "$HOME/DEBs"# 用fs-base-image编译源码,需要时间较长根据网速和服务器性能大概10-30min
# 将$(pwd) 改成freeswitch的源码目录,因为要安装的不是当前的最新源代码,而且最新稳定版本。
# 在另外的目录克隆源码,然后通过git tag查看版本,再git checkout 到指定tag
docker run -it --rm -v "$HOME/DEBs:/var/local/deb" -v "$(pwd):/usr/local/src/freeswitch" fs-base-image scripts/packaging/build/fsdeb.sh -b 42 -o /var/local/deb# 执行后在$HOME/DEBs目录下就有了指定版本的fs 的deb安装包。

再编译安装fs需要的依赖包

# 生成镜像fs-debian-package-builder
docker build -t fs-debian-package-builder -f docker/build/debs-from-source.Dockerfile .
# 也可指定标签
#   docker build -t fs-debian-package-builder \
#     --build-arg LIBKS_REF=v1.0.0 \
#     --build-arg BUILD_NUMBER=123 \
#     -f docker/build/debs-from-source.Dockerfile .#创建目录
mkdir -p "$HOME/DEBs-PACK"# 将安装fs所需要的依赖也打包成deb格式,存放到宿主机的 $HOME/DEBs 目录
# 为了区分fs的deb包,也可以将依赖的deb包存放的别的目录,后续先安装依赖的deb包,然后再安装fs的deb包
docker run -v "$HOME/DEBs-PACK:/var/local/deb" fs-debian-package-builder

现在开始用docker 构建一个含有fs的镜像。先用一个docker compose file运行一个容器。

执行docker compose -f docker-compose.yml up -d,docker-compose.yml 内容如下:

services:fs-debian12:container_name: fs-debian12image: debian:bookworm    tty: trueprivileged: truerestart: alwaysenvironment:TZ: "Asia/Shanghai"

将宿主机的安装包复制到容器,也可以在docker compose file中挂载。但是不知道会不会有文件生成,影响宿主机目录,所以用复制的方式。

docker cp $HOME/DEBs-PACK fs-debian12:/root
docker cp $HOME/DEBs fs-debian12:/root

进入容器,执行安装。

docker exec -it fs-debian12 bash
apt update# 先安装依赖
apt install -y /root/DEBs-PACK/*.deb# 再安装fs,如果有些依赖包确定不需要但是安装时有出现了报错,直接直接mv 重命名文件修改deb后缀,这样就不会安装了
apt update
apt install -y /root/DEBs/*.deb# 安装完成后执行,可以看到路径
whereis freeswitch
# 运行
freeswitch

此时已经在一个Debian12的容器中安装了freeswitch ,我们可以将此保存为镜像,作为基础镜像使用。

# 保存容器为镜像并且指定tag为v1
docker commit fs-debian12 fs-debian12:v1
# 也可以保存为文件方便部署使用
docker -o fs-debian12_v1.image fs-debian12:v1

下面用docker compose 得方式部署运行freeswitch:

services:repair:container_name: freeswitch-1.10.12image: fs-debian12:v1privileged: truerestart: alwaysenvironment:TZ: "Asia/Shanghai"network_mode: hostvolumes:- /home:/home- ./mod_asr.so:/usr/lib/freeswitch/mod/mod_asr.so- ./conf:/etc/freeswitch- ./log:/var/log/freeswitchcommand: ["freeswitch", "-ncwait",  "-nonat", "-rp", "-elegant-term"]

关于yaml的说明:

  • home 目录存放语音文件的目录。
  • mod_asr.so 是调用asr的so,另外有需要的旧版的依赖包复制到容器的/lib/x86_64-linux-gnu/ 目录。
  • conf 目录是配置,此目录先不做映射,开启容器后复制到宿主机根据需要修改后,再做映射。
  • log 目录映射出来,用来做日志持久化

启动参数的说明:

- -ncwait : 阻塞当前shell指令不输出日志,
- -nonat: 不检测网络,避免运行在docker时可能出现的网络问题,切network_mode指定为host
- -rp:实时设置,避免延迟
- -elegant-term: 退出时优雅关闭

相关新闻

  • 【mac如何连接redis】很好用的一款Redis客户端
  • Java计算机毕设之基于Java的网上宠物店管理系统宠物种类管理、宠物信息管理、食品类型管理(完整前后端代码+说明文档+LW,调试定制等)
  • SQL性能瓶颈破局:Explain分析+实战优化全攻略

最新新闻

  • 从零开始:PaddleX如何让AI开发像搭积木一样简单?
  • 抖店无货源铺货怎么不违规?拼多多商品违规检测新手合规教程 - 抖掌柜
  • 专业级Canvas富文本编辑器:5分钟实现高质量文档编辑与PDF导出
  • MMC2001 UART与OnCE模块深度解析:寄存器配置、硬件调试与实战避坑
  • 5分钟上手SimLOD:让海量点云数据实时渲染变得简单
  • MC68340定时器与JTAG边界扫描:嵌入式系统时序控制与硬件诊断核心技术解析

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号