玉溪市网站建设_网站建设公司_交互流畅度_seo优化
2025/12/26 21:03:49 网站建设 项目流程

网上大部分安装博客来自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: 退出时优雅关闭

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询