环境准备: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 本章知识体系

下面这张图把本章的核心逻辑串起来了。从裸机到可远程操作的服务器,每一步都有依赖关系。

环境准备核心流程 Ubuntu系统安装 网络配置(静态IP) 防火墙设置(ufw) SSH远程连接 基础工具安装 ✅ 环境就绪 每一步都有依赖关系:系统安装 → 网络通 → 防火墙放行 → SSH可连 → 工具就绪 → 开始搭建流媒体服务