You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeSWITCH配置SQLite替代PostgreSQL及FusionPBX数据库迁移咨询

FreeSWITCH 配置SQLite替代PostgreSQL作为内部数据库

完全可行。FreeSWITCH核心原生就内置了SQLite驱动支持,不需要额外编译安装第三方模块,本身绝大多数内部模块的默认存储选项就包含SQLite,相比PostgreSQL更轻量,没有额外服务占用,适合单机小规模部署场景。

具体配置步骤如下:

  • 先停服避免配置写入冲突:systemctl stop freeswitch
  • 修改核心数据库配置,打开/etc/freeswitch/autoload_configs/switch.conf.xml,找到核心数据库配置段,替换原PostgreSQL的DSN配置为SQLite路径:
<!-- 注释原有PostgreSQL配置
<param name="core-db-dsn" value="pgsql://host=127.0.0.1 dbname=freeswitch user=freeswitch password=你的密码 options='-c client_min_messages=NOTICE' application_name='freeswitch'" />
-->
<!-- 新增SQLite配置,数据库文件建议放在FreeSWITCH默认的db目录下 -->
<param name="core-db-dsn" value="sqlite:///var/lib/freeswitch/db/core.db" />
  • 逐个修改各独立模块的数据库配置,所有需要调整的配置文件都存放在/etc/freeswitch/autoload_configs/目录下:
    • callcenter.conf.xml:将队列存储DSN修改为sqlite:///var/lib/freeswitch/db/callcenter.db
    • voicemail.conf.xml:将语音邮件存储DSN修改为sqlite:///var/lib/freeswitch/db/voicemail.db
    • sofia.conf.xml:将SIP注册信息存储DSN修改为sqlite:///var/lib/freeswitch/db/sofia_reg.db

注意:所有配置里的数据库路径要保证freeswitch用户有完整读写权限,不要放在/root等无权访问的目录下

  • 修正目录权限后启动服务验证:chown -R freeswitch:freeswitch /var/lib/freeswitch/db/ && systemctl start freeswitch,进入fs_cli执行status命令,无数据库连接报错即为配置生效。

FusionPBX PostgreSQL迁移SQLite实施方案

前置提醒:SQLite是文件型数据库,不支持多进程高并发写入,仅适合单机部署、并发呼叫低于50路的场景,高并发生产环境不建议做此迁移

具体迁移步骤如下:

  1. 停全栈服务避免迁移过程中有新数据写入导致不一致:
    systemctl stop nginx php-fpm freeswitch
    
  2. 全量备份原有PostgreSQL数据,避免迁移失败丢失配置:
    pg_dump fusionpbx > /root/fusionpbx_pg_backup.sql
    
  3. 安装PHP对应的SQLite扩展,根据自身系统版本执行对应命令:
    • Debian/Ubuntu:apt install php-sqlite3(注意匹配当前运行的PHP版本号)
    • CentOS/RHEL:dnf install php-pdo_sqlite php-sqlite3
  4. 创建SQLite数据库文件并配置基础权限:
    touch /var/lib/freeswitch/db/fusionpbx.db
    chown www-data:freeswitch /var/lib/freeswitch/db/fusionpbx.db
    chmod 660 /var/lib/freeswitch/db/fusionpbx.db
    
  5. 完成结构同步与数据导入:

    直接导出PostgreSQL的SQL语句无法直接导入SQLite,需要提前过滤PostgreSQL专属语法:将SERIAL字段类型替换为INTEGER PRIMARY KEY AUTOINCREMENT、将NOW()函数替换为标准SQL的CURRENT_TIMESTAMP、删除所有SQL语句里的public. schema前缀。可以先执行FusionPBX自带的结构初始化脚本在SQLite库中生成所有表,再逐表导入数据,导完核对核心表(分机、拨号方案、用户、通话记录、录音配置)的记录条数和原PostgreSQL库完全一致,避免丢数据。

  6. 修改FusionPBX数据库连接配置,打开/etc/fusionpbx/config.php,替换原有PostgreSQL连接段为SQLite配置:
    // 注释原有PostgreSQL配置
    // $db['type'] = 'pgsql';
    // $db['host'] = '127.0.0.1';
    // $db['name'] = 'fusionpbx';
    // $db['user'] = 'fusionpbx';
    // $db['pass'] = '你的PG密码';
    // 新增SQLite配置
    $db['type'] = 'sqlite';
    $db['path'] = '/var/lib/freeswitch/db/fusionpbx.db';
    
  7. 再次校验所有db文件的权限,保证Web进程和FreeSWITCH进程都有读写权限,之后启动全栈服务验证:
    systemctl start nginx php-fpm freeswitch
    
    登录FusionPBX后台检查分机注册、呼叫路由、录音、语音邮件功能是否正常,查看系统日志无数据库连接报错即为迁移完成。

常见踩坑说明

  • 权限问题占迁移报错的80%以上:SQLite靠文件系统权限控制访问,必须保证www-data(Web进程用户)和freeswitch(通话进程用户)对db文件及上级目录都有读写权限,否则会出现后台能打开但呼叫失败、或者呼叫正常但后台打不开的问题
  • 迁移后如果出现SIP注册异常、呼叫路由不生效,可以先停服务删除/var/lib/freeswitch/db/目录下除了fusionpbx.db之外的其他db文件,重启FreeSWITCH会自动重建对应表结构
  • SQLite不支持网络访问,也不支持多节点同时挂载同一个db文件写入,多机集群场景不要使用

内容的提问来源于stack exchange,提问作者TSG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:25:34