操作系统 :CentOS 7.6_x64     
FreeSWITCH版本 :1.10.9
Docker版本:23.0.6
 
FreeSWITCH这种比较复杂的系统,使用容器部署是比较方便的,今天记录下CentOS 7环境下使用docker构建FreeSWITCH编译环境及打包发布的过程。

一、资源准备

1、安装docker环境

1)移除旧版本(可选)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
2)安装依赖项
yum install -y yum-utils device-mapper-persistent-data lvm2
3)添加yum源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4)查看可用docker版本
yum list docker-ce --showduplicates | sort -r

5)安装docker服务

指定版本安装(这里指定版本安装):
yum install docker-ce-cli-23.0.6 docker-ce-23.0.6  containerd.io

查看docker版本信息:

docker version

6)配置docker服务

启动docker服务: systemctl start docker
配置docker服务开机启动: systemctl enable docker
查看docker服务状态:systemctl status docker

2、下载FreeSWITCH源代码

可从如下地址获取:

也可通过wget获取:

wget https://files.freeswitch.org/releases/freeswitch/freeswitch-1.10.9.-release.tar.gz

3、下载FreeSWITCH依赖代码

主要依赖以下代码库:
 
可通过wget或git获取:
wget https://github.com/signalwire/libks/archive/refs/tags/v1.8.2.tar.gz
wget https://github.com/freeswitch/sofia-sip/archive/refs/tags/v1.13.14.tar.gz
git clone https://github.com/freeswitch/spandsp.git
wget https://github.com/signalwire/signalwire-c/archive/refs/tags/1.3.0.tar.gz

二、制作base包

1、docker基础镜像选型

这里使用Debian 11 (bullseye)作为基础镜像:
docker image pull debian:bullseye

2、在docker内编译FreeSWITCH

1)启动debian容器
docker run --name debian --network host -t -d debian:bullseye 

2)复制源码到debian容器

docker cp freeswitch-1.10.9.-release.tar.gz debian:/usr/src/
docker cp fs1.10.9-deps debian:/usr/src/

3)更新apt源(可选)

这里使用清华的源来加速安装:https://mirrors.tuna.tsinghua.edu.cn/help/debian/

更新apt源:
>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free" >> /etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list cat /etc/apt/sources.list apt update

4)安装编译依赖项

apt install gcc g++ autoconf automake make cmake yasm uuid-dev libvpx-dev unixodbc-dev ncurses-dev zlib1g-dev  libjpeg-dev libtiff-dev liblua5.1-0-dev  libsqlite3-dev libsndfile-dev libavformat-dev libswscale-dev  libcurl4-openssl-dev  libpcre3-dev libspeex-dev libspeexdsp-dev libedit-dev libtool libldns-dev  libopus-dev  libpq-dev
安装libks:
tar zxvf libks-1.8.2.tar.gz
cd libks-1.8.2
cmake .
make
make install
安装sofia-sip:
tar zxvf sofia-sip-1.13.14.tar.gz
cd sofia-sip-1.13.14 ./bootstrap.sh
./configure
make
make install
安装spandsp:
cd spandsp/
./bootstrap.sh
./configure
make
make install
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}
echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}" >> /etc/profile ldconfig
安装signalwire-c:
tar zxvf signalwire-c-1.3.0.tar.gz
cd signalwire-c-1.3.0
cmake .
make
make install
5)编译FreeSWITCH
大致步骤:
./rebootstrap.sh && ./configure && make
6)安装及运行FreeSWITCH(可选)
执行make install安装FreeSWITCH

运行FreeSWITCH:

/usr/local/freeswitch/bin/freeswitch -nonat

3、导出容器快照作为基础编译镜像

1)移除FreeSWITCH源代码及依赖项
rm -rf /usr/src/freeswitch-1.10.9.-release*
rm -rf /usr/src/fs1.10.9-deps/
2)导出debian容器快照
docker export -o debian_fs_builder.tar 164f8b171a95

3)给导出的容器快照添加标签

docker import debian_fs_builder.tar
docker image tag 91f9e45241ed fs:base

4)导出基础编译镜像

docker image save fs:base -o fs-base.tar
tar zcvf fs-base.tar.gz fs-base.tar

预编译的基础镜像(fs-base.tar.gz)可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20230617 获取。 

4、测试基础编译镜像

 1)导入镜像
docker load -i fs-base.tar

2)启动容器

docker run --name fs --network host -t -d fs:base /bin/bash

3)编译及运行FreeeSWITCH

仅复制FreeSWITCH源码过去即可编译及安装,演示视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2023061701 获取。 

三、自动构建及打包

1、准备源码

源码文件:freeswitch-1.10.9.-release.tar.gz

2、编写DockerFile及entrypoint

完整代码可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20230617 获取。 

3、构建docker镜像

自动构建脚本如下:
#! /bin/bash

tar zxvf freeswitch-1.10.9.-release.tar.gz
docker build -t fs:1.0.0 .
docker image save fs:1.0.0 -o fs_v1.0.0.tar
tar zcvf fs_v1.0.0.tar.gz fs_v1.0.0.tar
rm -rf fs_v1.0.0.tar

4、发布fs镜像及启动

tar zxvf fs_v1.0.0.tar.gz
docker load -i fs_v1.0.0.tar
./run.sh

使用基础编译镜像自动构建版本及运行容器的演示视频,可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2023061702 获取。 

