在NAS上部署 Steam Headless,打造游戏串流服务器3 回复372 查看打印 上一主题 下一主题

fclyn 发布于 2 天前 1 次阅读


Steam Headless:

一款远程游戏流媒体服务器,可用于搭建远程游戏串流服务

160302iog6ogoy11o6oy6f

核心功能:

  • • 基于 Debian Bookworm 构建,支持 Steam 客户端在 Linux 环境下运行,并兼容 Proton。
  • • 提供 Moonlight 兼容的串流服务,支持通过 Steam Link、Moonlight 或 Steam 客户端的远程畅玩功能进行游戏串流。
  • • 内置 Xfce4 桌面环境,可通过 noVNC 网页界面访问,支持音视频输出。
  • • 支持 NVIDIA、AMD 和 Intel 显卡,提供完整的控制器支持。
  • • 可通过 Flatpak 或 Appimage 安装额外应用(如 EmuDeck、Heroic、Lutris 等游戏启动器)。
  • • 支持 root 权限,方便进行自定义配置。

前言

本项目部署有一定难度,且对硬件性能有一定要求,建议认真看本教程步骤来操作,后续有需要再进行其他调整。

项目 Docker Compose 部署的官方说明文档:

https://github.com/Steam-Headless/docker-steam-headless/blob/master/docs/docker-compose.md

本教程参考了 B 站 UP 主 “紫玥爱吃狐萝卜” 的视频:

https://www.bilibili.com/video/BV1UVefz7ErE

演示的硬件,系统与环境:

  • • 硬件方面,搭载 i5-1235U 处理器,配备 40GB 内存,调用核显与 N 卡(RTX A2000 Laptop);
  • • 系统方面,使用基于 Debian 12 的绿联(UGOS Pro)系统,其他 NAS 系统的配置也是类似的;
  • • 环境方面,如果想用独显,建议先检测 Docker 里是否可以正常调用。

环境

除了要有 Docker 运行环境外,如果想在 Docker 里调用独显使用,还需要安装 NVIDIA 驱动和 NVIDIA Container Toolkit 工具。

NVIDIA 驱动

NVIDIA 驱动是连接 NVIDIA 显卡硬件与操作系统、应用程序的关键软件,它的核心作用是让操作系统和应用能够识别、控制并高效利用 NVIDIA 显卡的硬件功能。

TIP:目前我知道的绿联,飞牛和 Unriad 都是比较方便安装 NVIDIA 驱动的,至于其他 Linux 系统就不清楚了

绿联

160302g8tqr9j8163j3zyc

飞牛

160302ezh5h7g7f8la0eft

Unraid

160302tw7on3kicicavite

输入下面命令测试,没问题的话会打印显卡信息

nvidia-smi

160302o1zv26j2zp223hlp

NVIDIA Container Toolkit 工具

NVIDIA Container Toolkit 是一套用于在容器化环境中高效运行 GPU 加速应用的工具集,它解决了容器与 NVIDIA GPU 之间的兼容性问题,让开发者和用户能轻松地在 Docker 等容器平台中利用 GPU 算力。

TIP:下面代码适用于基于 Debian 系统的飞牛和绿联,至于其他系统可以参考下面官方文档:

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

依次执行下面代码

# 切换 root 权限
sudo -i

# 执行 curl 命令导入仓库 GPG 密钥
curl -fsSL https://developer.download.nvidia.com/com**/cuda/repos/debian12/x86_64/3bf863cc.pub | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

# 添加 NVIDIAContainerToolkit 官方仓库到系统源列表
echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://developer.download.nvidia.com/com**/cuda/repos/debian12/x86_64 /" | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 更新包列表
sudo apt-get update

# 安装 nvidia-container-toolkit 工具包
sudo apt-get install -y nvidia-container-toolkit

# 配置 NVIDIA 在 Docker 中运行
sudo nvidia-ctk runtime configure --runtime=docker

# 重启 Docker 服务
sudo systemctl restart docker

运行 Docker 容器测试,可以成功调用会显示显卡信息

docker run --rm --gpus all nvidia/cuda:11.3.1-base-ubuntu18.04 nvidia-smi

160302puul7lb55bmesh4q

安装

先下载镜像(josh5/steam-headless:latest)到本地,避免还没开始就结束了

160302j35232zcobrbdcbb

下载模板

来到官方部署的说明文档,可以看到 GPU 支持 Intel,NVIDIA 和 AMD

https://github.com/Steam-Headless/docker-steam-headless/blob/master/docs/docker-compose.md

