docker 基于Debian镜像安装FreeSwitch1.10.7

文章目录

  • 一、安装docker
    • [1.1 卸载旧版本的Docker](#1.1 卸载旧版本的Docker)
    • [1.2 安装最新版本的docker](#1.2 安装最新版本的docker)
    • [1.3 配置docker镜像源](#1.3 配置docker镜像源)
  • 二、制作FreeSwitch镜像
    • [2.1 制作开发环境FreeSwitch镜像](#2.1 制作开发环境FreeSwitch镜像)
      • [2.1.1 编写Dockerfile](#2.1.1 编写Dockerfile)
      • [2.1.2 准备FreeSwitch-1.10.7源码](#2.1.2 准备FreeSwitch-1.10.7源码)
      • [2.1.3 构建镜像](#2.1.3 构建镜像)
      • [2.1.4 生成开发基础镜像容器](#2.1.4 生成开发基础镜像容器)
      • [2.1.5 编译FreeSwitch](#2.1.5 编译FreeSwitch)
      • [2.1.6 运行](#2.1.6 运行)
    • [2.2 制作生产环境FreeSwitch镜像](#2.2 制作生产环境FreeSwitch镜像)
      • [2.2.1 编写Dockerfile](#2.2.1 编写Dockerfile)
      • [2.2.2 将开发环境里面的镜像内容复制到宿主机做准备](#2.2.2 将开发环境里面的镜像内容复制到宿主机做准备)
      • [2.2.3 构建镜像](#2.2.3 构建镜像)
      • [2.2.4 生成生产镜像容器](#2.2.4 生成生产镜像容器)

一、安装docker

本次使用的宿主机是网友提供的centos7.9

1.1 卸载旧版本的Docker

1.执行以下命令来卸载旧版本的Docker和相关的软件包,这个命令会帮您卸载掉所有列出的与Docker相关的程序。

说明 如果系统提示说部分软件包没有安装,说明您尚未安装此软件包。

bash 复制代码
sudo yum -y remove \
docker-ce \
containerd.io \
docker-ce-rootless-extras \
docker-buildx-plugin \
docker-ce-cli \
docker-compose-plugin

2.Docker默认保存位置是/var/lib/docker/,卸载Docker时,镜像、容器、存储卷和网络不会被自动删除。如果您想要删除这些数据,需要手动删除。

3.删除Docker相关源,请执行以下命令。

bash 复制代码
 
sudo rm -f /etc/yum.repos.d/docker*.repo

1.2 安装最新版本的docker

本次安装是使用阿里云的资源

  1. 更新您的包管理工具。
bash 复制代码
 
sudo yum -y update
  1. 添加阿里云源到您的实例中,这个源包含Docker软件包,方便您使用命令来安装和更新Docker。

重要 由于网络原因,如果跳过此步可能会导致您安装Docker失败。

  • 如果您的实例网络可以访问公网。
bash 复制代码
sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 如果您的实例网络无法访问公网,使用VPC网络访问地址。
bash 复制代码
sudo wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.cloud.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's|https://mirrors.aliyun.com|http://mirrors.cloud.aliyuncs.com|g' /etc/yum.repos.d/docker-ce.repo
  1. 安装Docker社区版本,容器运行时containerd.io,以及Docker构建和Compose插件。

说明 使用Compose插件时,命令中间不用连字符,比如docker compose version。

bash 复制代码
sudo yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动Docker并设置Docker守护进程在系统启动时自动启动,这样可以确保每次系统启动时,Docker服务也会自动启动。

说明 如果您的systemctl命令执行异常,请参见在Linux实例中执行systemctl命令报错怎么办?

bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker
  1. 通过查看Docker版本命令,验证Docker是否安装成功。
bash 复制代码
sudo docker -v

如下图回显信息所示,表示Docker已安装成功。

1.3 配置docker镜像源

  1. 修改镜像源
shell 复制代码
vim /etc/docker/daemon.json
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"
]
}
  1. 重新加载
shell 复制代码
 systemctl daemon-reload
  1. 查看是否生效

出现以下情况,说明生效,特别说明,如果拉不下来镜像,多试几次(如果进行拉不下来,它会轮训切换镜像源

二、制作FreeSwitch镜像

说明

这里我们制作两个镜像:1.开发镜像 2.生产镜像

这里各有优缺点,你要是用开发镜像用于生产环境,我也不拦着您,也没太大关系,无非就是大了点

区别

  • 镜像大小 :开发镜像(大) 生产镜像(小)
  • 镜像包含库 :开发镜像(开发库) 生产镜像(生产库)
  • 二次开发:开发镜像(可以) 生产镜像(不可以,但是可以将生产的好的复制进来)

共同点

  • 是否可用作生产 :开发镜像(是) 生产镜像(是)

2.1 制作开发环境FreeSwitch镜像

2.1.1 编写Dockerfile

bash 复制代码
mkdir -p /usr/local/docker/freeswitch_build
cd /usr/local/docker/freeswitch_build
vim Dockerfile

Dockerfile内容如下

bash 复制代码
FROM debian:bullseye

RUN sed -i 's/http:\/\/deb.debian.org/http:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list

RUN apt-get update 
RUN apt update


     

RUN DEBIAN_FRONTEND=noninteractive apt-get -yq install \
# build
    build-essential cmake automake autoconf 'libtool-bin|libtool' pkg-config gnupg2 wget lsb-release vim git \
# general
    libssl-dev zlib1g-dev libdb-dev unixodbc-dev libncurses5-dev libexpat1-dev libgdbm-dev bison erlang-dev libtpl-dev libtiff5-dev uuid-dev \
# core
    libpcre3-dev libedit-dev libsqlite3-dev libcurl4-openssl-dev nasm \
# core codecs
    libogg-dev libspeex-dev libspeexdsp-dev \
# mod_enum
    libldns-dev \
# mod_python3
    python3-dev \
# mod_av
    libavformat-dev libswscale-dev libavresample-dev \
# mod_lua
    liblua5.2-dev lua-cjson \
# mod_opus
    libopus-dev \
# mod_mariadb
    libmariadb3 \
# mod_pgsql
    libpq-dev \
# mod_sndfile
    libsndfile1-dev libflac-dev libogg-dev libvorbis-dev \
# mod_shout
    libshout3-dev libmpg123-dev libmp3lame-dev
                


    
COPY freeswitch /usr/local/src/freeswitch

RUN ldconfig




WORKDIR /usr/local/

RUN apt-get clean && \
    apt clean && \
    apt-get purge --autoremove && \
    rm -rf /var/lib/apt/lists/*  && \
    rm -rf  /tmp/* /var/tmp/*

2.1.2 准备FreeSwitch-1.10.7源码

笔者提供了网盘给大家下载(网盘提供了所有的安装包,包括制作好的docker包)

bash 复制代码
链接: https://pan.baidu.com/s/16YDn0_vmmb6bIi0oZuoL7A?pwd=f7gv 提取码: f7gv 复制这段内容后打开百度网盘手机App,操作更方便哦

git 克隆获取

bash 复制代码
git clone https://github.com/signalwire/freeswitch.git -bv1.10.7 freeswitch

如果git有困难的,直接取官网下载

https://github.com/signalwire/freeswitch/tree/v1.10.7

然后解压一下

shell 复制代码
unzip freeswitch-1.10.7.zip 

重命名,因为Dockerfile里面写的是freeswitch

bash 复制代码
mv freeswitch-1.10.7 freeswitch 

2.1.3 构建镜像

shell 复制代码
cd /usr/local/docker/freeswitch_build
docker build -t freeswitch_build:1.10.7 .

构建完成

2.1.4 生成开发基础镜像容器

  1. 创建容器
shell 复制代码
docker run -dit \
  --name fs_build \
  --net host \
  --restart no \
  --log-driver journald \
  -v fs_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 命令稍后连接到它。

  1. 查看是否容器成功
bash 复制代码
docker ps

如图表示创建成功

2.1.5 编译FreeSwitch

1.进入容器
bash 复制代码
docker exec -it fs_build bash
2.进入源码目录编译
shell 复制代码
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

解决方案:安装相关包

shell 复制代码
cd /usr/local/src
git clone https://github.com/freeswitch/spandsp.git 
cd spandsp
git checkout -b finecode20230705 0d2e6ac65e0e8f53d652665a743015a88bf048d4
./bootstrap.sh -j 
./configure 
make 
make install 

安装成功

更新环境

shell 复制代码
vi ~/.bashrc

shell 复制代码
vi ~/.bash_profile

在文件末尾添加以下内容:

shell 复制代码
 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}

然后控制台执行

这样,当用户登录时,这些命令就会自动执行,从而使设置永久生效。

shell 复制代码
ldconfig

重新编译

shell 复制代码
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

解决方案:安装相关包

bash 复制代码
cd /usr/local/src/
git clone https://github.com/freeswitch/sofia-sip.git
cd sofia-sip
./bootstrap.sh
./configure
 
make
make install

ldconfig

重新编译

shell 复制代码
cd /usr/local/src/freeswitch
./bootstrap.sh -j 
./configure 
make

错误三:Makefile:977: *** You must install libks to build mod_signalwire. Stop.


解决方案:安装相关包

shell 复制代码
cd /usr/local/src
wget https://cmake.org/files/v3.13/cmake-3.13.3.tar.gz
tar -zxvf cmake-3.13.3.tar.gz
cd cmake-3.13.3 
 ./bootstrap
 make
 make install
shell 复制代码
cd /usr/local/src
git clone -bv1.8.3 https://github.com/signalwire/libks.git /usr/local/src/libks
cd libks
cmake .
make
make install

signalwire 做了一些迁移改动,所以最新版本的仓库不适应,所以要指定一下分支

shell 复制代码
cd /usr/local/src
git clone  -b1.3.0  https://github.com/signalwire/signalwire-c.git
cd signalwire-c
cmake .
make
make install
shell 复制代码
vi ~/.bashrc
shell 复制代码
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:${PKG_CONFIG_PATH}
shell 复制代码
ldconfig
ln -sf /usr/local/lib64/pkgconfig/signalwire_client.pc /usr/lib64/pkgconfig/signalwire_client.pc

cp -r /usr/local/lib/pkgconfig/*.pc /usr/lib64/pkgconfig/
cp -r /usr/local/lib/* /usr/lib64/
ldconfig
shell 复制代码
cd /usr/local/src/freeswitch
./bootstrap.sh -j 
./configure 
make && make install
ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/
ln -sf /usr/local/freeswitch/bin/fs_cli /usr/bin/

如有依赖报错,缺什么安装什么

成功如图

2.1.6 运行

启动

shell 复制代码
freeswitch -nonat -nc 

进入控制台

shell 复制代码
fs_cli

bash 复制代码
# 后台启动freeswitch服务
freeswitch -nc -rp
freeswitch -nonat -nc -rp  //不检查路由穿透行,加上此参数后会启动很快
freeswitch -stop
fs_cli
# freeswitch -help
	-help                  -- 显示本帮助信息
	-version               -- 显示版本信息
	-rp                    -- 开启高优先级(实时)设置
	-nosql                 -- 不使用SQL,show channels 类的命令将不能显示结果
	-nonat                 -- 如果路由器支持uPnP或NAT-PMP,则FreeSWITCH可以自动解决NAT穿越问题。如果路由器不支持,则该选项可以使启动更快
	-stop                  -- 关闭 FreeSWITCH,它会在run目录中查找 PID文件
	-nc                    -- 启动到后台模式,没有控制台

通话三十秒自动挂断

解决:打开/etc/freeswitch/sip_profiles下的配置文件internal.xml,将外网配置注释掉,重启FS;

2.2 制作生产环境FreeSwitch镜像

在制作之前我们可以先看一下镜像大小

如果你尚可接受

第一步将容器提交成镜像

bash 复制代码
 docker commit -a 作者名 -m 备注信息 [容器 ID] [给新的镜像命名]

第二步:保存镜像

bash 复制代码
docker save -o freeswitch1_10_7_build_dev.tar 新的镜像ID

镜像在分享的网盘里面

第三步,迁移新的机器

bash 复制代码
docker load -i  freeswitch1_10_7_build_dev.tar

启动完事

接下来,我将带领制作开发环境的

2.2.1 编写Dockerfile

因为我后面想做FS对接大模型,所以我需要python3服务

所以这里需要进入开发环境编译一下mod_python3

bash 复制代码
docker exec -it fs_build bash
bash 复制代码
 cd /usr/local/src/freeswitch/src/mod/languages/mod_python3
make
make install

如果你也有相关需求,请关注
Freeswitch-Python3开发

编写Dockerfile

bash 复制代码
mkdir -p /usr/local/docker/freeswitch_prod
cd /usr/local/docker/freeswitch_prod
vim Dockerfile

Dockerfile内容如下

shell 复制代码
FROM debian:bullseye

RUN sed -i 's/http:\/\/deb.debian.org/http:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list

RUN apt-get update 
RUN apt update


     

RUN DEBIAN_FRONTEND=noninteractive apt-get -yq install \
    # general 类软件包
    libssl1.1 zlib1g libdb5.3 libncurses5 libexpat1 libgdbm6 libuuid1 libsqlite3-0 libjsoncpp24 \
    # core 类软件包                 
    libcurl4 libspeex1 libspeexdsp1 libpcre3 libedit2 \
    # 额外包
    libcom-err2  libgmp10  libgnutls30  openssl \
    # 安装 core codecs 类软件包
    libtpl0 unixodbc libtiff5 libldns3 \         
    # mod_python3 类软件包        
    python3-dev python3-pip \      
    # mod_av 类软件包            
    #libavformat56 libswscale5 libavresample4     \ 
    # mod_lua 类软件包     
    liblua5.2-0 lua-cjson lua-socket \ 
    # mod_opus 类软件包                 
    libopus0  \
    # mod_mariadb 类软件包  
    libmariadb3  \
    # mod_pgsql 类软件包 
    libpq5 \
     # mod_sndfile 类软件包                       
    libsndfile1 libflac8 libogg0 libvorbis0a libvorbisenc2  \
    # mod_shout 类软件包 
    libshout3 libmpg123-0 libmp3lame0   \                
    #安装时区包
    tzdata 

    
COPY freeswitch /usr/local/freeswitch
COPY lib /usr/local/lib


COPY freeswitch.py /usr/lib/python3/dist-packages/freeswitch.py



RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple websocket-client

RUN ldconfig




# 设置软链接
RUN ln -sf /usr/local/freeswitch/bin/freeswitch /usr/local/bin/
RUN ln -sf /usr/local/freeswitch/bin/fs_cli /usr/local/bin/

WORKDIR /usr/local/


# 设置时区为北京时间
ENV TZ=Asia/Shanghai

RUN apt-get clean && \
    apt clean && \
    apt-get purge --autoremove && \
    rm -rf /var/lib/apt/lists/*  && \
    rm -rf /usr/local/src/spandsp  /usr/local/src/sofia-sip  /tmp/* /var/tmp/*

2.2.2 将开发环境里面的镜像内容复制到宿主机做准备

bash 复制代码
cd /usr/local/docker/freeswitch_prod
docker cp fs_build:/usr/local/freeswitch ./
docker cp fs_build:/usr/local/lib ./
docker cp fs_build:/usr/lib/python3/dist-packages/freeswitch.py ./

2.2.3 构建镜像

shell 复制代码
cd /usr/local/docker/freeswitch_prod
docker build -t freeswitch_prod:1.10.7 .

2.2.4 生成生产镜像容器

这里看就很小了

创建容器

shell 复制代码
docker run -dit \
  --name fs_prod \
  --net host \
  --restart no \
  --log-driver journald \
   freeswitch_prod:1.10.7 \
  freeswitch  -nonat

进入容器

bash 复制代码
docker exec -it fs_prod fs_cli
相关推荐
IvanCodes1 小时前
一、Docker:一场颠覆应用部署与运维的容器革命
docker·容器
栗子~~2 小时前
Milvus docker-compose 部署
docker·容器·milvus
椰汁菠萝2 小时前
ubuntu下免sudo执行docker
ubuntu·docker·免sudo
kfepiza3 小时前
Debian-10-standard用`networking`服务的`/etc/network/interfaces`配置文件设置多网卡多IPv6
linux·debian
没有名字的小羊3 小时前
2.安装Docker
运维·docker·容器
xiezhr3 小时前
50 个常用 Docker 命令
运维·docker·容器
退役小学生呀9 天前
三、kubectl使用详解
云原生·容器·kubernetes·k8s
API开发10 天前
苹果芯片macOS安装版Homebrew(亲测) ,一键安装node、python、vscode等,比绿色软件还干净、无污染
vscode·python·docker·nodejs·openssl·brew·homebrew
程序员小潘10 天前
Kubernetes多容器Pod实战
云原生·容器·kubernetes
进击的码码码码N10 天前
Docker 镜像加速
运维·docker·容器