Ubuntu 18.04.4 LTS 下 Flexisip 编译安装与配置填坑实录
发布时间:2026/10/18 21:26:18 锦皓数字建站

1. 为什么要在 Ubuntu 18.04.4 LTS 上折腾 Flexisip先把背景交代清楚。Flexisip 是 Linphone 生态里的服务端组件干的活儿包括 SIP 代理、注册服务器、推送网关、会议服务器等。如果你要做一套自建的实时通信系统客户端用 Linphone服务端基本绕不开 Flexisip。它不像某些开箱即用的商业方案那样点几下就完事配置项散落在多个配置文件里版本之间还有差异所以填坑这个词用得非常准确。我这次的环境是 Ubuntu 18.04.4 LTS选这个版本不是因为它新恰恰是因为它旧得刚好——系统自带的依赖库版本和 Flexisip 的编译要求比较匹配能省掉一堆手动编译依赖的麻烦。但即便如此从安装到跑通我还是踩了不少坑这篇就把整个过程和配置细节完整记录下来。这篇文章适合谁看如果你正在自建 SIP 通信服务或者想用 Linphone 搭一套内部通话系统又或者你已经在装 Flexisip 但卡在某个配置报错上那这篇内容应该能帮到你。我会从依赖安装讲到配置文件逐项拆解再到实际验证和排错尽量做到照着做就能跑起来。需要提前说明的是Flexisip 的版本迭代比较快不同版本配置文件的结构和参数名会有出入。我下面讲的是基于当时稳定版本的实践你在操作时如果发现参数对不上先确认版本号再对照官方仓库的变更记录不要硬套。2. 安装前的环境准备与依赖梳理2.1 系统基础环境确认Ubuntu 18.04.4 LTS 是 18.04 系列的一个点版本内核和基础库都比较稳定。装 Flexisip 之前先做几件基础的事。第一更新软件源并升级已有包。这一步不是走形式因为 Flexisip 依赖的一些库如果版本太旧编译时会直接报错。sudo apt update sudo apt upgrade -y第二确认系统架构。Flexisip 在 x86_64 上支持最好如果你用的是 ARM 平台编译参数和依赖会有差异。uname -m第三检查磁盘空间。Flexisip 本身不大但编译过程中产生的中间文件和依赖包会占不少空间建议根分区至少留 10GB 以上。df -h /提示如果你是在虚拟机里操作建议先打一个快照。配置过程中改动的文件比较多出问题回滚比逐个排查快得多。2.2 依赖包安装的取舍逻辑Flexisip 的依赖分两类编译期依赖和运行期依赖。很多人图省事直接装一堆结果版本冲突反而更难排查。我的做法是按需安装先装核心的编译报错缺什么再补什么。核心依赖包括CMake构建工具Flexisip 用 CMake 管理编译流程C 编译器g 或 clang建议用系统自带的 gpkg-config帮助 CMake 找到各个库的位置libssl-devTLS 支持SIP over TLS 必须libsrtp2-devSRTP 加密媒体流libavcodec-dev / libavutil-dev媒体处理相关libsqlite3-dev本地数据库支持libboost-devBoost 库Flexisip 大量使用安装命令sudo apt install -y cmake g pkg-config libssl-dev libsrtp2-dev \ libavcodec-dev libavutil-dev libsqlite3-dev libboost-all-dev这里有个坑libboost-all-dev装的东西很多编译时间长。如果你明确知道只需要某几个 Boost 组件可以只装对应的包比如libboost-system-dev、libboost-thread-dev。但第一次装的话全装省心。还有一个容易忽略的依赖是liblinphone-dev。Flexisip 和 Linphone 共享一些底层库如果系统里没有编译时会提示找不到某些头文件。这个包在 Ubuntu 18.04 的默认源里可能没有需要从 Linphone 的官方仓库获取。2.3 获取源码的正确姿势Flexisip 的源码托管在官方 Git 仓库。克隆的时候注意两点一是用--recursive拉取子模块二是选对分支。git clone --recursive https://gitlab.linphone.org/BC/public/flexisip.git cd flexisip git submodule update --init --recursive如果你网络环境拉取子模块比较慢可以分步来先克隆主仓库再单独初始化子模块。子模块里主要是 mediastreamer2 等依赖缺了编译不过。注意不要直接下载 zip 包解压那样拿不到子模块内容编译时会在 CMake 配置阶段就失败。3. 编译与安装过程中的关键细节3.1 CMake 配置参数怎么选进入源码目录后先建一个独立的构建目录保持源码目录干净方便出问题重新来。mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX/usr/local -DCMAKE_BUILD_TYPERelease几个关键参数说明CMAKE_INSTALL_PREFIX安装路径默认/usr/local这样不会和系统包管理器冲突CMAKE_BUILD_TYPERelease 会开优化Debug 方便排查问题但体积大、速度慢-DENABLE_PUSH_NOTIFICATIONON如果需要推送功能就打开不需要可以关掉减少依赖CMake 配置阶段如果报错大概率是某个依赖没找到。仔细看报错信息里提到的库名回去补装对应的-dev包即可。常见的报错和对应解决方式我整理了一下报错关键词缺失的包解决方式Could NOT find OpenSSLlibssl-devsudo apt install libssl-devCould NOT find SRTPlibsrtp2-devsudo apt install libsrtp2-devCould NOT find SQLite3libsqlite3-devsudo apt install libsqlite3-devBoost not foundlibboost-all-devsudo apt install libboost-all-devmediastreamer2 not found子模块未拉取git submodule update --init --recursive3.2 编译阶段的资源控制配置通过后开始编译make -j$(nproc)-j$(nproc)是用满所有 CPU 核心并行编译速度快但吃内存。如果你的机器内存小于 4GB建议把并行数降下来比如make -j2否则可能因为内存不足被系统杀掉进程报错信息还很不直观。编译时间取决于机器性能一般十几分钟到半小时不等。编译过程中如果出现某个源文件报错先看是不是 C 标准的问题。Flexisip 对 C 标准有要求Ubuntu 18.04 自带的 g 版本一般是够的但如果报error: xxx is not a member of std这类错可能是标准没设对可以在 CMake 里加-DCMAKE_CXX_STANDARD14。编译完成后安装sudo make install sudo ldconfigldconfig这一步别省它刷新动态链接库缓存不执行的话运行时会提示找不到.so文件。3.3 安装后的目录结构确认安装完成后几个关键路径需要确认可执行文件/usr/local/bin/flexisip配置文件/usr/local/etc/flexisip/库文件/usr/local/lib/which flexisip ls /usr/local/etc/flexisip/如果which flexisip找不到说明/usr/local/bin不在 PATH 里手动加一下或者用绝对路径调用。4. 配置文件逐项拆解与填坑实录4.1 配置文件整体结构Flexisip 的配置目录下通常有这几个文件flexisip.conf主配置文件flexisip.conf.sample示例配置参考用module::*相关配置各模块的独立配置主配置文件采用类似 INI 的格式分模块组织。理解这个结构很重要因为很多参数是挂在特定模块下的放错位置就不生效。4.2 全局配置段的坑全局段主要设置监听地址、传输协议、日志级别等。[global] transportssip:*:5060;transportudp transportssips:*:5061;transporttls log-levelinfo这里第一个坑是transports 的写法。多个传输方式要写成多行每行一个transports不能写在一行用逗号分隔。我一开始图省事写成一行结果只生效了最后一个排查了半天。第二个坑是端口冲突。5060 是 SIP 标准端口如果系统里已经有其他 SIP 服务在跑会绑定失败。用netstat -tulnp | grep 5060确认端口占用情况。第三个坑是TLS 证书路径。如果启用了sips必须配置证书[tls] certificate/usr/local/etc/flexisip/certs/server.crt certificate-key/usr/local/etc/flexisip/certs/server.key证书文件权限要注意私钥文件不能让所有用户可读否则 Flexisip 启动时会拒绝加载。4.3 注册模块配置要点注册模块负责处理客户端的注册请求是 SIP 服务的基础。[module::Registrar] enabledtrue reg-domainsexample.com max-contacts-by-aor10reg-domains是注册域名客户端注册时用的域名必须和这里匹配否则会被拒绝。这个域名不一定是真实可解析的但客户端配置里填的必须一致。max-contacts-by-aor限制同一个账号最多能注册多少个终端。默认值可能偏小如果你有多个设备同时在线需要调大。实操心得调试注册问题时把日志级别临时调到debug能看到完整的注册请求和响应内容比猜快得多。调完记得改回info不然日志文件涨得飞快。4.4 代理模块与路由规则代理模块负责转发 SIP 请求路由规则决定了请求往哪里走。[module::Forward] enabledtrue [module::Router] enabledtrue路由配置里最容易出问题的是域名解析。如果目标域名无法解析请求会直接失败。可以在/etc/hosts里加静态映射做测试避免依赖 DNS。另一个坑是NAT 环境下的地址处理。如果服务端在 NAT 后面SIP 消息里的地址需要做转换否则客户端收到的地址不可达。相关配置在[module::NatHelper]段需要根据实际网络环境调整。4.5 推送网关配置的注意事项如果需要给移动端做推送推送模块的配置不能少。这部分涉及的参数比较多而且和具体的推送服务相关。[module::PushNotification] enabledtrue推送配置的核心是超时时间和重试策略。超时太短会导致推送还没到就判定失败太长又会拖慢整体响应。一般建议超时设在 10 到 30 秒之间根据实际网络质量调整。5. 启动验证与常见问题排查5.1 启动方式与日志查看前台启动方便看日志flexisip --verbose后台启动flexisip -d日志默认输出到 syslog也可以配置输出到文件。排查问题时前台启动加--verbose是最直接的方式。5.2 常见问题速查表现象可能原因排查方向启动即退出配置文件语法错误检查 conf 文件括号、等号端口绑定失败端口被占用netstat查占用进程客户端注册失败域名不匹配核对 reg-domains 和客户端配置通话无声音媒体端口未开放检查防火墙和 RTP 端口范围TLS 握手失败证书问题检查证书路径和权限编译报错找不到库依赖缺失按报错补装对应 dev 包5.3 几个我踩过的具体坑坑一配置文件改了不生效。Flexisip 启动时读取配置运行中修改不会热加载。改完必须重启服务。我一度以为改了没用其实是没重启。坑二日志级别设太高导致性能下降。debug级别会记录大量信息生产环境千万别开。测试完记得改回去。坑三防火墙没放行 RTP 端口。SIP 信令走 5060/5061但媒体流走的是另一段端口范围。只放行 SIP 端口通话能建立但没声音。RTP 端口范围在配置里可以指定记得同步放行。坑四时间不同步导致注册失败。SIP 协议对时间敏感服务器和客户端时间差太大注册会被拒绝。用timedatectl确认时间同步状态。坑五SELinux 或 AppArmor 拦截。Ubuntu 默认 AppArmor 可能对 Flexisip 的网络操作有限制检查/var/log/syslog里有没有相关拒绝记录。6. 配置优化与后续扩展思路6.1 性能相关的几个调优点跑通之后如果要做压力测试或者上生产有几个参数值得调线程池大小根据 CPU 核心数调整不是越大越好连接超时默认值偏保守可以适当缩短加快失败检测日志缓冲高并发下日志写入可能成为瓶颈考虑异步日志6.2 多模块组合的配置思路Flexisip 的模块可以按需组合。比如只做注册服务器就只开 Registrar 模块要做完整代理就 Registrar Forward Router 一起开。模块之间的依赖关系要理清楚开了 Router 但没开 Forward路由规则可能不生效。6.3 版本升级时的配置迁移Flexisip 升级时配置文件格式可能变化。升级前先备份现有配置升级后对照新版本的示例配置逐项核对。不要直接覆盖也不要假设旧配置完全兼容。我在实际使用中的体会是Flexisip 的配置难点不在于单个参数有多复杂而在于参数之间的关联和版本差异。把配置文件的结构理解透知道每个模块负责什么排查问题时就能快速定位到对应的段。另外日志是你最好的朋友遇到问题先看日志比盲目改配置高效得多。最后再分享一个小技巧把每次改动的配置和对应的现象记下来形成自己的排查笔记下次遇到类似问题能省很多时间。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。