160302gcwd9y5c9fege2gf

打开左边 compose-files 文件夹,这里存放的就是配置模版

160302elxq859sqyyqq7xd

点击下载 .env 配置文件

160302f8qtycstc21slvwz

TIP:

带 privileged 的模版,对设备有的完全访问权限,不需要手动指定具体设备路径;如果是多张显卡环境,想指定显卡,可以使用普通模版。但是不清楚是不是我硬件问题,实测使用 docker-compose.nvidia.privileged.yml 模版运行不正常,后来换成 docker-compose.nvidia.yml 就好了。

根据实际情况下载模版文件,这里我用的是 N 卡

160302ak5dp5zpty9yta5z

NAS 里创建一个文件夹,将下载的两个文件放到里面

160302ass4si8glmlp4855

修改配置

打开 .env(下载后可能自动改为 env.txt) 文件,需要修改几个地方

160302ctgwddz4udu57duw

这里先标出需要修改的几个参数,下面也会进行详细说明

TZ
SHM_SIZE
HOME_DIR
SHARED_SOCKETS_DIR
GAMES_DIR
ENABLE_SUNSHINE

修改时区为 Asia/Shanghai,避免系统时间问题

160302zxfzs80y3w0sx4x2

修改容器共享内存大小,过小会影响图形渲染性能,也不要给过多占用 NAS 系统资源

160302nzkrkkkv7kx4v7xw

TIP:有些系统可能不能使用相对路径,可以改为需要映射目录的绝对路径

修改 HOME_DIR 的值为 ./home ,主机上挂载到容器内 /home/default 的目录(持久化用户数据)

160302ul2r7rm3zku1o2e3

修改 SHARED_SOCKETS_DIR 的值为 ./sockets ,共享套接字目录(用于 X11、PulseAudio 等进程通信)

160302cfamfu0qufe20zea

TIP:这里是存储游戏目录,如果后面下载比较多游戏,担心固态太小可以改为机械硬盘的目录

修改 GAMES_DIR 的值为 ./games ,主机上挂载到容器内 /mnt/games 的目录(游戏库存储路径)

160302voqbc05grrrth0te

TIP:如果后面映射文件有问题,可以修改这个,默认不需要修改(这里后来我改成root权限了)

160302vvhl4o34lo7izl5h

TIP:容器内默认用户的密码,默认不需要修改

160302m63rrfyibgffubrs

TIP:Web UI 访问端口,注意是否会和其他容器端口冲突,默认不需要修改

图片

修改 ENABLE_SUNSHINE 的值为 true ,设置为自动启用 Sunshine 串流服务

160302hm3zafc7cq1rvxqj

TIP:Sunshine 登录用户名和密码,如果服务映射到外网建议修改一下

160302br25te758r5a5k5l

更换软件源

创建名称为 Dockerfile 的文件,粘贴下面的代码

FROM josh5/steam-headless
RUN su default -c bash 'flatpak --user remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub'
RUN echo 'Types: deb\nURIs: https://mirrors.tuna.tsinghua.edu.cn/debian\nSuites: bookworm bookworm-updates bookworm-backports\nComponents: main contrib non-free non-free-firmware\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg\n\nTypes: deb\nURIs: https://ftp.sjtu.edu.cn/debian-security/\nSuites: bookworm-security\nComponents: main contrib non-free non-free-firmware\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg' > /etc/apt/sources.list.d/debian.sources
RUN apt-get -o Acquire::Check-Valid-Until=false update && apt-get install fonts-noto-cjk -y
RUN apt-get clean all

打开 .yaml 模版文件

160302l9kkk85dmioumw29

将原来 image: josh5/steam-headless:latest 这行删除,替换为下面代码(注意对齐的格式)

    build: 
      context: .
      dockerfile: Dockerfile

160302wpse5bbsgesvgp51

最后进行检查,注意 Dockerfile 文件是没有后缀格式的,将原来 .yml 模版文件重命名为 docker-compose.yaml ,原来 env.txt 配置文件重命名为 .env(有些系统可能会隐藏以.开头的文件,修改后就消失了)

160302cwmd995m6ngj9jj6

项目部署

创建名称为 steam-headless 项目,存放路径选择上面的目录,Compose 配置就可以导入了

160302jx5gxu6a45zqah4x

点击“立即部署”,正常情况是不会有报错的

160302ht5qrb9hzhn3b1q9

容器已经正常运行了(因为网络选择了 host,所以这里不能快捷跳转到页面)

160302kbbzwl944rmrygdw

