Ubuntu20.04下SRS流媒体服务器的安装与开机自启动优化指南
1. 环境准备与SRS基础安装在Ubuntu 20.04上搭建SRS流媒体服务器前需要先准备好基础环境。我建议使用LTS版本的系统稳定性更有保障。首先打开终端逐条执行以下命令安装编译工具链sudo apt update sudo apt install -y build-essential cmake git这里有个小技巧如果你机器配置不高可以去掉-j$[$(nproc)-1]参数中的并行编译选项避免系统卡死。我第一次在2核4G的云服务器上编译时就因为开了并行编译导致SSH连接都卡住了后来发现去掉-j参数虽然编译时间长了点但至少不会让系统崩溃。获取SRS源码时要注意分支选择。官方仓库有多个版本分支新手建议用稳定版git clone -b 4.0release https://gitee.com/ossrs/srs.git cd srs/trunkconfigure阶段可能会遇到openssl依赖问题。实测发现Ubuntu 20.04自带的openssl 1.1.1版本就能满足需求不需要额外升级。如果报错可以尝试sudo apt install -y libssl-dev编译完成后建议先手动测试服务是否正常./objs/srs -c conf/srs.conf这时用浏览器访问http://服务器IP:8080/应该能看到SRS的欢迎页面。如果访问不了八成是防火墙没开端口。Ubuntu默认的ufw防火墙可以用以下命令放行端口sudo ufw allow 8080/tcp sudo ufw allow 1935/tcp # RTMP默认端口2. 服务管理方案对比SRS官方提供了多种服务管理方式这里我实测对比了三种主流方案方案一直接使用init.d脚本这是最传统的方式适合老系统兼容。在trunk目录下执行sudo cp ./etc/init.d/srs /etc/init.d/ sudo chmod x /etc/init.d/srs但这种方式在Ubuntu 20.04上有个坑默认不安装sysv-rc-conf工具需要额外装依赖sudo apt install -y sysv-rc-conf sudo sysv-rc-conf srs on方案二systemd服务推荐现代Linux发行版首选方案。先在trunk目录准备service文件sudo cp ./usr/lib/systemd/system/srs.service /etc/systemd/system/然后编辑服务文件重点修改ExecStart路径[Service] ExecStart/你的实际路径/srs/trunk/objs/srs -c /你的实际路径/srs/trunk/conf/srs.conf方案三supervisor托管适合需要进程守护的场景。安装配置步骤sudo apt install -y supervisor sudo cp ./usr/lib/systemd/system/srs.service /etc/supervisor/conf.d/srs.conf三种方案对比如下方案启动速度资源占用日志管理适合场景init.d慢低一般传统系统兼容systemd快低完善现代Linux首选supervisor中略高强大需要进程守护个人推荐直接用systemd方案不仅性能好还能用journalctl -u srs查看完整日志。3. systemd自启动深度优化很多同学配置完开机启动后发现服务起不来大概率是路径问题。这里分享几个排查技巧首先检查服务状态sudo systemctl status srs如果报Permission denied可能是SRS二进制文件没有执行权限chmod x ./objs/srs更常见的错误是配置文件路径不对。建议使用绝对路径比如[Service] ExecStart/home/user/srs/trunk/objs/srs -c /home/user/srs/trunk/conf/srs.conf对于需要加载动态库的情况可以在service文件中添加环境变量[Service] EnvironmentLD_LIBRARY_PATH/usr/local/lib内存限制也是个常见坑点。如果流媒体服务经常被OOM杀死可以调整[Service] MemoryLimit1G最后记得重载配置并启用服务sudo systemctl daemon-reload sudo systemctl enable --now srs4. 生产环境配置建议经过多次踩坑我总结了几条生产环境必备的优化项日志轮转配置创建日志配置文件/etc/logrotate.d/srs/var/log/srs/*.log { daily missingok rotate 30 compress delaycompress notifempty create 644 root root sharedscripts postrotate systemctl reload srs /dev/null 21 || true endscript }内核参数调优编辑/etc/sysctl.conf添加net.core.rmem_max16777216 net.core.wmem_max16777216 net.ipv4.tcp_rmem4096 87380 16777216 net.ipv4.tcp_wmem4096 65536 16777216SRS关键配置修改conf/srs.conf中的核心参数daemon on; max_connections 1000; srs_log_tank file; srs_log_file /var/log/srs/srs.log;监控方案建议配合Prometheus监控在配置中添加http_api { enabled on; listen 1985; } stats { network 0; disk sda,vda; }最后提醒一个血泪教训一定要配置监控告警我有次半夜被叫醒就是因为没设监控磁盘写满导致服务崩溃。现在我用简单的crontab检查*/5 * * * * if [ $(df / | awk NR2 {print $4}) -lt 1048576 ]; then echo 磁盘快满了 | mail -s SRS告警 adminexample.com; fi