1.
概述与目标
本指南目标:在香港云服务器(VPS/云主机)上构建可用于视频直播(RTMP/HLS)与实时通讯(WebRTC/RTC)的完整方案。包含选型、网络、安装、配置、转码、TURN、证书、测试与运维等可复用步骤。
2.
云服务器选型与网络准备
步骤:选择香港节点的实例(建议独立公网IP、带宽按并发带宽估算:视频上传+下行带宽 = 并发数×平均码率),CPU至少4核/8G内存起步;若使用转码或SFU需更高。开通弹性公网IP,确认是否有端口/带宽限制(部分云商对大陆链路有限速),准备域名并在DNS添加A记录指向弹性IP。
3.
系统与环境初始化
步骤:使用Ubuntu 20.04/22.04或Debian。执行基础命令:apt update && apt upgrade -y;安装常用工具:apt install -y nginx certbot git curl build-essential ffmpeg docker.io docker-compose;设置时区与NTP:timedatectl set-timezone Asia/Hong_Kong && apt install -y chrony。
4.
内核与网络调优
步骤:编辑/etc/sysctl.conf加入net.core.somaxconn=1024、net.ipv4.tcp_tw_reuse=1、net.ipv4.ip_local_port_range=1024 65535、net.core.netdev_max_backlog=5000,然后sysctl -p。调整文件描述符:ulimit -n 65536,并在/etc/security/limits.conf添加相应限制。
5.
部署Nginx+RTMP用于传统直播
步骤:安装nginx与rtmp模块(可用docker或编译)。示例nginx.conf 添加rtmp块: rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; push rtmp://backup; } } }。启动后用OBS推流:rtmp://yourdomain/live/streamkey,测试播放用ffplay rtmp://yourdomain/live/streamkey或生成HLS。
6.
使用FFmpeg做转码与生成HLS
步骤:ffmpeg -i rtmp://localhost/live/streamkey -c:v libx264 -preset veryfast -b:v 1500k -c:a aac -ar 44100 -b:a 128k -f hls -hls_time 4 -hls_list_size 6 /var/www/html/hls/stream.m3u8。配置nginx将/var/www/html作为静态HLS服务目录,设置合适的缓存头。
7.
部署WebRTC/实时通讯(SFU或MCU)选择
步骤:根据场景选SFU(mediasoup、Janus、SRS、ion-sfu)用于多人会议或低延迟,多数推荐mediasoup或SRS+webrtc。可用docker部署:docker run -d --name srs -p 1935:1935 -p 1985:1985 -p 8000:8000 ossrs/srs。阅读项目README配置webrtc.conf并启用rtc服务。
8.
配置TURN/STUN以保证穿透
步骤:安装coturn:apt install coturn。配置/etc/turnserver.conf,示例重要项:listening-port=3478 relay-ip=<服务器公网IP> external-ip=<公网IP> fingerprint lt-cred-mech realm=yourdomain total-quota=1000 user=username:password。用certbot配置TLS后启用-TLS端口5349以提升兼容性。启动systemctl enable --now coturn。
9.
SSL证书与域名配置
步骤:使用Certbot获取证书:certbot certonly --nginx -d yourdomain.com。为WebRTC和HTTPS服务配置证书路径(/etc/letsencrypt/live/yourdomain),并在nginx或SFU的TLS配置中引用fullchain.pem与privkey.pem。
10.
部署示例:mediasoup + Node.js 信令
步骤:创建Node环境:apt install -y nodejs npm;clone mediasoup-demo 示例:git clone https://github.com/versatica/mediasoup-demo.git && npm install && npm run build && npm start。修改配置文件中TURN域名与端口,配置SSL代理到Node服务(nginx反向代理),并确保WebSocket与HTTPS都通过证书加密。
11.
可扩展性与负载均衡
步骤:对于高并发使用Kubernetes部署SFU或用多台云服务器做跨域分发。使用负载均衡器实现HTTP/HTTPS分发,RTMP可采用DNS轮询或nginx-rtmp push到多机;WebRTC需要会话粘性或分布式Signaling,SFU间可做流路由。考虑在前端加入CDN分发HLS降低源站压力。
12.
监控、日志与报警
步骤:安装Prometheus + node_exporter + Grafana监控CPU、内存、网络、带宽及应用QPS。配置SRS或SFU的prometheus导出。日志集中用Filebeat或Fluentd推送到Elasticsearch/Kibana,并设置带宽/延迟阈值报警(Grafana Alert 或云监控)。
13.
运维与灾备建议
步骤:定期做负载测试(使用ffmpeg并发推流脚本或WebRTC负载工具),对关键配置做版本控制与自动化部署(Ansible或Terraform)。准备备机并同步配置、媒体存储与CDN回源策略,制定回滚流程与故障切换文档。
14.
安全与合规注意
步骤:关闭不必要端口(只开放1935/80/443/3478),使用iptables/UFW限制管理端口来源,启用fail2ban防暴力,记录用户访问。根据目标观众审查跨境传输合规(中国大陆用户播放可能需要额外备案或使用国内CDN节点)。
15.
成本优化策略
步骤:评估按需带宽与弹性计费:长时间稳定流量考虑包年包月带宽或使用CDN边缘流量;转码时使用GPU实例或批量转码队列;使用自动伸缩规则在高峰扩容、低峰缩容以节省费用。
16.
常见故障排查步骤
步骤:1) 无法推流:检查防火墙与端口,使用telnet yourip 1935;2) WebRTC失败:检查STUN/TURN响应、证书链、浏览器控制台;3) 延迟高:查看带宽利用率、丢包率(ping/tcpdump),考虑分布式SFU或启用更低码率/更小GOP。
17.
示例命令汇总(关键命令)
步骤:apt install ...;git clone ...;ffmpeg -i rtmp://... -c:v libx264 ... /var/www/html/hls/stream.m3u8;systemctl enable --now coturn;certbot certonly --nginx -d yourdomain;docker run -d --name srs -p 1935:1935 ossrs/srs。
18.
问:在香港云服务器上部署WebRTC时常见的网络问题有哪些?
答:常见问题包括STUN无法发现公网IP、TURN未配置或被防火墙阻断、跨境链路抖动导致包丢失、证书不受信任。排查方法:使用traceroute/ping检查链路、用turnutils_uclient测试TURN、检查浏览器控制台ICE候选、确认证书链完整。
19.
问:如何在香港节点保证对中国大陆用户的播放体验?
答:建议使用混合架构:源站部署在香港,HLS/DASH通过国内CDN加速;对于低延迟场景可在国内部署边缘SFU或使用云厂商的专线/加速专线;同时注意备案与带宽合规,尽量使用多线路回源以降低丢包。
20.
问:小团队如何快速上线一套可用的直播+RTC方案?
答:推荐路径:1) 在香港云上快速部署SRS或Ant Media的docker镜像;2) 配置coturn和Let's Encrypt证书;3) 使用现成前端demo(如mediasoup-demo或SRS HTML demo)做信令与连接测试;4) 接入CDN用于HLS分发;5) 按需逐步接入监控与自动扩容。
来源:香港云服务器可以做什么在视频直播和实时通讯场景中的部署要点