From a7c579919d29fc31de1362df1412433e00d78917 Mon Sep 17 00:00:00 2001 From: Aaron Chen Date: Tue, 21 Feb 2023 14:04:25 +0800 Subject: [PATCH] debian11, lua5.2, sdm --- ...mrcp项目文档.md => Debian11安装FreeSWITCH1.10.md} | 95 ++++++------ freeswitch/Debian11安装lua5.2和luarocks.md | 34 +++++ freeswitch/Docker部署阿里云的MRCP服务.md | 124 +++++++++++++++ freeswitch/FreeSWITCH对接阿里云MRCP.md | 142 ++++++++++++++++++ php/php74安装pgsql扩展.md | 53 +++++++ 5 files changed, 405 insertions(+), 43 deletions(-) rename freeswitch/{Debian11编译安装FreeSWITCH1.10.8和mod_unimrcp-参照mod_unimrcp项目文档.md => Debian11安装FreeSWITCH1.10.md} (50%) create mode 100644 freeswitch/Debian11安装lua5.2和luarocks.md create mode 100644 freeswitch/Docker部署阿里云的MRCP服务.md create mode 100644 freeswitch/FreeSWITCH对接阿里云MRCP.md create mode 100644 php/php74安装pgsql扩展.md diff --git a/freeswitch/Debian11编译安装FreeSWITCH1.10.8和mod_unimrcp-参照mod_unimrcp项目文档.md b/freeswitch/Debian11安装FreeSWITCH1.10.md similarity index 50% rename from freeswitch/Debian11编译安装FreeSWITCH1.10.8和mod_unimrcp-参照mod_unimrcp项目文档.md rename to freeswitch/Debian11安装FreeSWITCH1.10.md index 05eb03f..d666456 100644 --- a/freeswitch/Debian11编译安装FreeSWITCH1.10.8和mod_unimrcp-参照mod_unimrcp项目文档.md +++ b/freeswitch/Debian11安装FreeSWITCH1.10.md @@ -1,25 +1,35 @@ -# Debian11编译安装FreeSWITCH1.10.8和mod_unimrcp-参照mod_unimrcp项目文档 +## Debian编译安装FreeSWITCH -## 安装Debian11系统 +> wandoubaba / 2023-01-15 -略 +本文以Debian11和FreeSWITCH1.10为例,介绍一步一步编译安装FreeSWITCH的方法。 -> 至少要安装vim git wget +### 先下载/克隆各种资源 -## 下载/克隆各种资源 - -```bash -cd /usr/src -git clone https://github.com/signalwire/freeswitch +```shell +# 假设所有资源都下载到/opt/目录下 +cd /opt +# 下载FreeSWITCH源码 +git clone -b v1.10 https://github.com/signalwire/freeswitch freeswitch +# 下载libks源码 git clone https://github.com/signalwire/libks +# 下载sofia-sip源码 git clone https://github.com/freeswitch/sofia-sip +# 下载spandsp源码 git clone https://github.com/freeswitch/spandsp +# 下载signalwire-c源码 git clone https://github.com/signalwire/signalwire-c -git clone https://github.com/unispeech/unimrcp.git -git clone https://github.com/freeswitch/mod_unimrcp.git -wget https://www.unimrcp.org/project/component-view/unimrcp-deps-1-6-0-tar-gz/download -O unimrcp-deps-1.6.0.tar.gz -# 国内连接github很累,另外不保证各资源仓库以后更新后对应的操作方法是否会变,建议资源下载成功后自己留一份备份 -# 后面的操作如果在root账号下就不要再用sudo了 +``` + +> 国内连接github很累,另外不保证各资源仓库以后更新后对应的操作方法是否会变,建议资源下载成功后自己留一份备份 + +### 一步一步安装 + +> 如果后面的操作是在root账号下,就不需要再用sudo了 + +先安装必要的依赖程序。 + +```shell # 安装FreeSWITCH需要的依赖 sudo apt-get install -y \ build-essential cmake automake autoconf libtool libtool-bin pkg-config \ @@ -32,7 +42,7 @@ sudo apt-get install -y \ liblua5.2-dev \ libopus-dev \ libpq-dev \ - libshout3-dev libmpg123-dev libmp3lame-dev\ + libshout3-dev libmpg123-dev libmp3lame-dev \ libsndfile1-dev libflac-dev libogg-dev libvorbis-dev # 安装libks cd libks @@ -58,38 +68,37 @@ cd signalwire-c PKG_CONFIG_PATH=/usr/lib/pkgconfig cmake . -DCMAKE_INSTALL_PREFIX=/usr sudo make install cd .. -# 安装FreeSWITCH +``` + +可以开始安装FreeSWITCH了 + +```shell +# 编译安装FreeSWITCH cd freeswitch ./bootstrap.sh -j ./configure make -j`nproc` sudo make install +# 安装英文声音资源(可选) +make cd-sounds-install +make cd-moh-install +make uhd-sounds-install +make uhd-moh-install +make hd-sounds-install +make hd-moh-install +make sounds-install +make moh-install cd .. -# 安装unimrcp-deps包 -tar zxvf unimrcp-deps-1.6.0.tar.gz -cd unimrcp-deps-1.6.0 -cd libs/apr -./configure --prefix=/usr/local/apr -make -sudo make install -cd .. -cd apr-util -./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr -make -sudo make install -cd ../../.. -# 安装unimrcp -cd unimrcp -./bootstrap -./configure --with-sofia-sip=/usr -make -sudo make install -cd .. -# 安装mod_unimrcp -cd mod_unimrcp -export PKG_CONFIG_PATH=/usr/local/freeswitch/lib/pkgconfig:/usr/local/unimrcp/lib/pkgconfig -./bootstrap.sh -./configure -make -sudo make install ``` + +### 启动FreeSWITCH服务 + +执行以上步骤后,FreeSWITCH已经被安装到/usr/local/freeswitch目录下了。 + +```shell +cd /usr/local/freeswitch +# 前台启动服务 +bin/freeswitch +``` + +等待一段时间后,FreeSWITCH服务就已经成功启动了,在当前控制台输入命令`sofia status`可以看到一点配置信息。前台启动方式非常简单,但是一旦执行`...`命令退出控制台后,对应的FreeSWITCH服务也就退出了。如果想在后台启动服务,在执行`bin/freeswitch`时后面加上`-nc`命令参数就可以了。 diff --git a/freeswitch/Debian11安装lua5.2和luarocks.md b/freeswitch/Debian11安装lua5.2和luarocks.md new file mode 100644 index 0000000..4854666 --- /dev/null +++ b/freeswitch/Debian11安装lua5.2和luarocks.md @@ -0,0 +1,34 @@ +## Debian11安装lua5.2和luarocks + +> wandoubaba / 2023-01-18 + +严格来说,这个内容并不只针对FreeSWITCH,不过打造一个合适的lua的编写和运行环境也是玩转FreeSWITCH的一个前提,而且笔者是通过FreeSWITCH才认识lua的,所以把搭建lua环境也当作是FreeSWITCH的一个案例看待。 + +### 安装lua5.2 + +> 后面的操作过程中如果使用root账号的话就不需要加`sudo`了 + +```sh +sudo apt-get install -y lua5.2 +``` + +### 安装luarocks + +```sh +sudo apt-get install -y unzip +cd /opt +wget https://luarocks.org/releases/luarocks-3.9.2.tar.gz +tar zxpf luarocks-3.9.2.tar.gz +cd luarocks-3.9.2 +./configure && make +sudo make install +``` + +### 验证 + +```sh +# 查看lua版本号 +lua -v +# 查看luarocks版本号 +luarocks --version +``` diff --git a/freeswitch/Docker部署阿里云的MRCP服务.md b/freeswitch/Docker部署阿里云的MRCP服务.md new file mode 100644 index 0000000..da0191a --- /dev/null +++ b/freeswitch/Docker部署阿里云的MRCP服务.md @@ -0,0 +1,124 @@ +## Docker部署阿里云的MRCP服务(版权) + +> wandoubaba / 2023-02-21 + +在阿里云的的智能语音服务中,除了提供常规的ASR、TTS等能力外,也有完整的MRCP服务(阿里名称:SDM),不但可以对接私有化的智能语音能力,同时还可以对接公有云的ASR和TTS。 + +引用阿里云《SDM(MRCP-SERVER)公共镜像使用》文档中的一段话: + +> SDM(MRCP-SERVER)目前在公共云上有对应的镜像仓库,用户可以直接拉取公共云镜像到本地,然后部署使用,一定程度上简化了部署和接入的成本。 + +### 环境依赖 + +机器需求:4C8G + +操作系统:CentOS7.2及以上(其他支持Docker环境的较新版本的Linux发行版) + +软件环境要求:Docker环境 + +### 安装过程 + +安装部署主要包括两个过程:到阿里云开通公共云语音服务、部署SDM镜像。 + +#### 开通阿里云智能语音服务 + +> 下面这些操作都是在阿里云的控制台里完成的。 + +- 注册阿里云账号,这里省略具体步骤。 + +- 登录阿里云控制台,到“智能语音交互服务”页面开通ASR、TTS相关服务 + +- 阿里云的语音服务都支持试用版免费使用,只不过并发路数有限,开发测试可以用。 + +- 到阿里云的“Access Key管理页面”创建并获取一组供SDM使用的具有调用智能语音服务能力的“Access Key ID”和“Access Key Secret”(注意妥善保存)。 + +- 到阿里云“智能语音交互”控制台->“全部项目”,如果没有项目创建一个项目,项目类型选择“语音识别+语音合成+语音分析“,主要是要拿到项目的“AppKey”。 + +- 注意“AppKey”对应项目的“项目功能配置”中,要选择8K模型。 + +经过以上操作,在云端的基础能力就已经配置好了,一共得到了3个变量:“Access Key ID”、“Access Key Secret”、“AppKey”,后面部署SDM时会用到这几个变量。 + +#### 部署SDM镜像 + +> 下面的操作是在要部署SDM的服务器上进行的,如果是以root登录的话,就自行忽略`sudo`,假设Linux系统上已经安装好了docker服务。 + +开始操作之前,最好事先在主机上为SDM规划一个目录,用于保存配置文件和日志等运行时文件,本文假设这个目录是`/data/sdm`,下面的操作都默认在`/data/sdm`目录下进行。 + +##### 初始化配置 + +```sh +# 进入主机准备的sdm文件目录 +cd /data/sdm +# 拉取镜像 +sudo docker pull registry.cn-shanghai.aliyuncs.com/nls-cloud/sdm:latest +# 确认本地已拉取的镜像 +sudo docker images | grep sdm +# 初始化本地环境 +sudo docker run -d --privileged --net=host --name nls-cloud-sdm -v `pwd`/logs:/home/admin/logs -v `pwd`/data:/home/admin/disk registry.cn-shanghai.aliyuncs.com/nls-cloud/sdm:latest standalone +``` + +到这里只是用到初始化环境,将容器中的SDM目录映射到宿主机上,由于相关配置参数还没有修改,所以容器最终不会运行起来(如果真运行起来了,也请用`docker stop`命令将它停了吧),下面需要进行相关配置操作。 + +##### 配置 + +首次启动后,容器内的配置文件在宿主机`/data/sdm/data/nls-cloud-sdm/conf`目录下,一般来说只需要修改其中的3个配置文件:nlstoken.json、service-asr.json、service-tts.json。 + +- nlstoken.json(配置AccessKeyId和AccessKeySecret): + +```json +{ + "AccessKeyId": "前面得到的AccessKeyId", + "AccessKeySecret": "前面得到的AccessKeySecret", + "DefaultToken": "" +} +``` + +说明:对接公有云时,DefaultToken的值要是空白。 + +- service-asr.json(主要配置url和AppKey): + +```json +{ + "url": "wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1", + "appkey": "前面得到的项目AppKey", +} +``` + +- service-tts.json(主要配置url和AppKey): + +```json +{ + "url": "wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1", + "appkey": "前面得到的项目AppKey", +} +``` + +其他asr和tts的配置一般不用修改,如果有特殊需求的话就按需配置好了。 + +##### 启动 + +```sh +sudo docker start nls-cloud-sdm +# 查看是否启动成功 +sudo docker ps +# 查看服务进程是否已拉起 +ps -ef | grep alimrcp-server +# 查看端口是否监听 +sudo lsof -i:7010 +# 查看日志中有没有ERROR信息 +cat logs/nls-cloud-sdm/alimrcp-server.log | grep ERROR +# 设置容器自启动 +sudo docker update --restart=always nls-cloud-sdm +``` + +##### 端口 + +默认情况下,SDM使用以下端口与客户端(如FreeSWITCH)通信,与服务端(阿里云)不需要开放端口,只需要能连接阿里云公有云服务即可。 + +- 7010(TCP&UDP):SIP端口。 +- 1544、1554(TCP):MRCP协议端口。 +- 10000-20000(UDP):RTP协议端口,用来传输语音流。 + +##### 并发 + +SDM单机资源默认支持100路ASR+100路TTS,这个并发指的是SDM与客户端(如FreeSWITCH)的资源处理能力,与公有云的ASR、TTS并发能力无关。 diff --git a/freeswitch/FreeSWITCH对接阿里云MRCP.md b/freeswitch/FreeSWITCH对接阿里云MRCP.md new file mode 100644 index 0000000..857819d --- /dev/null +++ b/freeswitch/FreeSWITCH对接阿里云MRCP.md @@ -0,0 +1,142 @@ +## FreeSWITCH对接MRCP服务(以阿里云SDM为例) + +> wandoubaba / 2023-02-21 + +在阿里云的的智能语音服务中,除了提供常规的ASR、TTS等能力外,也有完整的MRCP服务(阿里名称:SDM),不但可以对接私有化的智能语音能力,同时还可以对接公有云的ASR和TTS。 + +### 网络规划 + +- MRCP服务器 + +|配置项|配置值| +|---|---| +|IP| 192.168.0.10| +|SIP端口|7010(TCP&UDP)| +|MRCP端口|1544、1554(TCP)| +|RTP端口|10000-20000(UDP)| + +- FreeSWITCH服务器 + +|配置项|配置值| +|---|---| +|IP|192.168.0.60| +|SIP端口|5060(TCP&UDP)| +|RTP端口(与MRCP通信)|40000-50000(UDP)| + +### 部署SDM + +目前阿里云并没有开放SDM服务,通过阿里云智能语音服务的客户经理可以得以《SDM(MRCP-SERVER)公共镜像使用》文档,按照文档部署,比较容易。 + +摘抄阿里云《SDM(MRCP-SERVER)公共镜像使用》文档中的一段话: + +> SDM(MRCP-SERVER)目前在公共云上有对应的镜像仓库,用户可以直接拉取公共云镜像到本地,然后部署使用,一定程度上简化了部署和接入的成本。 + +### 安装mod_unimrcp模块 + +详见《为FreeSWITCH安装mod_unimrcp模块》。 + +### 配置mod_unimrcp + +在FreeSWITCH的安装目录修改`conf/autoload_configs/modules.conf.xml`文件: + +```xml + + +``` + +在FreeSWITCH的安装目录下创建`conf/mrcp_profiles/aliyun-mrcpserver.xml`文件: + +```xml + + + + + + + + + + + + + + + + + +``` + +创建或修改`conf/autoload_configs/unimrcp.conf.xml`文件: + +```xml + + + + + + + + + + + + + + + + + + + + + + +``` + +在`grammar`目录下创建`alimrcp.gram`文件: + +```js +#JSGF V1.0; +/** JSGF Grammar for example */ +grammar example; +public = []; +``` + +修改unimrcp配置后需要重启FreeSWITCH服务。 + +### 通过dialplan测试 + +在FreeSWITCH安装目录里创建`conf/dialplan/default/mrcp.xml`文件: + +```xml + + + + + + + + + +``` + +在fs_cli中执行`reloadxml`,然后盯着控制台,用分机呼叫001,接通后说一句话,应该会在控制台看到识别结果,类似: + +```xml + + + + + 中午吃什么? + 730 + 2220 + 511ba061b8a54d7b93e0f5675534febd + 5d27104393eb4dbe-1.wav + + 中午吃什么? + + +``` + +恭喜,到这里,你的FreeSWITCH已经可以“听”和“说”了。 diff --git a/php/php74安装pgsql扩展.md b/php/php74安装pgsql扩展.md new file mode 100644 index 0000000..1ebde44 --- /dev/null +++ b/php/php74安装pgsql扩展.md @@ -0,0 +1,53 @@ +# 为PHP7.4安装pgsql和pdo_pgsql扩展 + +## 环境与版本 + +操作系统:CentOS7.9 / Debian11 + +> 在Debian上操作相关简单,所以本文以Centos7.9为例 + +软件版本:PHP7.4, postgresql15 + +## 操作过程 + +假设基本的LNMP环境都已经安装好了,但是没有安装pgsql扩展。 + +首先要先安装postgresql才可以安装pgsql扩展,其实不需要安装数据库的服务端,安装devel包就行了。 + +> postgresql官方下载安装网址: + +```sh +# Install the repository RPM: +sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm + +# Install PostgreSQL: +# 这句和官网的不一样,官网让安装postgresql15-server,而我们只需要支持扩展,所以只安装postgresql15-devel +sudo yum install -y postgresql15-devel +``` + +以上任务执行完毕后,postgresql15的开发包被安装到了`/usr/pgsql-15/`中,后面我们会用到`/usr/pgsql-15/bin`这个路径。 + +下面需要找到我们PHP7.4的源码目录(没有的话就临时下载一份),进入源码目录`src/ext/pgsql`,执行以下操作: + +```sh +phpize +# 注意替换下面的PATH/TO/php-config为真实的php-config路径,用find / -name "php-config"可以找到 +./configure --with-pgsql=/usr/pgsql-15/bin/ --with-php-config=PATH/TO/php-config +make +make install +``` + +正常情况下,名为pgsql.so的文件将会出现在`PATH/TO/PHP/lib/php/extensions/no-debug-non-zts-20190902/`目录中,记住这个路径。 + +用php --ini命令找到php.ini和php-cli.ini文件,分别编辑这两个文件,在最后面添加以下内容: + +```ini +[pgsql] +extension=PATH/TO/PHP/lib/php/extensions/no-debug-non-zts-20190902/pgsql.so +``` + +> 再次提醒,别忘了把`PATH/TO/PHP`替换成你的环境中的实际路径。 + +执行`php -m | grep pgsql`应该可以看到pgsql扩展已经安装好了。 + +PHP7.4源码目录中的`src/ext/pdo_pgsql`是pdo_pgsql扩展的源码,安装过程与pgsql扩展是相同的,这里就不说了。