1. 前言
这篇文章介绍在华为云ECS服务器(ubuntu18.04)部署NGINX服务,搭建一个安防视频监控平台,本地开发了配套的RTMP流媒体推流客户端、RTMP播放器,完成整体效果演示。 RTMP流媒体推流客户端就是用来模拟摄像头硬件设备,RTMP流媒体推流客户端在笔记本电脑上运行,将笔记本电脑上的摄像头音视频流实时推流到华为云服务器转存。 从购买、部署、登录、使用的整体流程开始介绍。华为云的弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。弹性云服务器从创立到发动只需几分钟,客户将具有云服务器的超级管理员权限,轻松布置各种运用。
2. 购买云服务器
如果之前没有使用过华为云的ECS服务器,可以先申请试用1个月,了解服务器的基本使用然后再购买,不得不说提供这个试用服务还是非常不错。
产品试用领取地址: activity.huaweicloud.com/free_test/i...
每天9:30开抢,每天限量100份,这个页面不仅有云服务器可以领取试用,还有云数据库、沙盒等其他产品。
我这里领取了 2核4G S6云服务器
,这个服务器是配套华为自研25GE智能高速网卡,适用于网站和Web应用等中轻载企业应用。
选择配置的时候发现S6规格的已经没有了,来晚了。
S6规格没有了,就选择了S3,2核,4GB的配置结算。
页面向下翻,下面选择系统预装的系统,我这里选择ubuntu 20.04,安装NGINX,来搭建流媒体服务器。
页面继续下翻,设置云服务器名称,设置系统的root密码。
接着就可以继续去支付了。
购买后等待一段时间,系统资源就即可分配完成。
3. 登录云服务器
云服务器的管理控制台从这里进入: www.huaweicloud.com/product/ecs...
在官网主页,点击产品,找到计算选项,就可以看到弹性云服务器ECS,点击进去就可以看到管理控制台的选项。
在弹性云服务器
的选项页面可以看到刚才购买的云服务器,如果点击进去提示该区域没有可用的服务器,说明区域选择的不对,在下面截图红色框框的位置可以看到可用的区域切换按钮,切换之后就行了。
点击服务器右边的更多
,可以对服务器重装系统、切换操作系统、关机、开机、重启、重置密码等操作。
接下来先点击登录,了解一下登录的流程,看看系统进去的效果。
云服务器支持SSH协议远程登录,可以在浏览器上直接使用CloudShell方式或者VNC方式登录,如果本身你自己也是使用Linux系统,可以在Linux系统里通过ssh命令直接登录,如果是在windows下可以使用SecureCRT登录。
其他登录方式。
最方便的登录方式,直接在控制台使用VNC在浏览器里登录,点击立即登录
。
根据提示输入用户名,密码后,按下回车键即可登录。
用户名直接输入root
,密码就是刚才配置云服务器时,填入的root密码。
注意: Linux下输入密码默认都是隐藏的,也就是在键盘上输入密码界面上是不会有反应的,自己按照正确的密码输入即可。
用户名、密码输入正确后,登录成功。
可以点击全屏模式,更好的操作。
4. 使用CloudShell登录云服务器
在页面上直接点击CloudShell登录
按钮。CloudShell方式比VNC方式方便、流畅多了,也支持命令的复制粘贴。
输入密码点击连接。
登录成功进入终端。
5. 使用SecureCRT登录云服务器
上面演示了两种登录方式,都是直接在浏览器里登录,这种两种方式比较来看,VNC方式效率最低,CloudShell
相对来说要方便很多。一般我自己正常开发时,都是使用第三方工具来登录的,如果本身自己开发环境的电脑就是Linux,MAC等,可以直接使用ssh命令登录,这种方式操作流畅方便。如果在windows下,可以使用第三方软件登录。
我现在使用的系统是win10,在windows系统下有很多远程终端软件支持SSH登录到Linux云服务器,我当前采用的使用SecureCRT 6.5
来作为登录终端,登录云服务器。
注意: SecureCRT 6.5
登录高版本Linux系统会出现Key exchange failed
问题,导致登录失败,比如: 登录ubuntu 20.04 系统。 出现这种问题需要对系统ssh配置文件进行添加配置。
添加配置的流程:
cpp
命令行输入:
vim /etc/ssh/sshd_config
在文件最后添加:
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
保存退出。
重启ssh服务
service ssh restart
如果不想这么麻烦的去修改配置文件,那么最简单的办法就是: 切换操作系统,换一个低版本的,比如:ubuntu18.04 即可。
在云服务器的控制台,找到自己的服务器,然后选择切换操作系统。
根据界面上的引导流程,切换即可。更换新的系统需要1~4分钟时间,稍微等待一下即可。
如果要使用远程SSH协议方式登录云服务器,需要具备以下几个前提条件。
cpp
[1]弹性云服务器状态为"运行中"。
[2]弹性云服务器已经绑定弹性公网IP,绑定方式请参见绑定弹性公网IP。
[3]所在安全组入方向已开放22端口,配置方式请参见配置安全组规则。
[4]使用的登录工具(如PuTTY,SecureCRT`)与待登录的弹性云服务器之间网络连通。例如,默认的22端口没有被防火墙屏蔽。
但是这些配置不用担心,在购买服务器后,根据引导一套走完,上面的这些配置都已经默认配置好了,不用自己再去单独配置。
系统切换成功后,打开SecureCRT 6.5
软件,进行登录。SecureCRT 6.5
整体而言还是挺好用的。
如果自己没有``SecureCRT,自己下载一个即可。当然,不一定非要使用
SecureCRT`,其他还有很多SSH远程登录工具,喜欢哪个使用哪个。
下面介绍``SecureCRT `登录的流程。
选择新建会话。
选择SSH2协议。
主机名就填服务器的公网IP地址,端口号默认是22,用户名填root。
自己云服务器的公网IP地址,在控制台可以看到。
软件点击下一步之后,可以填充描述信息,备注这个链接是干什么的。
选择刚才新建的协议端口点击连接。
云服务器连接上之后,软件界面会弹出对话框填充用户名、密码。
登录成功的效果如下。
软件可以配置一些选项,让界面符合Linux终端配色,可以修改字体大小、字体编码等等。
配置后的效果。
6. 安装NFS服务器
为了方便向服务器上拷贝文件,可以采用NFS服务器、或者FTP服务器 这些方式。 我本地有一台ubuntu 18.04 系统笔记本,我这里采用NFS方式拷贝文件上去。
(1)安装NFS服务器
cpp
root@ecs-348470:~# sudo apt-get install nfs-kernel-server
(2)创建一个work目录方便当做共享目录使用
cpp
root@ecs-348470:~# mkdir work
(3)编写NFS配置文件
NFS 服务的配置文件为/etc/exports,如果系统没有默认值,这个文件就不一定会存在,可以使用 vim 手动建立,然后在文件里面写入配置内容。
cpp
/home/work *(rw,no_root_squash,sync,no_subtree_check,insecure)
配置文件里参数的含义:
(4)NFS服务器相关指令
cpp
/etc/init.d/nfs-kernel-server start #启动 NFS 服务
ufw disable #关闭防火墙
/etc/init.d/nfs-kernel-server restart #重启NFS服务
exportfs -arv #共享路径生效
(5)本地客户机挂载服务器的目录
cpp
wbyq@wbyq:~$ sudo mount -t nfs -o nolock 122.112.212.171:/home/work /home/wbyq/mnt/
(6)设置华为云服务器的安全策略
需要把华为云服务器的端口号开放出来,不然其他客户端是无法访问服务器的。
我这里比较粗暴直接,直接将所有端口号,所有IP地址都开放出来了。
**(7)本地客户机挂载服务器测试 **
挂载指令:
cpp
sudo mount -t nfs -o nolock 122.112.212.171:/home/work /home/wbyq/mnt/
7. 安装NGINX(配置RTMP服务)
(1)下载编译时需要依赖的一些工具
cpp
root@ecs-348470:~# sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
(2)下载NGINX编译需要的软件包
cpp
root@ecs-348470:~# mkdir nginx
root@ecs-348470:~# cd nginx/
root@ecs-348470:~# wget http://nginx.org/download/nginx-1.10.3.tar.gz
root@ecs-348470:~# wget http://zlib.net/zlib-1.2.11.tar.gz
root@ecs-348470:~# wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
root@ecs-348470:~# wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
root@ecs-348470:~# wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
(3)下载后的文件全部解压
cpp
root@ecs-348470:~# tar xvf openssl-1.0.2k.tar.gz
root@ecs-348470:~# tar xvf nginx-rtmp-module-master.tar.gz
root@ecs-348470:~# tar xvf nginx-1.8.1.tar.gz
root@ecs-348470:~# tar xvf pcre-8.40.tar.gz
root@ecs-348470:~# tar xvf zlib-1.2.11.tar.gz
(4)配置NGINX源码,生成Makefile文件
cpp
root@ecs-348470:~# cd nginx-1.8.1/
root@ecs-348470:~# ./configure --prefix=/usr/local/nginx --with-debug --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master
执行完上一步之后,打开objs/Makefile文件,找到-Werror选项并删除。
(5)编译并安装NGINX
cpp
root@ecs-348470:~/nginx/nginx-1.8.1# make && make install
安装之后NGINX的配置文件存放路径:
cpp
/usr/local/nginx/nginx:主程序
(6)查看NGINX的版本号
cpp
root@ecs-348470:/usr/local/nginx/sbin# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.8.1
(5)在配置文件里加入RTMP服务器的配置
cpp
root@ecs-348470:~# vim /usr/local/nginx/conf/nginx.conf
打开文件后,在文件最后加入以下配置:
rtmp {
server {
listen 8888;
application live {
live on;
record all;
record_unique on;
record_path "./video"; #视频缓存的路径
record_suffix -%Y-%m-%d-%H_%M_%S.flv;
}
}
}
这样配置之后,服务器收到RTMP流会在NGINX的当前目录下,创建一个video目录用来缓存视频。
客户端向服务器推流之后,服务器就会缓存视频到设置的目录。
(5)检查配置文件是否正确
cpp
root@ecs-348470:/usr/local/nginx/sbin# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
(6)NGINX常用的3个命令
cpp
sudo service nginx start
sudo service nginx stop
sudo service nginx restart
(7)启动NGINX服务器
cpp
sudo service nginx start
8. 摄像头推流音视频到服务器
为了模拟摄像头实时监控推流,我这使用QT+FFMPEG编写了一个小软件,在windows下运行,推流本地笔记本电脑的数据到服务器。软件运行之后,将本地音频、视频编码之后通过RTMP协议推流到NGINX服务器。
软件运行效果:
推流工具运行过程中效果。
9. 编写本地RTMP流播放器
在上面第8小节,通过推流客户端模拟摄像头,已经将本地的摄像头数据实时推流到服务器了,那么还差一个播放器,为了方便能够在任何有网的地方实时查看摄像头的音频和图像,还需要编写一个RTMP流媒体播放器。
我这里的播放器内核是采用libvlc开发的,使用QT作为GUI框架,开发了一个流媒体播放器,可以实时拉取服务器上的流数据,并且还支持回放。因为服务器上的NGINX配置了自动保存的参数,可以将推上去的流按时间段保存下来。
输入服务器地址之后就可以拉取流进行播放。
点击获取回放列表,可以查看服务器上保存的历史视频回放播放。
10. 总结
相较于传统服务器,云服务器具有多方面的优势,利用弹性计算优势,帮助企业完成云上业务的部署与应用,,可以根据自身需要自定义服务器配置,灵活地选择设定所需的内存、CPU、带宽等配置,整体上减小了企业自己搭建服务器开发的成本,还省了服务器的一大堆维护费用。