webRTC中的coturn服务安装

2023-05-16

目录

1、先准备一台云主机

2、安装coturn的依赖

2.1 依赖软件准备

2.1 安装依赖组件

2.2 安装coturn的持久化保存用户信息库

3、安装coturn

4、 coturn配置

4.1 创建用户

4.2 配置说明

4.3 收集配置信息

4.3.1 收集 listening-device 和 listening-ip

4.3.2 查看云主机公网IP

4.3.3 收集realm信息

4.3.4 收集user信息

4.3.5 生成 tls 证书

4.4 配置

5、 启动 coturn 并验证

5.1 启动 coturn

5.2 验证

参考博文


1、先准备一台云主机

主要厂商上都有免费的云主机可以申请,也可以自己购买一个来进行测试

本文中所讲示例即在云上的主机配置如下:

配置项配置值
CPU2核
内存4G
存储80G
OSCentOS 7.6

2、安装coturn的依赖

2.1 依赖软件准备

coturn的依赖软件如下:

OpenSSL, SQLite, libevent2, PostgreSQL, MySQL (or MariaDB) and Hiredis
你可以从以下他们的网站直接下载:
 - http://www.openssl.org (required);
 - http://www.libevent.org (required);
 - http://www.sqlite.org (optional);
 - http://www.postgresql.org (optional);
 - http://www.mysql.org (or http://mariadb.org) (optional);
 - https://github.com/mongodb/mongo-c-driver (optional);
 - http://redis.io (optional).

2.1 安装依赖组件

$ yum install -y openssl-devel
$ yum install -y libevent libevent-devel
$ yum install -y gcc gcc-c++

重点说明

  1. 在安装 libevent2 之前必须先安装 OpenSSL,因 libevent2 安装时会检测 OpenSSL是否安装及版本,OpenSSL 版本太低会导致 libevent2 的安装不成功,进一步影响 TURN Server 的 TLS 功能;
  2. 旧版本的 libevent 版本有一定的缺陷,所以请安装 libevent2 ;

如无法安装libevent-devel可下载后安装,如下:

$ wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
$ tar -zxvf libevent-2.1.12-stable.tar.gz
$ cd libevent-2.1.12-stable
$ ./configure
$ make & make install

2.2 安装coturn的持久化保存用户信息库

用于持久化保存用户信息的库支持如下几种:

  • sqlite
  • postgresql
  • mysql
  • hiredis

以上四种选择其一安装即可。

默认是持久化保存在sqlite中,安装如下:

$ yum install -y sqlite 
$ yum install -y libsqlite3-dev

重点说明

            SQLite 必须安装版本 3.x以上。

如安装libsqlite3-dev失败,使用如下命令:

$ yum list | grep sqlite3
dspam-sqlite3.x86_64                     3.10.2-12.el7                 epel     
libsqlite3x.x86_64                       20071018-20.el7               epel     
libsqlite3x-devel.x86_64                 20071018-20.el7               epel     
preludedb-sqlite3.x86_64                 5.2.0-1.el7                   epel     
python-sqlite3dbm.noarch                 0.1.4-6.el7                   epel     
rubygem-sqlite3.x86_64                   1.3.5-4.el7                   epel     
rubygem-sqlite3-doc.noarch               1.3.5-4.el7                   epel     
soci-sqlite3.x86_64                      4.0.0-4.el7                   epel     
soci-sqlite3-devel.x86_64                4.0.0-4.el7                   epel     
sqlite3-dbf.x86_64                       2011.01.24-3.el7              epel     
uwsgi-plugin-sqlite3.x86_64              2.0.18-8.el7                  epel     
zabbix40-dbfiles-sqlite3.noarch          4.0.37-1.el7                  epel     
zabbix40-proxy-sqlite3.x86_64            4.0.37-1.el7                  epel     
zabbix50-dbfiles-sqlite3.noarch          5.0.19-1.el7                  epel     
zabbix50-proxy-sqlite3.x86_64            5.0.19-1.el7                  epel

从以上列表中可见 libsqlite3x.x86_64 和 libsqlite3x-devel.x86_64 ,安装这两个包即可,命令如下:

$ yum install -y libsqlite3x.x86_64
$ yum install -y libsqlite3x-devel.x86_64

如果想保存到mysql中,上面的sqlite安装选项需改成mysql相关的依赖项。

注意:一定要在./configure前,把sqlite或mysq依赖项安装好,否则./configure时无法识别出sqlite或mysql,最后make成功的版本,会显示xxx is not supported。

其他库的安装视你的选择,安装方法如下:

$ sudo yum install postgresql-devel
$ sudo yum install postgresql-server

$ sudo yum install mysql-devel
$ sudo yum install mysql-server

$ sudo yum install hiredis
$ sudo yum install hiredis-devel

3、安装coturn

下载coturn源码并编译,从网址(https://github.com/coturn/coturn/wiki/Downloads)或(Index of /turnserver)中下载需要版本源码。

$ wget https://coturn.net/turnserver/v4.5.2/turnserver-4.5.1.3.tar.gz
$ tar -zxvf turnserver-4.5.1.3.tar.gz
$ cd turnserver-4.5.1.3
$ ./configure --prefix=/usr/local/turnserver
$ make & make install

默认情况下,coturn使用SQLite数据库进行用户和设置。当TurnServer第一次启动时,会自动创建(空)该数据库。

创建软链接

ln -s /usr/local/turnserver/bin/turnserver /usr/bin/turnserver
ln -s /usr/local/turnserver/bin/turnadmin /usr/bin/turnadmin

4、 coturn配置

4.1 创建用户

使用命令turnadmin创建一个用户/密码,并添加到SQLlite数据库中

$ mkdir /var/lib/turn
$ cp /usr/local/turnserver-4.5.1.3/sqlite/turndb /var/lib/turn/turndb
$ turnadmin -k -u neu -p 123456 -r yourRealm
0x9301762d41ad637475d4c41d33a0e3ed
0: : SQLite connection was closed.
0: : log file opened: /var/log/turn_17050_2022-02-23.log

创建用户neu,密码为123456,同时指定realm为yourRealm,大家可根据自己的需求来更改。

执行 turnadmin 后有一串编码 0x9301762d41ad637475d4c41d33a0e3ed这串编码将需添加到配置文件,配置结果见后面的配置信息。

查看刚刚新建的用户信息,命令及结果如下:

$ cd /usr/local/turnserver
$ ./bin/turnadmin -l
neu[yourRealm]
0: : SQLite connection was closed.
0: : log file opened: /var/log/turn_17053_2022-02-23.log

4.2 配置说明

配置项说明
listening-device安装coturn的服务器上网卡名称
listening-iplistening-device 网卡上的内网IP,中继服务器的监听IP地址,可以配置多个;
listening-portConturn 监听UDP/TCP端口,默认为3478
relay-device同listening-device信息
relay-ip同listening-ip信息,中继服务器的IP地址;
external-ip公网IP,外部IP,当中继服务器在NAT网络内部时指定,此处可以不添加
tls-listening-portcoturn监听TLS/DTLS端口,默认为5349
server-name服务器名称,用于OAuth认证,默认和realm相同;
realm域名
userdb用于保存用户信息
cert/pkey自签名证书,cert和pkey配置的自签名证书用Openssl命令生成
lt-cred-mech要有这个配置项,否则不支持webrtc

说明:将TCP/UDP和TLS/DTLS分别定义监听端口是符合RFC5766规范的,但是通过配置两者能使用同一端口,不推荐;

4.3 收集配置信息

4.3.1 收集 listening-device 和 listening-ip

使用命令 ip addr 来查看本机的网卡和IP信息,具体如下:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:1b:6c:a0 brd ff:ff:ff:ff:ff:ff
    inet 172.26.13.148/18 brd 172.26.63.255 scope global dynamic eth0
       valid_lft 315273457sec preferred_lft 315273457sec

从以上信息分析如下:

  1.  listening-device 值使用 eth0;
  2.  listening-ip 值使用 172.26.13.148;

4.3.2 查看云主机公网IP

每个厂商的云主机管理方法不一,此处不作详细示例。

本次测试用云主机的公网IP为 121.1.1.86(非真实IP,自己做时请使用自己的公网IP

4.3.3 收集realm信息

根据前面4.1节中 turnadmin 命令的参数,确定 realm 的值取 yourRealm。

4.3.4 收集user信息

根据前面4.1节中 turnadmin 命令的参数,确定 user 的值取 neu:123456;分号前面是用户名,后面是密码。

4.3.5 生成 tls 证书

1. 运行如下命令生成签名证书 

$ openssl req -x509 -newkey rsa:2048 -keyout /usr/local/turnserver/etc/turn_server_pkey.pem -out /usr/local/turnserver/etc/turn_server_cert.pem -days 99999 -nodes 

其中,部分参数的意义如下:

  • -days 有效天数
  • -node 不加密密匙

根据上面的命令指定的路径,我们可以知道将在 /usr/local/coturn/etc 目录下生成 turn_server_pkey.pemturn_server_cert.pem 这两个文件。

在我的环境里面openssl命令执行时,会要求录入如下信息:

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Zhejiang
Locality Name (eg, city) [Default City]:shaoxing
Organization Name (eg, company) [Default Company Ltd]:.
Organizational Unit Name (eg, section) []:.
Common Name (eg, your name or your server's hostname) []:172.26.13.148
Email Address []:

上面信息中,绿色加粗信息是要录入的信息,关键是IP地址这块,测试时,特意做了内网IP和公网IP都测试了下,测试时,未发现问题。

2. 查看证书文件

命令如下:

$ ls -la /usr/local/coturn/etc/turn_*
-rw-r--r-- 1 root root 1326 Feb 21 14:39 /usr/local/turnserver/etc/turn_server_cert.pem
-rw-r--r-- 1 root root 1704 Feb 21 14:39 /usr/local/turnserver/etc/turn_server_pkey.pem

4.4 配置

生成配置文件方法有两种:

方法一:

$ cp /usr/local/turnserver/etc/turnserver.conf.default /usr/local/turnserver/etc/turnserver.conf

方法二:

$ vi /usr/local/turnserver/etc/turnserver.conf

然后将如下配置信息直接粘贴到“方法一”生成的配置文件后面,或者直接粘贴到“方法二”生成空文档中即可,具体配置信息如下:

listening-device=eth0
listening-ip=172.26.13.148
listening-port=3478
tls-listening-port=5349	
relay-device=eth0
relay-ip=172.26.13.148
min-port=49512	
max-port=65535
external-ip=121.1.1.86
fingerprint
lt-cred-mech
realm=yourRealm
userdb=/var/lib/turn/turndb
user=neu:0x9301762d41ad637475d4c41d33a0e3ed
user=neu:123456
stale-nonce
no-loopback-peers
no-multicast-peers
mobility
no-cli
cert=/usr/local/coturn/etc/turn_server_cert.pem
pkey=/usr/local/coturn/etc/turn_server_pkey.pem

保存 turnserver.conf 并退出。

5、 启动 coturn 并验证

5.1 启动 coturn

 启动命令如下:

$ cd /usr/local/turnserver
$ ./bin/turnserver -o -a -f -r yourRealm -c /usr/local/turnserver/etc/turnserver.conf

最后的-r yourRealm 意为指定realm,要与创建用户时指定的realm一致。可用lsof -i:3478校验下是否启动成功,如果看到类似下面的输出,说明3478监听正常。

5.2 验证

webrtc-samples官网还提供了一个检测ice穿透的在线工具:Trickle ICE

参考下图,把stun和turn地址设置好,然后点击最下面的“Gather candidates”(收集候选链路)

此图为借用文章《》中的图片,图片中的部分信息说明如下:

  1. 图片中 TURN username 值为 turn:121.1.1.86:3478;
  2. 图片中 TURN username 值是本文的 neu ;
  3. 图片中 TURN password 值是本文的 123456;

如果看到最后的reply那一行,address里的ip与turn服务器的公网ip相同,说明中继成功。

--------------------------------

参考博文

1. webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建;

2. WebRTC-在阿里云基于coturn搭建STUN\TURN服务器;

3. Turnserver服务器搭建;

4. 官方 INSTALL 文档;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webRTC中的coturn服务安装 的相关文章

  • WebRTC - 禁用所有音频处理

    我目前正在尝试通过 webrtc 获得尽可能干净的音频通道 通过 getUserMedia mediaconstraints 对象 我设置了以下选项 constraints audio mandatory echoCancellation
  • 本地网络上的 WebRTC? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在阅读有关 WebRTC 的内容 它看起来非常有前途 我想制作一个简单的局域网游戏 自动连接同一网络上的人们 尽管我可以找到人们
  • 适用于高带宽应用的 WebRTC 数据通道

    我想通过 WebRTC 数据通道发送单向流数据 并且正在寻找最佳配置选项 高带宽 低延迟 抖动 以及其他人在此类应用程序中的预期比特率的经验 我的测试程序发送 2k 的块 使用 2k 的 bufferedAmountLowThreshold
  • 从 MediaStream 对象获取媒体详细信息(分辨率和帧速率)

    我正在捕获用户的相机 我想以尽可能最佳的分辨率捕获图片 所以我的代码类似于下面的代码片段 我想从传入流中读取分辨率详细信息 因此我可以将其设置为视频高度和宽度 我将用它来单击快照 我希望快照具有流提供的最佳质量 这可能吗 读取分辨率详细信息
  • 如何在java应用程序中使用webRTC特定模块

    我有一个简单的java应用程序应用程序客户端可以向服务器发送 接收纯音频 UDP 数据包 服务器将音频数据包转发给除发送者之外的所有人 现在我该如何使用webRTC 回声消除我的应用程序端的模块或其他功能模块 我发现可以使用 JNI 和 w
  • iOS Webrtc - 捕获本地视频流时崩溃

    我正在尝试使用 Google 存储库中的 webrtc 库 我按照这些步骤创建了一个单独的项目 其中包含类似于 APPRTC 的说明和代码 并且我能够让它工作 我能够在两台设备之间进行会议 但是当我尝试与旧项目集成时 Webrtc 崩溃了
  • 在 Heroku 上部署 PeerJS 服务器

    我的 PeerJS 服务器有问题 我从这里使用了 部署到 Heroku 按钮 https github com peers peerjs server https github com peers peerjs server 我不知道如何连
  • WebRTC 无法从 USB 输入设备获取视频源(readyState 转为结束)

    我正在尝试使用 WebRTC 在屏幕上显示视频输入作为实时源 我不想进行任何点对点通信或类似的事情 只是显示视频源 我的代码对于我的笔记本电脑集成网络摄像头工作得很好 但是当我连接外部视频输入设备 在本例中是一台旧摄像机 使用 StarTe
  • Node教程一对多无加载远程服务器Stream Spinner动不停

    我对在项目中使用所需的 Kurrento 很陌生 但是当我克隆 git hub 上为 Kurento 提供的教程并遵循 one2Many 调用的说明时 首先 adapter js 的软件包损坏了 因为我成功解决了它们 但之后出现了一个问题
  • WebRTC 和 Asp.Net Core

    我想将音频流从我的 Angular Web 应用程序录制到我的 Asp net Core Api 我认为 使用 SignalR 及其 websockets 是实现这一目标的好方法 通过这个打字稿代码 我可以获得一个 MediaStream
  • Websocket 连接失败并显示星号 11

    我正在尝试将 websocket 配置为与 asterisk 11 一起使用 但是存在一些问题 我遵循的步骤是 在 http conf 中启用以下内容 enabled yes bindaddr 0 0 0 0 bindport 8088 我
  • 如何在 Android webRTC 上启用 H264

    如何在 Android WebRTC 上启用 H264 PeerConnection to createOfferSDP中没有h264描述 由于某种原因 Google 默认会阻止他们自己的软件编解码器 因此 如果您的芯片组中没有硬件解码 或
  • 为什么turn服务器不支持tcp连接?

    我是 WebRTC 新手 我需要为我的 webrtc 应用程序配置我自己的 Turn 服务器 我使用以下命令安装了我的转弯服务器 apt get install coturn 我只需要通过 tcp 运行转变服务器 它不必使用 UDP 进行任
  • MediaStream 未处理的承诺拒绝:[object DOMError](在 Safari 11 中)

    在下面初始化 WebRTC 的方法中 我在 Safari Tech Preview 11 中遇到了未处理的承诺拒绝 具体来说 当我分配MediaStream像这样的视频元素 video srcObject event stream 堆栈跟踪
  • 检测 MediaStreamTrack 是否为黑色/空白

    我正在与peerjs 创建视频聊天 我使用以下功能切换相机 开 关 function toggleCamera localStream getVideoTracks 0 enabled localStream getVideoTracks
  • 使用 WebRTC 构建 iOS 本机应用程序

    我找了4天了 还是没找到 我构建了所有库并将其集成到我的自定义项目中 但我不知道应该采取哪些步骤才能使其正常工作 我在代码示例 解释中发现的唯一内容是 tech appear in 2015 05 25 Getting started wi
  • 使用webrtc时可以关闭SRTP吗

    现在我测试webrtc与SIP客户端 sx20 的通信 我使用 webrtc sdp 发送邀请消息 但 sip 客户端答案没有指纹 并且 sip 客户端的答案不是 SRTP 只是 RTP 所以我需要关闭WEBRTC中的SRTP 我可以做吗
  • WebRTC/getUserMedia:如何正确静音本地视频?

    我正在尝试实现将本地视频静音的功能MediaStreamTrack在我的 WebRTC 应用程序中 我是这样处理的 function muteVideo if this localStream this localStream getVid
  • 将实时流音频从 NodeJS 服务器获取到客户端

    我需要从 1 个客户端到服务器到多个侦听器客户端的实时实时音频流 目前 我正在从客户端进行录音 并通过 socket io 将音频流式传输到服务器 服务器接收此数据 并且必须将音频流式传输 也通过 socket io 到想要收听此流的客户端
  • 从 RTSP 流传输 WebRTC

    目前 我有一个来自 IP 摄像机的 RTSP 流 我当然有 IP 如果我尝试在 vlc 上显示它 一切都很好 rtsp IP PORT channel 下一步是在我的网站上展示它 能够将其集成为 js 视频组件 有什么方法可以将其转换为 W

随机推荐

  • 网络爬虫有什么用?怎么爬?手把手教你爬网页(Python代码)

    导读 xff1a 本文主要分为两个部分 xff1a 一部分是网络爬虫的概述 xff0c 帮助大家详细了解网络爬虫 xff1b 另一部分是HTTP请求的Python实现 xff0c 帮助大家了解Python中实现HTTP请求的各种方式 xff
  • TSLint学习

    TSLint是typescript格式验证工具 安装 npm install tslint typescript span class hljs comment save dev span yarn span class hljs buil
  • C++从1~m数字中任取k个元素,求所有组合算法

    define MAXN 100 int a MAXN 定位数组 用于指示选取元素集合数组的位置 xff0c 选取元素集合数组0 起始 void comb int m int r int cur 指示定位数组中哪个成员正在移进 unsigne
  • 宏的本质以及宏(包括函数式宏) 没有返回值概念

    由什么问题而引申的 xff1a 字符串 XX ENM USB 中的XX是会变的 xff0c 想写一个宏定义来表示该字符串 首先 xff0c 想到用 define STR xff08 x xff09 x 34 ENM USB 形式 xff0c
  • windows环境下curl报错:Protocol "'http" not supported or disabled in libcurl

    原因 xff1a window命令行不支持单括号引用 解决方案 xff1a 将单括号删除 例如 xff1a curl http localhost 9200 pretty 在window命令行应改为 xff1a curl http loca
  • 关于Gson解析失败:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

    找了半天 xff0c 终于搞定了 xff0c 不得不说 xff0c 这是个坚强的bug 真的是个坚强的bug 一把辛酸了 xff0c xff0c 啥也不说了 xff0c 希望遇到一样坑的小伙伴 别放弃 xff0c 你们还有我 哈哈 解决办法
  • Python+pandas+每天股票涨了多少

    第一步 xff1a 得到某支股票历年来的交易数据 方法见 xff1a https blog csdn net zwy 0309 article details 108217342 在此 xff0c 我使用以下脚本得到股票 xff08 代码
  • 通过串口实时打印Android内核调试log信息

    一 前言 在调试 Android的Linux内核时 xff0c 我们往往会通过打开对应模块的调试Log来查看一些关键信息 通常我们可以使用一些简单的查看方法 xff0c 比如 xff1a 在pc端装有adb工具时 xff0c 使用adb s
  • Spring XML配置文件详解

    spring配置文件是用于指导Spring工厂进行Bean生产 依赖关系注入 xff08 装配 xff09 及Bean实例分发的 34 图纸 34 Spring框架的配置文件是基于xml的 xff0c Spring强大的功能依赖于类型繁多的
  • 两行命令解决ubuntu22.04安装网易云音乐后点击图标无反应的问题

    感谢知乎用户 64 拉布 xff1a https zhuanlan zhihu com p 518108518 1 终端中输入以下命令 xff1a span class token builtin class name cd span op
  • 数据库MVCC多版本并发控制原理

    MVCC实现原理 频繁的加锁会带来什么问题 xff1f 读数据的时候没办法修改 修改数据的时候没办法读取 xff0c 极大的降低了数据库性能 数据库是如何解决加锁后的性能问题的 xff1f MVCC 多版本控制实现读取数据不用加锁 xff0
  • 学习笔记-----ButterKnife

    ButterKnife是一个专注于Android系统的View注入框架 ButterKnife bind this 一切findViewById Fragment Adapter中同样适用 xff0c ButterKnife bind th
  • 【Linux】vim 中批量添加注释

    本期主题 xff1a vim 中批量添加注释博客主页 xff1a 小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限 xff0c 出现错误希望大家不吝赐 此文主要介绍两种方法 xff1a 方法一 xff1a 块选择模式
  • Exported service does not require permission警告

    很久没写过应用了 xff0c 今天写一个Service时 xff0c 在manifest文件的 lt service gt 标签发现了这个警告 lt service android name 61 34 SendService 34 gt
  • Windows服务器高并发处理IOCP(完成端口)详细说明

    本系列里完成端口的代码在两年前就已经写好了 xff0c 但是由于许久没有写东西了 xff0c 不知该如何提笔 xff0c 所以这篇文档总是在酝酿之中 酝酿了两年之后 xff0c 终于决定开始动笔了 xff0c 但愿还不算晚 这篇文档我非常详
  • linux下如何测试端口通不通(四种方法)

    一般情况下使用 34 telnet ip port 34 判断端口通不通 接下来通过本文给大家分享四种方法测试端口通不通 xff0c 感兴趣的朋友一起学习吧 一般情况下使用 34 telnet ip port 34 判断端口通不通 xff0
  • 教你Vim编辑器,如何删除一行或者多行内容

    如何从Vim中删除行 xff1f 如何删除多行 xff1f 本文介绍在Vim编辑器中删除行的不同方法文内含长段代码可复制可往左滑 xff0c 希望对大家有帮助 xff01 安装Vim 在Ubuntu Debian中的安装方式 sudo ap
  • VBoxManage常用命令用法

    VBoxManage命令常用用法 系统环境 xff1a CentOS 7 3 x86 64 VirtualBox版本 xff1a 6 1 22 VirtualBox扩展版本 xff1a 6 1 22 增加一个新的扩展包 VBoxManage
  • Centos7安装Redis

    一 安装gcc依赖 由于 redis 是用 C 语言开发 xff0c 安装之前必先确认是否安装 gcc 环境 xff08 gcc v xff09 xff0c 如果没有安装 xff0c 执行以下命令进行安装 root 64 localhost
  • webRTC中的coturn服务安装

    目录 1 先准备一台云主机 2 安装coturn的依赖 2 1 依赖软件准备 2 1 安装依赖组件 2 2 安装coturn的持久化保存用户信息库 3 安装coturn 4 coturn配置 4 1 创建用户 4 2 配置说明 4 3 收集