四、资源下载

本文涉及源码和文件,可以从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20230617 获取。 

docker构建FreeSWITCH编译环境及打包的更多相关文章

  1. Docker构建Python Web环境

    出于寻找Docker对Python相关项目部署的学习,找到腾讯课堂NEXT公开课中[Docker构建Python Web环境]的课程,本文对其进行内容梳理及知识点汇总. 该课程总计6小时左右,是个适合 ...

  2. selenium结合docker构建分布式测试环境

    selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...

  3. selenium 结合 docker 构建分布式测试环境 (初学者视角)

    前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结. 1.记录下学习中遇到的坑,当做学习笔记.2.有前人路过看到文章中比较落后的做法,请务必一定要指教.(因为是初学者视角,很多东西只是走通而已 ...

  4. 【转】Ant学习笔记——自己构建Ant编译环境

    自从年初开始用NetBeans6.0,才接触到Ant. 这是今年6月份的一篇Ant学习笔记.安装 1.下载并构建环境.   去官网下载src包和bin包.解压缩它们到同一目录,运行build.bat, ...

  5. 使用docker创建aosp编译环境

    如果只需要编译一个版本的aosp,那么如果在主机上架建环境即可,可写的程序如果要在各个aosp版本中编译,那在主机上架建多个aosp编译环境可以会比较麻烦,github上找到一个openstf用doc ...

  6. Win7系统下,docker构建nginx+php7环境实践

    前面两章介绍的是Windows系统下如何安装和配置docker,主要原因在于,公司大多人数用的是Windows环境,想通过在Windows环境上,通过docker,构建一个公用的配置. 首先要说明的是 ...

  7. 用 Docker 构建 MySQL 主从环境

    开源Linux 一个执着于技术的公众号 前言 本篇文章记录使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境.如果你严格按照文中的步骤进 ...

  8. sublime构建各个编译环境

    一 java运行环境配置: 打开sublime选择Tool 到 Building System 选择new building System 输入 {"shell_cmd": &qu ...

  9. 使用kafka和zookeeper 构建分布式编译环境

    1:在每台机器上安装jdk, 脚本代码如下: 每一个机器上下载jdk,zookeeper,kafka 链接:https://www.oracle.com/technetwork/java/javase ...

  10. 基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)

    这是一篇之前写的笔记,主要记录了使用openvswitch + Docker 等进行一个小型的SDN网络搭建的操作步骤.由于 之前临时有其他任务,耽搁了一下,最近开始重新整理,并计划开发一个简单的Py ...

随机推荐

  1. 团队如何选择合适的Git分支策略?

    现代软件开发过程中要实现高效的团队协作,需要使用代码分支管理工具实现代码的共享.追溯.回滚及维护等功能.目前流行的代码管理工具,包括CVS,SVN,Git,Mercurial等. 相比CVS和SVN的 ...

  2. telnet命令安装

    1.[root@pld3bomdb01 ~]# yum install telnet-server 2.[root@pld3bomdb01 ~]# rpm -qa telnet* telnet-ser ...

  3. C#模拟C++模板特化对类型的值的支持

    概述 C++的模板相比于C#,有很多地方都更加的灵活(虽然代价是降低了编译速度),比如C++支持变长参数模板.支持枚举.int等类型的值作为模板参数. C++支持枚举.int等类型的值作为模板参数,为 ...

  4. 明解STM32—GPIO应用设计篇之API函数及配置使用技巧

    一.前言 本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理. 了解过STM32的GPIO相关 ...

  5. ts中接口

    前言:ts定义接口的任意一个属性 interface IPerson { name: string age: number family?: any[] // Error,因为不是任意类型的子集 [p ...

  6. 【必知必会的MySQL知识】⑤DQL语言

    目录 一.前言 二.基础查询 2.1 语法 2.2 实践操作 三.条件查询 3.1 语法 3.2 where 语句操作符 3.3 实践操作 四.排序查询 4.1 语法格式 4.2 实践操作 五.分组查 ...

  7. ReactHub:我用 ChatGPT 搞了一个 React 的资源导航网站,谁有我用心啊!

    大家好,我是DOM哥. 图谱年年有,今年我来盘! 之前已经盘完了 Vue 的技术图谱,今天来盘 React 的. 我用 ChatGPT 开发了一个 React 的资源导航网站. 不管你是资深 Reac ...

  8. Linux系统下CUDA和cuDNN环境配置

    本人配置环境:linux服务器,ubantu18,显卡驱动11.0,安装CUDA11.0和cuDNN8.2.1. 一.安装CUDA11.0 1.先多找几篇博客,了解大概的流程,避免踩坑. 2.官网下载 ...

  9. 2022-05-06:给你一个整数数组 arr,请你将该数组分隔为长度最多为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。 返回将数组分隔变换后能够得到的元

    2022-05-06:给你一个整数数组 arr,请你将该数组分隔为长度最多为 k 的一些(连续)子数组.分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值. 返回将数组分隔变换后能够得到的元 ...

  10. vue全家桶进阶之路26:Vue.js 3.0与Vue.js 2.x 的比较和注意事项

    Vue.js 3.0 是 Vue.js 框架的最新版本,于 2020 年 9 月正式发布.Vue.js 3.0 主要的改进和新特性包括: 更好的性能:Vue.js 3.0 使用了更快的虚拟 DOM 实 ...