查看日志,等待显卡驱动下载完成(速度还是很快的)

160302f7nh4zkvu374vk5u

等看到这个信息,说明可以访问 VNC 界面

160302prupa6gfk1arikgf

使用

浏览器中输入 http://NAS的IP:8083 就能看到 VNC 界面

160302czkpqtwzsq8mjv7z

TIP:日志要显示这个才算启动完成,可以进行连接

160302zudda9zn2qg22uep

点击连接按钮

160302u8ooohvz7ol5cscv

进入到这个界面(如果不是这个界面,多刷新一下网页)

160302pvzv98utzul8yuuy

换源加速

如果上面下载速度比较慢,就需要更换源(如果速度还可以就不需要了)。有人可能好奇为什么要换两次,因为上面换源可能有点问题,所以再弄一次。但如果不弄上面会一直卡着核显安装步骤,就不细究为什么了。

手动来到容器终端,执行下面代码

su default -c 'flatpak --user remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub'

160302k2335juzjzzl0l2j

执行完成,重启一下容器

160302bd6laad2ststlfdc

可以看到,现在下载速度就非常快了

160302wef9o132xr4f2roe

注意旁边括号,是否正常打勾

160302efpp5tpq1wqffaqx

查看硬件信息

点击左上角,可以查看硬件信息

160302gvslva66bzpbuapu

可以看到处理器的详细信息

160412b70f8zf5fw375l2x

核显和独显信息也可以看到

160302bpaz2fpd6a2phq6w

安装设置

全部完成会切换到这个桌面(不行就多刷新网页),点击下载安装 Steam

160455mkcr12k3s5sroz12

等待 Steam 下载安装

160455shu1zq2e6kf4q38l

TIP:点击左上角,可以找到 Steam 应用

160455b3gwgndyb1cvd1yh

登录 Steam 账号了

160455mzffwrqdd4rl797t

点击左上角,简单设置一下 Steam

160455lj3jnkj9zi0iinkj

界面,设置语言为中文

160455kcofcm8hjfdk8pr1

存储空间,建议设置一下存储游戏为 Game 目录

160455qlyrr9r9zjya12la

TIP:如果游戏运行崩溃,可以设置一下兼容性工具版本为 Proton 9.0-4

160455v11v1a7dvd7y71u3

网络连接

回到首页,发现内容还是没有显示

160455kzln3mkdxex3vg7e

开了梯子立马见效,可以正常访问

160455gqnys990c93l3o3o

也可以通过修改路由器 hosts 来解决(推荐),具体 IP 地址根据实际修改

23.219.73.99 steamcommunity.com
23.215.157.129 store.steampowered.com

畅玩游戏

随便选择一个游戏作为测试

160455anu1lispzlsil0na

可以灵活的选择下载位置

160455psu5uf1l8k3fms3e

下载安装都没遇到问题,点击就开始畅玩游戏

160455mvp1rzbdp5pj8zp8

运行游戏都没问题

160455j256n8nffaxcbfon

右上角游戏声音也没问题

160455wb9rgttt4btgebdr

NAS 系统可以看到显卡也是正常调用

160455jz4y5qz4tzyfkhay

游戏比较小,资源占用并不多

160455wlsepql500ny53ln

Sunshine + Moonlight 串流

目前,Sunshine + Moonlight 串流是较为热门的低延迟远程游戏串流方案。其中,Sunshine 作为游戏串流服务端,Moonlight 作为客户端,二者需相互配合,才能实现游戏的远程串流功能。

浏览器中输入 https://NAS的IP:47990 就能看到界面,注意是 HTTPS 的地址开头

160455cv1a75m8hv55y9c7

点击“高级”,选择继续前往

160455zmmmmcnihe5hwkwe

输入用户名和密码,默认是 admin/admin

160455epa0vhfmf7vajh6m

成功进入 Sunshine 控制面板

160455gkiu8fv7ozcc897o

先设置一下语言为中文(保存应用之后会重新加载,需要等一下)

160455k41a3sxzxzr14e0e

接下来根据自己系统,下载 Moonlight 客户端

https://moonlight-stream.org/

160455qxjz5cvblbxjj5y9

安装好后,应用会自动搜索 Sunshine 服务端

160455rj9fiicff95caafb

如果一直搜索不出来,直接手动输入主机 IP 地址

160455wfsb4hteb36x2y6y

添加成功后,点击进行连接(注意弹窗的 Pin 码)

160455kgc49fkyo3df4dob

切换到 Pin 码,输入配对信息(名称可以根据连接设备填写)

