目录

  • 系统架构
  • 备份内容
  • 在当前服务器执行备份
  • 在新服务器部署
  • 常见问题

  • 系统架构

    当前系统由两部分组成:

    1. Docker 容器部分

    容器名 镜像 端口 用途
    db postgres:15-alpine 5432 PostgreSQL 数据库
    redis redis:7-alpine 6379 Redis 缓存
    app ai-call-tongzhi-app 8000 FastAPI Web 应用
    celery_worker ai-call-tongzhi-app - Celery 异步任务处理

    2. 宿主机部分

    组件 版本 用途
    FreeSWITCH 1.10.12 SIP 呼叫服务器
    ESL TCP 代理 Python 脚本 Docker 内部连接 FreeSWITCH

    备份内容

    执行备份后会生成以下文件:

    backups/20260621/
    ├── install_offline.sh          # 一键安装脚本(包含Docker和FreeSWITCH)
    ├── start.sh                    # 启动脚本
    ├── stop.sh                     # 停止脚本
    ├── docker-compose.yml          # Docker 配置
    ├── Dockerfile                  # 应用镜像构建文件
    ├── requirements.txt            # Python 依赖
    ├── .env                        # 环境变量
    ├── project_code.tar.gz         # 应用源代码
    ├── database.sql                # 数据库备份
    ├── recordings/                 # 通话录音文件
    ├── images/                     # Docker 镜像文件
    │   ├── postgres_15_alpine.tar.gz
    │   ├── redis_7_alpine.tar.gz
    │   └── app.tar.gz
    ├── freeswitch/                 # FreeSWITCH 配置
    │   └── etc/freeswitch/
    ├── tcp_proxy_internal.py       # ESL TCP 代理脚本
    └── README.txt                  # 部署说明
    

    在当前服务器执行备份

    方法1:完整离线备份(推荐,支持无网安装)

    cd /home/vboxuser/myxiangmu/ai-call-tongzhi
    
    # 执行离线备份脚本
    bash backup_offline.sh
    

    方法2:标准备份

    cd /home/vboxuser/myxiangmu/ai-call-tongzhi
    
    # 执行备份脚本
    bash backup_full.sh
    

    备份完成后会在当前目录生成 backups/YYYYMMDD/ 目录。

    步骤 3:复制到新服务器

    # 方法1:使用scp传输(需要网络)
    scp -r backups/20260621/ user@新服务器IP:/home/user/
    
    # 方法2:使用U盘或移动硬盘
    sudo cp -r backups/20260621/ /mnt/usb/
    

    在新服务器部署(完全无网)

    前提条件

  • Ubuntu 20.04/22.04/24.04 操作系统
  • 至少 4GB 内存
  • 至少 20GB 可用磁盘空间
  • root 或 sudo 权限
  • 无需网络连接
  • 步骤 1:复制备份文件到新服务器

    backups/20260706/ 目录复制到新服务器的任意位置,例如 /home/user/backup/

    可以通过以下方式传输:

  • U盘或移动硬盘
  • 局域网共享
  • SCP(如果有网络)
  • 步骤 2:执行一键安装(完全离线)

    # 进入备份目录
    cd /home/user/backup/20260706/
    
    # 给脚本添加执行权限
    chmod +x install_offline.sh start.sh stop.sh
    
    # 执行安装脚本(需要root权限,无需网络)
    sudo ./install_offline.sh
    

    安装脚本会自动完成以下操作:

  • ✅ 安装 Docker(从本地 .deb 包,无需网络)
  • ✅ 安装 Docker Compose(从本地文件,无需网络)
  • ✅ 加载 Docker 镜像(从本地 .tar.gz 文件,无需网络)
  • ✅ 解压项目代码(从本地 .tar.gz 文件,无需网络)
  • ✅ 恢复数据库(从本地 .sql 文件,无需网络)
  • ✅ 安装 FreeSWITCH(从本地备份,无需网络)
  • ✅ 启动所有服务
  • 步骤 3:验证服务

    # 检查容器状态
    docker ps
    
    # 检查 FreeSWITCH 状态
    sudo systemctl status freeswitch
    
    # 测试 Web 页面
    curl http://localhost:8000
    
    # 测试 SIP 注册
    curl -X POST http://localhost:8000/api/config/test-sip
    

    步骤 4:登录系统

    打开浏览器访问:http://新服务器IP:8000

  • 默认用户名:admin
  • 默认密码:admin123

  • 常见问题

    1. Docker 安装失败

    # 如果自动安装失败,手动安装 Docker
    sudo apt-get update
    sudo apt-get install -y docker.io docker-compose-plugin
    sudo systemctl enable docker
    sudo systemctl start docker
    

    2. FreeSWITCH 启动失败

    # 检查 FreeSWITCH 状态
    sudo systemctl status freeswitch
    
    # 查看日志
    sudo journalctl -u freeswitch -f
    
    # 重启 FreeSWITCH
    sudo systemctl restart freeswitch
    

    3. 容器启动失败

    # 查看容器日志
    docker compose logs app
    docker compose logs celery_worker
    
    # 重新构建并启动
    docker compose up -d --build
    

    4. ESL 连接失败

    # 检查 TCP 代理是否运行
    ps aux | grep tcp_proxy_internal
    
    # 重启 TCP 代理
    python3 tcp_proxy_internal.py &
    
    # 测试 ESL 连接
    nc -zv 127.0.0.1 8022
    

    5. Web 页面无法访问

    # 检查端口占用
    netstat -tlnp | grep 8000
    
    # 检查防火墙
    sudo ufw status
    sudo ufw allow 8000/tcp
    

    管理命令

    启动系统

    cd /home/user/backup/20260621/
    bash start.sh
    

    停止系统

    cd /home/user/backup/20260621/
    bash stop.sh
    

    查看日志

    # 查看所有容器日志
    docker compose logs -f
    
    # 查看应用日志
    docker compose logs app
    
    # 查看任务日志
    docker compose logs celery_worker
    

    备份数据库

    docker exec ai-call-tongzhi-db-1 pg_dump -U postgres ai_call > backup_$(date +%Y%m%d).sql
    

    恢复数据库

    cat backup.sql | docker exec -i ai-call-tongzhi-db-1 psql -U postgres ai_call
    

    FreeSWITCH 配置说明

    SIP 网关配置

    配置文件位置:/etc/freeswitch/sip_profiles/external/outbound.xml

    当前配置:

  • 网关名称:outbound
  • SIP 服务器:124.128.53.59:4060
  • SIP 账号:905697639
  • 外显号码:05342382639
  • 编解码器:PCMA, PCMU
  • 注册:启用
  • 修改 SIP 配置

  • 通过 Web 界面修改:
  • 登录 http://localhost:8000
  • 进入「系统配置」→「SIP Gateway」
  • 修改配置后点击「应用到 FreeSWITCH」
  • 手动修改:
  •    sudo vim /etc/freeswitch/sip_profiles/external/outbound.xml
       sudo fs_cli -x "reloadxml"
    

    技术支持

    如遇到问题,请检查:

  • 所有服务是否正常运行
  • 网络连接是否正常
  • 配置文件是否正确
  • 日志中的错误信息

  • 文档生成时间:2026年6月21日

    系统版本:FreeSWITCH 1.10.12 + Docker + FastAPI