Skip to content

部署规划与启动调试

chatop2020 edited this page Dec 5, 2023 · 18 revisions

系统要求


建议部署规划(强烈建议按以下方式规划,大家都统一规格容易别人帮你排错)

  • 采用Linux操作系统(非万不得以,不要使用Windows操作系统,Linux>MacOS>Windows)
  • 采用MySql 5.7以上的数据库
  • 使用Linux root用户作为平台启动用户
  • 在/root下创建两个目录AKStreamKeeper和AKStreamWeb
  • 将AKStreamKeeper工程中编译好的的所有文件复制到/root/AKStreamKeeper/
  • 将编译好的ZLMediaKit的流媒体服务器MediaServer复制到/root/AKStreamKeeper/
  • 将AKStreamWeb工程中编译好的所有文件复制到/root/AKStreamWeb/
  • 在/root/AKStreamKeeper/创建Config目录,用于存放配置文件
  • 在/root/AKStreamWeb/创建Config目录,用于存放配置文件
  • 在/root/AKStreamWeb和/root/AKStreamKeeper/下都创建log目录
  • 仔细阅读配置文件详解的说明,将配置文件配置完成放置于上面的两个Config目录中
  • 安装ffmpeg,版本4.2.2以上
  • ffmpeg可执行文件需要放在/root/AKStreamKeeper/和/root/AKStreamWeb/的部署目录中,Linux操作系统可以使用软连接来做。
  • mysql中创建一个名为“AKStream”的数据库,要和/root/AKStreamWeb/Config/AKStreamWeb.json中OrmConnStr行指定的一致,字符集请使用utf-8,表结构程序会自动生成。
  • 正式启动前先手工运行一下/root/AKStreamKeeper/MediaServer程序,让他自动生成config.ini文件,随后根据自己的需要调整config.ini文件的内容
  • 需要root权限运行程序 需要root权限运行程序 需要root权限运行程序
  • 编译方法请看源码获取与编译章节,编译好的可执行文件一般在工程目录下的bin/Release/net6.0里面,.dll,.xml为主的文件就是可执行文件,这些文件是要用来部署运行的,项目的源码文件在部署运行时不起作用。

Windows下运行说明

  • Windows下由于无法正常获取网卡数据,因此在LibSystemInfo类库中已经忽略了Windows操作系统上的这方面数据,这可能导致在Windows下无法正常生成各个配置文件,如果配置文件生成失败导致无法正常运行,请手工配置
  • 已经完美支持Windows平台,不需要再手工填写配置文件(即使完美支持Windows平台,也不建议使用Windows平台)

运行(Linux/MacOS)

发行版不兼容问题

  • AKStream使用了系统的基础命令来获取一些系统信息,因为各发行版的系统基础命令所在路径不一定一致,而发行版品类众多,AKStream不会一一做适配
  • AKStream目前主要适配的Linux操作系统是CentOS7,有朋友反馈在Ubuntu下运行异常报错,这是因为route,ifconfig等基础命令路径与CentOS7不同造成的
  • 因此,可以自行使用root用户创建软连接解决此问题
  • 如ubuntu的route,ifconfig工具在/sbin/route /sbin/ifconfig路径下,而CentOS7的route,ifconfig工具在/usr/sbin/route /usr/sbin/ifconfig路径下
  • 因此可以自行创建软连接解决此问题,如果还有其他基础命令不兼容,可自行根据报错提示进行软连接的创建
ln -s /sbin/route /usr/sbin/route
ln -s /sbin/ifconfig /usr/sbin/ifconfig
  • 如果你不想通过软连接方式来做发行版兼容,那你也可以通过修改代码,指定工具路径来解决此问题

运行集成控制接口程序AKStreamWeb

nohup dotnet /root/AKStreamWeb/AKStreamWeb.dll >/dev/null &

注意

  • 如果你在调试阶段,可以使用以下命令运行AKStreamWeb,以获得实时日志输出,当你不需要运行时,可以使用Ctrl+C来结束程序运行
dotnet /root/AKStreamWeb/AKStreamWeb.dll

运行流媒体治理程序

  • AKStreamKeeper 一个流媒体启动一份,可以与AKStreamWeb不在同一台服务器
nohup dotnet /root/AKStreamKeeper/AKStreamKeeper.dll >/dev/null &

注意

  • 如果你在调试阶段,可以使用以下命令运行AKStreamKeeper,以获得实时日志输出,当你不需要运行时,可以使用Ctrl+C来结束程序运行
dotnet /root/AKStreamKeeper/AKStreamKeeper.dll

