环境准备:Ubuntu系统安装、网络配置、防火墙设置、SSH远程连接、基础工具安装
说实话,很多人在搭建流媒体服务器时,一上来就急着编译源码、配置参数。结果呢?环境没搞干净,后面各种玄学问题。我见过太多这种情况了。
这一章,咱们把地基打牢。Ubuntu系统安装、网络配置、防火墙、SSH远程、基础工具,一步都不能省。你想想看,如果连SSH都连不上,后面怎么远程调试?
2.1 Ubuntu系统安装
我个人习惯用Ubuntu Server 22.04 LTS。为什么?稳定,社区活跃,遇到问题随便一搜就有答案。桌面版虽然好看,但跑流媒体服务器,多一个图形界面就多一份资源开销。
推荐版本:Ubuntu Server 22.04 LTS (Jammy Jellyfish)
硬件最低要求:1核CPU、1GB内存、20GB磁盘
生产环境建议:4核CPU、8GB内存、100GB SSD
安装过程其实很简单。下载ISO镜像,做成启动U盘,一路Next就行。但有几点我要特别提醒:
- 磁盘分区:建议手动分区。/boot给500MB,swap给内存大小,剩下的全给/。别搞什么/home单独分区,麻烦。
- 主机名:取个有意义的名字,比如
rtsp-server-01。别用默认的ubuntu,后面集群多了你根本分不清。 - 用户创建:创建一个普通用户,别直接用root。安全第一。
我曾经踩过的坑:有一次装系统时选了最小化安装,结果连ifconfig都没有。后面排查网络问题,折腾了半天才发现是工具没装全。所以,建议选"标准系统工具"那个选项。
2.2 网络配置
流媒体服务器对网络要求很高。延迟、带宽、稳定性,哪个都不能掉链子。Ubuntu 22.04用的是Netplan来管理网络,不再是以前的/etc/network/interfaces了。
先看看当前网络状态:
ip addr show
ip route show
ping -c 4 8.8.8.8
如果用的是DHCP,一般插上网线就能用。但生产环境我强烈建议配静态IP。为什么?因为流媒体客户端需要固定地址来拉流,你总不能每次重启都去查IP吧?
Netplan的配置文件在/etc/netplan/目录下,通常叫00-installer-config.yaml。修改前先备份:
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
然后编辑它:
sudo vim /etc/netplan/00-installer-config.yaml
配置静态IP的示例:
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114
小技巧:网卡名不一定是ens33,用ip link show查看实际名称。我遇到过叫enp0s3的,也遇到过eth0的。别照抄。
改完后应用配置:
sudo netplan apply
验证一下:
ip addr show ens33 | grep inet
ping -c 4 baidu.com
能ping通外网,说明网络没问题了。
2.3 防火墙设置
流媒体服务器需要开放特定端口。RTSP默认用554端口,RTMP用1935,HTTP用80或8080。但Ubuntu默认的防火墙是ufw,默认啥都不开。
先看看防火墙状态:
sudo ufw status
如果显示inactive,说明没启用。我建议先配规则再启用,免得把自己锁在外面。
开放SSH端口(22)和RTSP端口(554):
sudo ufw allow 22/tcp
sudo ufw allow 554/tcp
sudo ufw allow 554/udp
sudo ufw allow 1935/tcp
sudo ufw allow 80/tcp
sudo ufw allow 8080/tcp
然后启用防火墙:
sudo ufw enable
我曾经犯过的错:有一次在远程服务器上直接ufw enable,忘了先放行22端口。结果SSH断了,怎么也连不上。最后只能找机房的人帮忙重启进救援模式。所以,一定先放行SSH端口,或者用ufw allow OpenSSH这种更保险的方式。
查看最终规则:
sudo ufw status verbose
输出应该类似这样:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
554/tcp ALLOW IN Anywhere
554/udp ALLOW IN Anywhere
1935/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
8080/tcp ALLOW IN Anywhere
2.4 SSH远程连接
服务器装好了,网络配好了,防火墙也开了。接下来就是远程连接。说实话,我很少直接在服务器前操作,都是SSH连上去搞。
先确保SSH服务已安装并运行:
sudo apt update
sudo apt install openssh-server -y
sudo systemctl status ssh
如果显示active (running),说明没问题。否则启动它:
sudo systemctl enable ssh
sudo systemctl start ssh
从客户端连接:
ssh username@192.168.1.100
第一次连接会提示确认指纹,输入yes就行。
我个人的习惯:配置SSH密钥登录,省去每次输密码的麻烦。生成密钥对:ssh-keygen -t rsa -b 4096,然后把公钥传到服务器:ssh-copy-id username@192.168.1.100。之后登录就不用密码了。
为了安全,建议修改SSH默认配置:
sudo vim /etc/ssh/sshd_config
几个关键配置项:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
Port |
2222(非默认) | 改掉22端口,减少被扫描的概率 |
PermitRootLogin |
no | 禁止root直接登录 |
PasswordAuthentication |
no | 禁用密码登录,只用密钥 |
PubkeyAuthentication |
yes | 启用密钥认证 |
改完后重启SSH服务:
sudo systemctl restart ssh
注意:改端口后,防火墙也要同步更新。比如改成2222,就执行sudo ufw allow 2222/tcp。别忘了删掉旧的22端口规则。
2.5 基础工具安装
系统装好了,但很多工具默认没有。我每次装完系统第一件事就是装这些基础工具。少了它们,后面编译、调试、排查问题都会很痛苦。
一键安装:
sudo apt update
sudo apt upgrade -y
sudo apt install -y \
build-essential \
git \
curl \
wget \
vim \
net-tools \
htop \
lsof \
tcpdump \
telnet \
dnsutils \
tree \
unzip \
zip
每个工具的用途:
| 工具 | 用途 | 我什么时候用它 |
|---|---|---|
build-essential |
编译C/C++代码的必备套件 | 编译FFmpeg、Live555等流媒体库时必装 |
git |
版本控制 | 拉取开源流媒体项目源码 |
curl/wget |
下载文件、测试HTTP接口 | 测试RTSP over HTTP隧道时常用 |
vim |
文本编辑器 | 改配置文件,我几乎天天用 |
net-tools |
网络诊断(ifconfig、netstat等) | 排查端口监听、网络连接状态 |
htop |
系统资源监控 | 看CPU、内存占用,排查性能瓶颈 |
lsof |
查看进程打开的文件和端口 | 查哪个进程占用了554端口 |
tcpdump |
网络抓包 | 分析RTSP信令、RTP流,排查丢包问题 |
telnet |
测试端口连通性 | 快速验证RTSP端口是否开放 |
dnsutils |
DNS查询(dig、nslookup) | 排查域名解析问题 |
核心工具链:对于流媒体服务器,tcpdump和lsof是排查问题的利器。我曾经花了一整天找RTSP推流失败的原因,最后用tcpdump -i any port 554抓包一看,发现是客户端发了错误的OPTIONS请求。没有tcpdump,这种问题根本无从下手。
2.6 本章知识体系
下面这张图把本章的核心逻辑串起来了。从裸机到可远程操作的服务器,每一步都有依赖关系。