docker 基于Debian镜像安装FreeSwitch1.10.7

发布时间:2026/9/3 11:26:35
docker 基于Debian镜像安装FreeSwitch1.10.7 文章目录一、安装docker1.1 卸载旧版本的Docker1.2 安装最新版本的docker1.3 配置docker镜像源二、制作FreeSwitch镜像2.1 制作开发环境FreeSwitch镜像2.1.1 编写Dockerfile2.1.2 准备FreeSwitch-1.10.7源码2.1.3 构建镜像2.1.4 生成开发基础镜像容器2.1.5 编译FreeSwitch1.进入容器2.进入源码目录编译2.1.6 运行2.2 制作生产环境FreeSwitch镜像2.2.1 编写Dockerfile2.2.2 将开发环境里面的镜像内容复制到宿主机做准备2.2.3 构建镜像2.2.4 生成生产镜像容器一、安装docker本次使用的宿主机是网友提供的centos7.91.1 卸载旧版本的Docker1.执行以下命令来卸载旧版本的Docker和相关的软件包这个命令会帮您卸载掉所有列出的与Docker相关的程序。说明 如果系统提示说部分软件包没有安装说明您尚未安装此软件包。sudoyum-yremove\docker-ce\containerd.io\docker-ce-rootless-extras\docker-buildx-plugin\docker-ce-cli\docker-compose-plugin2.Docker默认保存位置是/var/lib/docker/卸载Docker时镜像、容器、存储卷和网络不会被自动删除。如果您想要删除这些数据需要手动删除。3.删除Docker相关源请执行以下命令。sudorm-f/etc/yum.repos.d/docker*.repo1.2 安装最新版本的docker本次安装是使用阿里云的资源更新您的包管理工具。sudoyum-yupdate添加阿里云源到您的实例中这个源包含Docker软件包方便您使用命令来安装和更新Docker。重要 由于网络原因如果跳过此步可能会导致您安装Docker失败。如果您的实例网络可以访问公网。sudowget-O/etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo如果您的实例网络无法访问公网使用VPC网络访问地址。sudowget-O/etc/yum.repos.d/docker-ce.repo http://mirrors.cloud.aliyuncs.com/docker-ce/linux/centos/docker-ce.reposudosed-is|https://mirrors.aliyun.com|http://mirrors.cloud.aliyuncs.com|g/etc/yum.repos.d/docker-ce.repo安装Docker社区版本容器运行时containerd.io以及Docker构建和Compose插件。说明 使用Compose插件时命令中间不用连字符比如docker compose version。sudoyum-yinstalldocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin启动Docker并设置Docker守护进程在系统启动时自动启动这样可以确保每次系统启动时Docker服务也会自动启动。说明 如果您的systemctl命令执行异常请参见在Linux实例中执行systemctl命令报错怎么办sudosystemctl startdockersudosystemctlenabledocker通过查看Docker版本命令验证Docker是否安装成功。sudodocker-v如下图回显信息所示表示Docker已安装成功。1.3 配置docker镜像源修改镜像源vim/etc/docker/daemon.json{registry-mirrors:[https://docker.m.daocloud.io,https://noohub.ru,https://huecker.io,https://dockerhub.timeweb.cloud,https://dockerproxy.com,https://mirror.baidubce.com,https://docker.nju.edu.cn,https://docker.rainbond.cc,http://docker.mirrors.ustc.edu.cn,https://axvfsf7e.mirror.aliyuncs.com,https://docker.mirrors.sjtug.sjtu.edu.cn]}重新加载systemctl daemon-reload查看是否生效出现以下情况说明生效特别说明如果拉不下来镜像多试几次如果进行拉不下来它会轮训切换镜像源二、制作FreeSwitch镜像说明这里我们制作两个镜像1.开发镜像 2.生产镜像这里各有优缺点你要是用开发镜像用于生产环境我也不拦着您也没太大关系无非就是大了点区别镜像大小 开发镜像大 生产镜像小镜像包含库 开发镜像开发库 生产镜像生产库二次开发开发镜像可以 生产镜像不可以但是可以将生产的好的复制进来共同点是否可用作生产 开发镜像是 生产镜像是2.1 制作开发环境FreeSwitch镜像2.1.1 编写DockerfileFROM debian:bullseye# 1. 更换 APT 源RUNsed-is/http:\/\/deb.debian.org/http:\/\/mirrors.aliyun.com/g/etc/apt/sources.list# 2. 安装依赖并设置时区、字符集# 将所有安装操作合并为一层以减少镜像体积RUNDEBIAN_FRONTENDnoninteractiveapt-getupdateapt-getinstall-y--no-install-recommends\# --- 基础构建工具 ---build-essential cmake automake autoconf libtool-bin pkg-config gnupg2wgetlsb-releasevimgit\# --- FreeSWITCH 通用依赖 ---libssl-dev zlib1g-dev libdb-dev unixodbc-dev libncurses5-dev libexpat1-dev libgdbm-dev bison erlang-dev libtpl-dev libtiff5-dev uuid-dev\# --- 核心依赖 ---libpcre3-dev libedit-dev libsqlite3-dev libcurl4-openssl-dev nasm\# --- 核心编解码器 ---libogg-dev libspeex-dev libspeexdsp-dev\# --- 模块依赖 ---# mod_enumlibldns-dev\# mod_python3python3-dev\# mod_avlibavformat-dev libswscale-dev libavresample-dev\# mod_lualiblua5.2-dev lua-cjson\# mod_opuslibopus-dev\# mod_mariadb (合并了 libmariadb3)libmariadb-dev\# mod_pgsqllibpq-dev\# mod_sndfile (libogg-dev 已包含)libsndfile1-dev libflac-dev libvorbis-dev\# mod_shout (用于播放 MP3)libshout3-dev libmpg123-dev libmp3lame-dev\# --- 时区与字符集 ---tzdata locales\# --- 其他工具 ---nano# 3. 配置时区和字符集RUNechoAsia/Shanghai/etc/timezone\ln-sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime\echozh_CN.UTF-8 UTF-8/etc/locale.gen\locale-gen zh_CN.UTF-8# 4. 设置环境变量ENVTZAsia/Shanghai\LANGzh_CN.UTF-8\LC_ALLzh_CN.UTF-8\LANGUAGEzh_CN:zh\TERMxterm-256color\DEBIAN_FRONTENDnoninteractive# 5. 复制 FreeSWITCH 文件COPY freeswitch /usr/local/src/freeswitch# 6.配置动态链RUN ldconfig# 7. 创建工作目录WORKDIR /usr/local/# 8. 清理缓存减小镜像体积RUNapt-getclean\rm-rf/var/lib/apt/lists/* /tmp/* /var/tmp/*2.1.2 准备FreeSwitch-1.10.7源码笔者提供了网盘给大家下载网盘提供了所有的安装包包括制作好的docker包链接: https://pan.baidu.com/s/16YDn0_vmmb6bIi0oZuoL7A?pwdf7gv 提取码: f7gv 复制这段内容后打开百度网盘手机App操作更方便哦git 克隆获取gitclone https://github.com/signalwire/freeswitch.git-bv1.10.7freeswitch如果git有困难的直接取官网下载https://github.com/signalwire/freeswitch/tree/v1.10.7然后解压一下unzipfreeswitch-1.10.7.zip重命名因为Dockerfile里面写的是freeswitchmvfreeswitch-1.10.7 freeswitch2.1.3 构建镜像cd/usr/local/docker/freeswitch_builddockerbuild-tfreeswitch_build:1.10.7.构建完成2.1.4 生成开发基础镜像容器创建容器dockerrun-dit\--namefs_build\--nethost\--restartno\--privilegedtrue\--log-driverjson-file --log-opt max-size10m --log-opt max-file3\-vfs_build_date:/usr/local\freeswitch_build:1.10.7\/bin/bash逐项解析docker run是 Docker 的命令用于创建并启动一个新的容器。-d(detach): 容器将在后台运行分离模式终端不会被挂起而是立即返回到命令行。-i(interactive): 即使没有附加也保持 STDIN 打开通常与-t一起使用以获得交互式 shell。-t(tty): 分配一个伪 TTY终端用于提供交互式 shell 环境。--name fs_build: 为容器指定自定义名称fs_build方便通过名字引用容器而非 ID。--net host: 使用主机网络模式容器共享主机的网络命名空间包括所有网络接口。这提高了性能但减少了隔离性。--restart no: 设置容器的重启策略为no即当容器停止后Docker 不会自动重启它。--log-driver journald: 指定日志驱动程序为journald将容器日志发送到系统日志服务如systemd-journald便于集成系统级别的日志管理和监控。-v fs_build_date:/usr/local: 挂载卷fs_build_date到容器内的/usr/local目录。如果卷不存在Docker 会自动创建。卷允许在主机和容器之间共享数据并且在容器删除后数据仍然保留。freeswitch_build:1.10.7: 要运行的 Docker 镜像名称和标签freeswitch_build是镜像名称1.10.7表示版本号指示 Docker 使用该特定版本的 FreeSWITCH 构建镜像启动容器。/bin/bash: 容器启动时执行的命令在此例中启动 Bash shell。由于使用了-d选项shell 将在后台运行可以通过docker exec命令稍后连接到它。查看是否容器成功dockerps如图表示创建成功2.1.5 编译FreeSwitch1.进入容器dockerexec-itfs_buildbash可选添加mod_json_cdr、mod_curl、mod_shout、mod_unimrcp、mod_mariadbvim/usr/local/src/freeswitch/build/modules.conf.in#applications/mod_abstractionapplications/mod_av#applications/mod_avmd#applications/mod_bert#applications/mod_blacklist#applications/mod_callcenter#applications/mod_cidlookup#applications/mod_cluechooapplications/mod_commands applications/mod_conference applications/mod_curl#applications/mod_cvapplications/mod_db#applications/mod_directory#applications/mod_distributorapplications/mod_dptools#applications/mod_easyrouteapplications/mod_enum applications/mod_esf#applications/mod_eslapplications/mod_expr applications/mod_fifo#applications/mod_fskapplications/mod_fsv applications/mod_hash#applications/mod_hiredisapplications/mod_httapi#applications/mod_http_cache#applications/mod_ladspa#applications/mod_lcr#applications/mod_memcache#applications/mod_mongo#applications/mod_mp4#applications/mod_mp4v2#applications/mod_nibblebill#applications/mod_oreka#applications/mod_osp#applications/mod_prefix#applications/mod_rad_auth#applications/mod_redis#applications/mod_rssapplications/mod_signalwire applications/mod_sms#applications/mod_sms_flowroute#applications/mod_snapshot#applications/mod_snom#applications/mod_sonar#applications/mod_soundtouchapplications/mod_spandsp#applications/mod_spy#applications/mod_stressapplications/mod_test#applications/mod_translateapplications/mod_valet_parking#applications/mod_video_filter#applications/mod_vmdapplications/mod_voicemail#applications/mod_voicemail_ivr#asr_tts/mod_cepstral#asr_tts/mod_flite#asr_tts/mod_pocketsphinxasr_tts/mod_tts_commandline asr_tts/mod_unimrcp codecs/mod_amr#codecs/mod_amrwbcodecs/mod_b64#codecs/mod_bv#codecs/mod_clearmode#codecs/mod_codec2#codecs/mod_com_g729#codecs/mod_dahdi_codeccodecs/mod_g723_1 codecs/mod_g729 codecs/mod_h26x#codecs/mod_ilbc#codecs/mod_isac#codecs/mod_mp4vcodecs/mod_opus#codecs/mod_sangoma_codec#codecs/mod_silk#codecs/mod_siren#codecs/mod_theoradatabases/mod_mariadb databases/mod_pgsql dialplans/mod_dialplan_asterisk#dialplans/mod_dialplan_directorydialplans/mod_dialplan_xml#directories/mod_ldap#endpoints/mod_alsa#endpoints/mod_dingaling#endpoints/mod_gsmopen#endpoints/mod_h323#endpoints/mod_khompendpoints/mod_loopback#endpoints/mod_opal#endpoints/mod_portaudioendpoints/mod_rtc#endpoints/mod_rtmpendpoints/mod_skinny endpoints/mod_sofia endpoints/mod_verto#event_handlers/mod_amqpevent_handlers/mod_cdr_csv#event_handlers/mod_cdr_mongodb#event_handlers/mod_cdr_pg_csvevent_handlers/mod_cdr_sqlite#event_handlers/mod_erlang_event#event_handlers/mod_event_multicastevent_handlers/mod_event_socket#event_handlers/mod_fail2ban#event_handlers/mod_format_cdrevent_handlers/mod_json_cdr#event_handlers/mod_radius_cdr#event_handlers/mod_odbc_cdr#event_handlers/mod_kazoo#event_handlers/mod_rayo#event_handlers/mod_smpp#event_handlers/mod_snmp#event_handlers/mod_event_zmq#formats/mod_imagickformats/mod_local_stream formats/mod_native_file formats/mod_png#formats/mod_portaudio_stream#formats/mod_shell_streamformats/mod_shout formats/mod_sndfile#formats/mod_ssmlformats/mod_tone_stream#formats/mod_vlc#formats/mod_opusfile#languages/mod_basic#languages/mod_javalanguages/mod_lua#languages/mod_managed#languages/mod_perl#languages/mod_python#languages/mod_python3#languages/mod_v8#languages/mod_yamlloggers/mod_console#loggers/mod_graylog2loggers/mod_logfile loggers/mod_syslog#loggers/mod_raven#say/mod_say_desay/mod_say_en#say/mod_say_es#say/mod_say_es_ar#say/mod_say_fa#say/mod_say_fr#say/mod_say_he#say/mod_say_hr#say/mod_say_hu#say/mod_say_it#say/mod_say_ja#say/mod_say_nl#say/mod_say_pl#say/mod_say_pt#say/mod_say_ru#say/mod_say_sv#say/mod_say_th#say/mod_say_zh#timers/mod_posix_timer#timers/mod_timerfdxml_int/mod_xml_cdr#xml_int/mod_xml_curl#xml_int/mod_xml_ldap#xml_int/mod_xml_radiusxml_int/mod_xml_rpc xml_int/mod_xml_scgi#mod_freetdm|https://github.com/freeswitch/freetdm.git -b master## Experimental Modules (dont cry if theyre broken)#../../contrib/mod/xml_int/mod_xml_odbc2.进入源码目录编译cd/usr/local/src/freeswitch ./bootstrap.sh-j./configure错误一checking for spandsp 3.0... configure: error: no usable spandsp; please install spandsp3 devel package or equivalent解决方案安装相关包apt-getupdateapt-getinstall-yca-certificatescd/usr/local/srcgitclone https://github.com/freeswitch/spandsp.gitcdspandspgitcheckout-bfinecode20230705 0d2e6ac65e0e8f53d652665a743015a88bf048d4 ./bootstrap.sh-j./configuremakemakeinstall安装成功更新环境vi~/.bashrc或vi~/.bash_profile在文件末尾添加以下内容exportPKG_CONFIG_PATH/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}然后控制台执行这样当用户登录时这些命令就会自动执行从而使设置永久生效。ldconfig重新编译cd/usr/local/src/freeswitch ./bootstrap.sh-j./configure错误二checking for sofia-sip-ua 1.12.12... configure: error: no usable sofia-sip; please install sofia-sip-ua devel package or equivalent解决方案安装相关包cd/usr/local/src/gitclone https://github.com/freeswitch/sofia-sip.gitcdsofia-sip ./bootstrap.sh ./configuremakemakeinstallldconfig重新编译cd/usr/local/src/freeswitch ./bootstrap.sh-j./configuremake错误三Makefile:977: *** You must install libks to build mod_signalwire. Stop.解决方案安装相关包cd/usr/local/srcwgethttps://cmake.org/files/v3.13/cmake-3.13.3.tar.gztar-zxvfcmake-3.13.3.tar.gzcdcmake-3.13.3 ./bootstrapmakemakeinstallcd/usr/local/srcgitclone-bv1.8.3https://github.com/signalwire/libks.git /usr/local/src/libkscdlibks cmake.makemakeinstallsignalwire 做了一些迁移改动所以最新版本的仓库不适应所以要指定一下分支cd/usr/local/srcgitclone-b1.3.0https://github.com/signalwire/signalwire-c.gitcdsignalwire-c cmake.makemakeinstallvi~/.bashrcexportPKG_CONFIG_PATH/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:${PKG_CONFIG_PATH}mkdir-p/usr/lib64/pkgconfig/ ldconfigcp-r/usr/local/lib/pkgconfig/*.pc /usr/lib64/pkgconfig/cp-r/usr/local/lib/* /usr/lib64/ ldconfigcd/usr/local/src/freeswitch ./bootstrap.sh-j./configuremakemakeinstallln-sf/usr/local/freeswitch/bin/freeswitch /usr/bin/ln-sf/usr/local/freeswitch/bin/fs_cli /usr/bin/如有依赖报错,缺什么安装什么成功如图2.1.6 运行启动freeswitch-nonat-nc进入控制台fs_cli附# 后台启动freeswitch服务freeswitch-nc-rpfreeswitch-nonat-nc-rp//不检查路由穿透行加上此参数后会启动很快 freeswitch-stopfs_cli# freeswitch -help-help-- 显示本帮助信息-version-- 显示版本信息-rp-- 开启高优先级实时设置-nosql-- 不使用SQLshow channels 类的命令将不能显示结果-nonat-- 如果路由器支持uPnP或NAT-PMP则FreeSWITCH可以自动解决NAT穿越问题。如果路由器不支持则该选项可以使启动更快-stop-- 关闭 FreeSWITCH它会在run目录中查找 PID文件-nc-- 启动到后台模式没有控制台通话三十秒自动挂断解决打开/etc/freeswitch/sip_profiles下的配置文件internal.xml将外网配置注释掉重启FS2.2 制作生产环境FreeSwitch镜像在制作之前我们可以先看一下镜像大小如果你尚可接受第一步将容器提交成镜像dockercommit-a作者名-m备注信息[容器 ID][给新的镜像命名]第二步保存镜像dockersave-ofreeswitch1_10_7_build_dev.tar 新的镜像ID镜像在分享的网盘里面第三步迁移新的机器dockerload-ifreeswitch1_10_7_build_dev.tar启动完事接下来我将带领制作开发环境的2.2.1 编写Dockerfile因为我后面想做FS对接大模型所以我需要python3服务所以这里需要进入开发环境编译一下mod_python3dockerexec-itfs_buildbashcd/usr/local/src/freeswitch/src/mod/languages/mod_python3makemakeinstall如果你也有相关需求请关注Freeswitch-Python3开发编写Dockerfilemkdir-p/usr/local/docker/freeswitch_prodcd/usr/local/docker/freeswitch_prodvimDockerfileDockerfile内容如下FROM debian:bullseye RUNsed-is/http:\/\/deb.debian.org/http:\/\/mirrors.aliyun.com/g/etc/apt/sources.list RUNapt-getupdate RUNDEBIAN_FRONTENDnoninteractiveapt-get-yqinstall\libssl1.1 zlib1g libdb5.3 libncurses5 libexpat1 libgdbm6 libuuid1 libsqlite3-0 libjsoncpp24\libcurl4 libspeex1 libspeexdsp1 libpcre3 libedit2\libcom-err2 libgmp10 libgnutls30 openssl\libtpl0 unixodbc libtiff5 libldns3\python3-dev python3-pip\liblua5.2-0 lua-cjson lua-socket\libopus0\libmariadb3\libpq5\libsndfile1 libflac8 libogg0 libvorbis0a libvorbisenc2\libshout3 libmpg123-0 libmp3lame0\tzdata\locales\nanovimRUNechozh_CN.UTF-8 UTF-8/etc/locale.gen\locale-gen zh_CN.UTF-8 COPY freeswitch /usr/local/freeswitch COPY lib /usr/local/lib COPY freeswitch.py /usr/lib/python3/dist-packages/freeswitch.py RUNchmod-R777/usr/local/freeswitch\chmod-R777/usr/local/lib\ldconfig RUN pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simple websocket-client RUN ldconfig RUNln-sf/usr/local/freeswitch/bin/freeswitch /usr/local/bin/ RUNln-sf/usr/local/freeswitch/bin/fs_cli /usr/local/bin/ WORKDIR /usr/local/ ENVTZAsia/Shanghai ENVLANGzh_CN.UTF-8 ENVLC_ALLzh_CN.UTF-8 ENVLANGUAGEzh_CN:zh RUNapt-getclean\aptclean\apt-getpurge--autoremove-y\rm-rf/var/lib/apt/lists/* /tmp/* /var/tmp/*\/usr/local/src/spandsp /usr/local/src/sofia-sip2.2.2 将开发环境里面的镜像内容复制到宿主机做准备cd/usr/local/docker/freeswitch_proddockercpfs_build:/usr/local/freeswitch ./dockercpfs_build:/usr/local/lib ./dockercpfs_build:/usr/lib/python3/dist-packages/freeswitch.py ./2.2.3 构建镜像cd/usr/local/docker/freeswitch_proddockerbuild-tfreeswitch_prod:1.10.7.2.2.4 生成生产镜像容器这里看就很小了创建容器dockerrun-dit\--privilegedtrue\--namefs_prod\--nethost\--restartno\--log-driverjson-file --log-opt max-size10m --log-opt max-file3\freeswitch_prod:1.10.7\freeswitch-nonat进入容器dockerexec-itfs_prod fs_cli