nextcloud中使用turn server提高 talk视音频通话效果

为什么需要turn server,如果你的nextcloud实例运行在反向代理之后或是其他原因(nat)无法暴露nextcloud talk的端口,这个时候就需要一个turn server转发talk的端口,默认为3478,下面turn server配置端口为3478,为了方便这里使用docker compose部署一个coturn服务器。

安装配置coturn

由于这里使用的docker compose部署,所以需要docker环境和安装docker-compose,这部分可以参考docker官方文档去安装。

接下来,为coturn创建docker-compose.yml文件,用来部署coturn

$ mkdir coturn
$ cd coturn
$ vi docker-compose.yml

docker-compose.yml文件内容:

version: "3"
services:
  coturn:
      image: instrumentisto/coturn
      container_name: coturn
      tmpfs:
        - /var/lib/coturn
      volumes:
      - ./turnserver.conf:/etc/coturn/turnserver.conf
      ports:
        - 3478:3478
        - 3478:3478/udp

其中ports根据自己的需求需要,nextcloud talk默认端口为3478

接下来在docker-compose所在文件夹创建coturn的配置文件,同样根据配置文件所在修改,volumes中使用为./turnserver.conf,将其挂载到容器中  /etc/coturn/turnserver.conf 

$ vi ./turnserver.conf
listening-port=3478
fingerprint
use-auth-secret
static-auth-secret=<generated secret>
realm=<domain or ip>
total-quota=100
bps-capacity=0
stale-nonce
no-multicast-peers

然后修改realm为服务器域名或IP,使用openssl生成验证使用的密钥,替换到static-auth-secret

$ openssl rand -hex 32

在nextcloud talk设置中如要使用turns协议,realm需要使用域名

一切准备好之后,就可以开始部署coturn服务了,在docker-compose.yml所在目录中:

$ docker-compose up -d

在nextcloud中配置turn server

coturn 服务启动完之后,就可以在nextcloud中配置talk使用coturn服务器了

登录到自己所在的nextcloud中,来到管理员配置-通话中找到turn 服务器,添加新的coturn服务器,添加服务器地址和验证密钥后看到连接验证出现绿色的勾就代表配置正确可以使用了。

Nextcloud issues

The test with getenv(“PATH”) only returns an empty response

修改php-fpm中www.conf,将下面行的内容注释取消,重启php

;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

nextcloud在nginx中的伪静态规则,在站点配置中添加一下内容:

location
~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}

The “Strict-Transport-Security” HTTP header is not configured to least “15552000” seconds. For enhanced security we recommend enabling HSTS as described in our security tips.

在站点SSL配置文件添加一下内容(apache2: a2enmod headers)

NGINX:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

APACHE:

 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"