160455hhl55ahbct5ljewo

TIP:Sunshine 点击“应用程序”,可以添加快捷打开应用

160455pevryj0r2ekyrevp

配对成功以后,就会进入应用界面

160455qw22nsy38dk66ldc

按道理这时候就能连接上了,但是我这边打开就会卡死(VNC 和 Sunshine 网页端都访问不了,有清楚解决办法的,可以留言交流)

161424wryynlon06pnbgrr

Steam Link 串流

可将电脑上的 Steam 游戏画面串流至移动设备、电视机、VR 头戴式显示器或另一台 PC 上,让用户在不同设备上畅玩 Steam 游戏

Steam Link 下载链接:

https://apps.apple.com/cn/app/steam-link/id1246969117

https://help.steampowered.com/zh-cn/faqs/view/7112-CD02-7B57-59F8

打开应用,不需要手动搜索,自动就能找到服务器(电脑和手机都是)

161424wnbfwubnubbqbdnu

会自动切换到 Steam 大屏显示,手柄操作会更加方便

161424q16jnpeux6v226jp

默认没有手动设置,画质感觉一般(有点糊)

161424mzbn6km77akmzrv7

简单玩一下游戏都没什么问题,操作延时能够感觉的出(Wi-Fi 无线连接)

161424mdpxs2sdepdj99n6

资源占用不是很大,毕竟游戏只是 Demo 很小

161424iq4eiejtjiqqauak

独显可以正常调用工作

161424bx2v3v55xyl3rml5

扩展

这部分内容不一定都用得上,只是作为记录,有需要的可以看看

下载驱动卡住

一般卡住不是下载慢,而是没变化看起来没运行

161424huiuiwn242wdbkvn

如果一直卡着不动,可以关闭容器,删除映射文件夹再重新启动

161424zpo1odv1l51911s9

VNC 连接不上

页面顶部显示 Failed to connect to server

161454m0qqhfazluqlnuwn

查看日志,有可能只是单纯还没启动完成(正常是要显示二行 INF0 reaped unknown pid xxx,才算成功启动)

161454ccrf7rmoom17rsmf

如果是使用带 privileged 的模版,可以试试换为普通模板

161454cg3fabi7apriparc

桌面加载不正常

进入到桌面,一直加载不正常,顶部状态栏没有

161454rlqvq921w28mxqe8

查看日志是否有警告提示(比如这里就是 Sunshine 有异常)

161454sadaosrurcja86gu

可以重启容器试试

161454m8vk0c5p00kkvczg

正常加载应该是这样的

161454d6o3hz7x7xu2u65u

桌面无法点击

桌面顶部栏这些按钮点击都没反应,可以刷新网页多试几次

161454bgcvx93vej9nxcv9

Steam 安装没反应

点击安装按钮后,没有 Steam 下载的弹窗出现

161454ei18sri6jg1aj62z

关闭容器,删除 /home/.steam 目录,重新再启动容器

161454fd7jzw3i7b2ipwia

这样就会重新提示安装了

161454z9stm5kabtq9s3mx

如果还是不行,可以试试修改一下配置文件,重新再构建项目

161454u2wwfypesg5ckmzd

VNC 遇到错误

提示 noVNC encountered an error,好像长时间打开没操作就会提示

161454ifpkv8zy4y8v6r8a

刷新一下网页好像就没问题了

161454fdi1x1cim0izxgii

Moonlight 串流问题

使用 Moonlight 连接,会导致 Sunshine 出现错误重启

161454glfidlprrk5gzpz7

Sunshine 的日志有报错,这里我就不会看了,目前我也没有解决方法

161454ozmec24b2qe11hq7

总结

总的来说,Steam Headless 这工具挺适合想折腾的玩家 —— 用 Docker 把游戏串流服务搭在 NAS 这类设备上,不管是手机、电视还是电脑,都能远程玩游戏想法确实不错。尤其配上独显,体验会好不少,算是把闲置硬件利用起来的好办法~不过还是有挺多坑的,最起码要安装好驱动和工具,Docker 里面可以调用显卡;Steam 网络有问题,需要修改 hosts 或者搞个梯子解决;另外我自己是遇到 Moonlight 串流问题,目前没办法搞定。

综合推荐:⭐⭐⭐⭐(有独显一定要试试,榨干所有性能)

使用体验:⭐⭐⭐⭐(意外的还不错,除了遇到串流问题)

部署难易:⭐⭐⭐⭐(有一定难度)

此作者没有提供个人介绍。
最后更新于 2025-09-04