# node-webrtc-server **Repository Path**: yuxieweiliang/node-webrtc-server ## Basic Information - **Project Name**: node-webrtc-server - **Description**: 基于 kurento 的 webrtc 服务端 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-02 - **Last Updated**: 2025-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WebRTC-node 安装依赖 - docker # kurento & coturn 安装 docker 版本 - Kurento - coturn - node # 用于启动 webrtc-node 项目 ## Getting started ## step 1 -> 安装 docker ```bash $ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 或 $ curl -sSL https://get.daocloud.io/docker | sh # 安装成功 $ docker -v Docker version 20.10.23, build 7155243 ``` ## step 2 -> 安装 Kurento #### 下载启动镜像 ```bash $ docker run -itd --name kms --net=host --restart=always -v /opt/recording-static:/opt/recording-static kurento/kurento-media-server:latest $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 270cf1ef1768 kurento/kurento-media-server:latest "/entrypoint.sh" 2 weeks ago Up 3 days (healthy) kms ``` - `--restart=always` 保活机制 - `-v` 指定 kurento 挂在的本地目录:recording-static 录制目录;[宿主机目录]:[kurento目录] - `--name kms` 指定镜像名称为 kms - `kurento/kurento-media-server:latest` 当前使用的镜像:版本号 #### 修改配置 ```bash # 进入容器 $ docker exec -it kms bash $ cd /etc/kurento/modules/kurento && vim WebRtcEndpoint.conf.ini ``` 如果 docker 中没有vim,则下载安装 vim ```bash $ apt-get update && apt-get install vim ``` 编辑文件WebRtcEndpoint.conf.ini,进行如下配置 ```yaml stunServerAddress=conturn公网IP stunServerPort=23478 turnURL=kurento:kurento@conturn公网IP:23478?transport=udp ``` ##### 重启kurento ```bash # 退出容器 $ exit # 重启容器 $ docker restart kms ``` ## step 3 -> 安装 Coturn #### 下载安装 coturn ```bash $ docker run -itd --name coturn --restart=always -p 23478:3478 -p 23478:3478/udp coturn/coturn $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 270cf1ef1768 kurento/kurento-media-server:latest "/entrypoint.sh" 2 weeks ago Up 3 days (healthy) kms 849d2d1cea9a coturn/coturn "docker-entr.s…" 10 days ago Up 3 days 23478->3478 coturn ``` - `--restart=always` 保活机制 - `-p 23478:3478` 将 coturn 内部的 3478 端口映射到宿主机的 23478 端口,默认 tcp - `-p 23478:3478/udp` 将 coturn 内部的 3478 端口映射到宿主机的 23478 端口,指定 udp - `coturn/coturn` 当前使用的镜像 - `--name coturn` 指定镜像名称为 coturn ### 配置 ```shell # 进入容器 docker exec -it coturn bash vim /etc/turnserver.conf ``` ###### 修改如下内容: ```shell listening-ip=xxx.xxx.xxx.xxx #内网ip relay-ip=xxx.xxx.xxx.xxx #内网ip external-ip=xxx.xxx.xxx.xxx #外网ip ``` ###### 启动coturn: ```shell service coturn start # 或 service coturn restart # 退出容器 exit ``` ## step 3 -> 安装 Node #### 安装 nvm ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash $ nvm -v Command 'nvm' not found, but there are 13 similar ones. ``` 更新环境变量 ```bash $ source /root/.bashrc $ nvm --version 0.35.3 ``` #### 安装 node 列出本地安装的 Node.js 版本 ```bash $ nvm ls ``` 列出远程服务器上可下载安装的版本 ```bash $ nvm ls-remote # 或 $ nvm ls-remote | grep LTS // 筛选 LTS ``` 安装 Node.js ```bash # nvm 安装 node 后,默认会使用最新安装的版本。 $ nvm install v14.20.0 // v14.20.0 是版本号 $ nvm install v12.16.3 // v12.16.3 是版本号 ``` 切换本地 Node.js 版本 ```bash $ nvm use v14.20.0 // 版本号可替换 ``` ###### 查看 node 版本 ```bash # node 版本需要 > v14.18.3 $ node -v v14.20.0 ``` #### 安装 pm2 ```bash $ npm i pm2 -g $ pm2 -v [PM2] Spawning PM2 daemon with pm2_home=C:\Users\asus\.pm2 [PM2] PM2 Successfully daemonized 5.2.0 pm2 start config.json ``` ## 启动项目 #### publish 拷贝 webrtc-node 项目到服务器 ```bash # 进入本地项目 $ cd webrtc-node ``` 方式一,自动,根据提示发布 ```bash # 发布到本地测试环境 $ npm run push:test # 发布到 231 线上环境 $ npm run push:231 ``` - 选择是否需要重新打包 - 输入服务器密码 方式二,手动发布 ```bash # 打包项目 $ npm run build # 将项目拷贝到服务器 $ scp -r ./admin root@xxx.xxx.xxx.xxx:/opt/webrtc-node ``` #### 进入服务器项目目录 ```bash # 进入服务器项目目录 $ cd /opt/webrtc-node # 下载依赖 $ npm install # 启动项目 方式一 $ pm2 start server.test.js # 或者 启动项目 方式二 # 修改入口文件 $ vim config.json # 将 script 修改为对应的服务入口文件,比如102 为 server.test.js,北京为 server.beijing.js "script": "server.test.js", # 启动服务:第一次启动服务,使用 config.json;列表中的 name 字段会显示 json 中的 name 字段。 $ pm2 start config.json ┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐ │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ webrtc │ default │ 0.1.0 │ cluster │ 0 │ 0 │ 15 │ stopped │ 0% │ 0b │ root │ disabled │ └─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘ # 非第一次启动,可以使用列表中的 name 字段启动 $ pm2 start webrtc # 重启 $ pm2 restart webrtc ``` ------------------------------------------------------------------------------------------ PC 与 手机端【首页】 功能对应名称 ------------------------------------------------------------------------------------------ | 电脑 | 手机 | 功能 | |--------------------|---------------------------------|-------------------------- | 对讲 | 群组对讲 | 多人对讲组 | | 单呼 | 通讯录 | 一对一电话 | | 组呼 | 语音呼叫 | 一对多语音组呼 | | 组呼 | 视频呼叫 | 一对多视频组呼 | | 广播 | 仅接听 | 一对多文件广播 | | 喊话 | 语音喊话(通讯录) | 一对多语音广播 | | 视频 | 视频会议 | 多人视频会议 | | 会议 | 语音会议 | 多人语音广播 | ------------------------------------------------------------------------------------------ #### 项目更新 ```bash # step 1 进入项目目录 cd ~/node-webrtc # step 2 切换到 dev 分支 > git branch > step 2 git checkout dev # dev # step 3 拉取最新代码 > git pull # step 4 打包发布 > npm run build # y 表示需要重新打包,选择 y ? 是否需要重新打包? Y/N n # y 表示拷贝 demo,如果是第一次发布项目,则选择 y,后面都选择 n ? 是否拷贝 demo? Y/N n ? 是否拷贝 public? Y/N n ? 是否拷贝 packages? Y/N n 开始发布 # 需要输入服务器密码 ```