运行(Windows)

  • 用cmd命令行下运行
  • dotnet AKStreamKeeper.dll 来启动流媒体治理程序
  • dotnet AKStreamWeb.dll 来启动集成控制接口程序

启动支持两个自定义参数

  • 为了某些场景下自定义配置文件位置与日志文件位置,特增加两个自定义启动参数,具体如下
  • 因日志采用log4net框架,因此-L 所指定的是logconfig.xml的目录位置,具体的日志输出目录需要在logconfig.xml中配置
  • -C 指定配置文件路径(目录)
  • -L 指定log4net配置文件路径(目录)
dotnet AKStreamWeb.dll -C ../Config     //指定当前目录的上级目录中的Config目录中获取配置文件
dotnet AKStreamKeeper.dll -L ../LogConfig //指定当前目录的上级目录中的LogConfig目录中获取logconfig.xml(log4net)配置文件
dotnet AKSTreamWeb.dll -C ../Config -L ../Config/Log  //同时指定配置文件目录与logconfig.xml目录

调试(Debug编译形式编译出来的程序才拥有Swagger功能)

  • AKStreamWeb与AKStreamKeeper都集成了Swagger调试文档,所有功能都提供Swagger调试接口,可以通过下面所示地址打开Swagger地址,如果访问不通,则说明运行有问题

AKStreamWeb

AKStreamKeeper

注意

  • ❗**只有在编译模式为Debug时,Swagger才能正常使用,为了增强安全性,在Release模式编译时关闭了Swagger功能(此内容在2023-08-02更新)**❗

需要开放的端口

  • AKStreamKeeper 默认需要开放端口 6880
  • AKStreamWeb 默认需要开放端口 5800
  • ZLMediaKit 需要开放所有端口(TCP、UDP)(可根据AKStreamKeeper.json配置文件中指定的端口范围进行开放)

集群ZLMediaKit运行建议

  • 系统可以支持集群ZLMediaKit进行运行,AKStreamKeeper是ZLMediaKit的治理程序,需要和ZLMediaKit放在一起,ZLMediaKit的运行,结束等工作全权托管给AKStreamKeeper负责
  • AKStreamWeb一个集群里只能有一份,它管理着他下属的所有AKStreamKeeper,而各AKStreamKeeper又管理着自己下属的ZLMediaKit流媒体服务器

怎么终止程序

Linux Mac下

  • 如果是
nohup dotnet xxxx.dll >/dev/null &
  • 这种方式运行的程序,程序会将输出重定向到你指定的文件,并且在后台运行,终端不会输出日志内容(日志内容会保存到日志文件),所以要关掉程序的时候,必须将程序的pid找出来,再通过kill命令结束它
  • 可以使用以下命令查找程序的pid
  • Linux
ps -aux |grep dotnet
  • Mac
ps -A |grep dotnet

-会输出类似以下的内容

ps -A|grep dotnet
31950 ttys000  134:34.03 dotnet AKStreamWeb.dll
31958 ttys001    0:56.42 dotnet AKStreamKeeper.dll
34812 ttys002    0:00.01 grep dotnet
  • 可以看到 31950、31958分别是AKStreamWeb.dll和AKStreamKeeper.dll两个程序的pid
  • 然后可以用Kill -9 31950这样的方式来结束掉AKStreamWeb.dll程序的运行
kill -9 31950
  • 如果运行程序的方式如下
dotnet xxxx.dll
  • 这表示程序是运行在前台的,这时程序日志会在终端输出(同时会保存到日志文件),一般调试时使用这种方式运行
  • 只需要ctrl+c,就可结束程序运行

Windows下

  • Windows下运行需要打开CMD或者ProwerShell程序
  • 运行dotnet xxxx.dll
  • 把运行窗口关掉即结束程序,也可使用ctrl+c来结束程序

怎么查看日志

  • AKStream的日志文件在log目录中(logconfig.xml中默认配置成log目录中,你可以自己修改)
  • 按日期格式yyyyMMdd.log的形式存在,每天一个日志文件,如果单个日志文件超过10M会自动切换新文件并以yyyyMMdd.log.1,yyyyMMdd.log.2的文件名存在

从海量日志中查找你关心的内容

  • 可以通过以下命令实现
cat filename |grep 你关心的内容 

这样的命令来检索你所关心的日志内容,当然这必须在Linux或Mac操作系统上才会有效

追踪日志

  • 我们在使程序后台运行时,还想同时看到实时日志输出时可以通过以下命令实现
tail -f filename
  • 这样日志会实时刷新到终端,可以方便查看日志状态