七千二百袋水泥
七千二百袋水泥
Published on 2025-10-15 / 3 Visits

超详细手把手教程:在NAS设备上通过Docker部署Steam Headless构建高性能游戏串流服务器,支持多平台远程游玩与显卡加速功能

Steam Headless 是一款专为远程游戏流媒体设计的服务器软件,能够帮助用户在家庭网络或互联网环境下搭建稳定的游戏串流服务。它基于容器化技术部署,简化了在NAS设备上的安装与配置流程。

Image

核心功能特性:

  • • 系统构建于 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

演示环境硬件与系统配置:

  • • 硬件配置采用 Intel i5-1235U 处理器,配备 40GB 内存,同时调用集成显卡与独立 NVIDIA 显卡(RTX A2000 Laptop 型号)。
  • • 操作系统基于 Debian 12 的绿联 UGOS Pro 系统,其他品牌 NAS 系统的配置方法基本类似。
  • • 环境要求方面,如果计划使用独立显卡,建议提前验证 Docker 环境能否正常识别和调用显卡设备。

环境配置与驱动安装

除了需要具备正常的 Docker 运行环境外,如果计划在 Docker 容器内调用独立显卡,还需要提前安装 NVIDIA 显卡驱动和 NVIDIA Container Toolkit 工具套件。

NVIDIA 显卡驱动安装

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

提示: 目前已知绿联、飞牛和 Unraid 系统都提供了便捷的 NVIDIA 驱动安装方式,其他 Linux 发行版的安装方法可能有所不同。

绿联系统驱动安装界面:
Image

飞牛系统驱动安装界面:
Image

Unraid 系统驱动安装界面:
Image

安装完成后,在终端中输入以下命令进行测试,如果配置正确将会显示显卡的详细信息:

nvidia-smi

Image

NVIDIA Container Toolkit 工具安装

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

提示: 以下安装代码适用于基于 Debian 系统的飞牛和绿联 NAS,其他操作系统可参考官方安装指南:
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/compute/cuda/repos/debian12/x86_64/3bf863cc.pub | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg  
  
# 添加 NVIDIA Container Toolkit 官方仓库到系统源列表  
echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://developer.download.nvidia.com/compute/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

Image

Steam Headless 安装步骤

首先将基础镜像(josh5/steam-headless:latest)下载到本地,避免因网络问题导致部署过程中断:

Image

配置文件模板下载

访问官方部署说明文档,可以看到项目支持 Intel、NVIDIA 和 AMD 三大显卡品牌:
https://github.com/Steam-Headless/docker-steam-headless/blob/master/docs/docker-compose.md

Image

打开左侧的 compose-files 文件夹,这里存放了各种配置模板文件:

Image

点击下载 .env 配置文件:

Image

重要提示:

带有 privileged 标志的模板对设备拥有完全访问权限,不需要手动指定具体设备路径。如果是多显卡环境且需要指定特定显卡,建议使用普通模板。实测中发现 docker-compose.nvidia.privileged.yml 模板在某些硬件上运行不正常,更换为 docker-compose.nvidia.yml 后问题解决。

根据实际硬件情况下载对应的模板文件,本教程以 NVIDIA 显卡为例:

Image

在 NAS 中创建一个专用文件夹,将下载的两个配置文件放入其中:

Image

配置文件修改

打开 .env 文件(下载后可能自动重命名为 env.txt),需要修改以下几个关键参数:

Image

需要修改的主要参数列表:

TZ  
SHM_SIZE  
HOME_DIR  
SHARED_SOCKETS_DIR  
GAMES_DIR  
ENABLE_SUNSHINE

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

Image

调整容器共享内存大小,过小的设置会影响图形渲染性能,但也不应分配过多以免占用系统资源:

Image

提示: 某些系统可能不支持相对路径,可以改为需要映射目录的绝对路径。

修改 HOME_DIR 的值为 ./home,这将把主机目录挂载到容器内的 /home/default 路径(用于持久化用户数据):

Image

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

Image

提示: 这是游戏存储目录,如果后续下载大量游戏且担心固态硬盘容量不足,可以改为机械硬盘的目录路径。

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

Image

提示: 如果后续文件映射出现问题,可以修改此设置,默认情况下无需修改(本教程后续更改为 root 权限):

Image

提示: 容器内默认用户的密码,一般情况下无需修改:

Image

提示: Web UI 访问端口,注意检查是否与其他容器端口冲突,默认设置通常无需修改:

Image

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

Image

提示: Sunshine 登录用户名和密码,如果服务需要映射到外网访问,建议修改默认凭证:

Image

软件源更换加速

创建一个名为 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 模板文件:

Image

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

    build:  
      context: .  
      dockerfile: Dockerfile

Image

最后进行检查,注意 Dockerfile 文件没有后缀格式。将原来的 .yml 模板文件重命名为 docker-compose.yaml,将原来的 env.txt 配置文件重命名为 .env(某些系统可能会隐藏以点开头的文件,修改后文件可能不可见):

Image

项目部署执行

创建一个名为 steam-headless 的项目,存储路径选择上述配置文件夹,然后导入 Compose 配置:

Image

点击“立即部署”按钮,正常情况下不应该出现错误提示:

Image

容器已经正常运行(由于网络模式设置为 host,无法通过快捷方式跳转到页面):

Image

查看容器日志,等待显卡驱动下载完成(下载速度通常较快):

Image

当看到特定信息时,说明可以访问 VNC 界面:

Image

服务器使用与游戏串流

在浏览器地址栏中输入 http://NAS的IP:8083 即可访问 VNC 界面:

Image

提示: 日志中必须显示特定信息才算启动完成,此时可以进行连接:

Image

点击连接按钮进入系统:

Image

成功进入系统界面(如果显示不正常,可以多次刷新网页):

Image

软件源更换加速

如果之前下载速度较慢,需要进行软件源更换(如果速度正常则可跳过此步骤)。有人可能好奇为什么需要两次换源操作,因为第一次换源可能存在某些问题,所以需要再次执行。如果不进行此操作,可能会卡在核显安装步骤。

手动进入容器终端,执行以下命令:

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

Image

执行完成后,重启容器:

Image

现在可以看到下载速度明显提升:

Image

注意旁边括号中的状态指示,确认是否正常打勾:

Image

硬件信息查看

点击左上角菜单,可以查看详细的硬件信息:

Image

可以查看处理器的详细信息:

Image

集成显卡和独立显卡的信息也能正常显示:

Image

Steam 安装与设置

所有准备工作完成后会切换到桌面界面(如果显示不正常可多次刷新网页),点击下载安装 Steam:

Image

等待 Steam 客户端下载和安装完成:

Image

提示: 点击左上角菜单,可以找到已安装的 Steam 应用程序:

Image

登录个人的 Steam 账号:

Image

点击左上角菜单,对 Steam 进行基本设置:

Image

在界面设置中,将语言修改为中文:

Image

在存储空间设置中,建议将游戏安装目录设置为 Game 目录:

Image

提示: 如果游戏运行过程中出现崩溃问题,可以设置兼容性工具版本为 Proton 9.0-4:

Image

网络连接优化

返回 Steam 首页,如果内容没有正常显示:

Image

启用网络代理后立即见效,可以正常访问:

Image

也可以通过修改路由器 hosts 文件来解决(推荐方法),具体 IP 地址需要根据实际情况调整:

23.219.73.99 steamcommunity.com  
23.215.157.129 store.steampowered.com

游戏畅玩体验

随意选择一个游戏进行测试:

Image

可以灵活选择游戏下载位置:

Image

下载和安装过程没有遇到问题,点击开始即可畅玩游戏:

Image

游戏运行一切正常:

Image

右上角的游戏声音输出也没有问题:

Image

在 NAS 系统中可以看到显卡被正常调用:

Image

由于测试游戏体积较小,系统资源占用并不高:

Image

Sunshine + Moonlight 串流配置

目前,Sunshine + Moonlight 组合是较为热门的低延迟远程游戏串流解决方案。其中,Sunshine 作为游戏串流服务端运行,Moonlight 作为客户端接收端,二者需要协同工作才能实现游戏的远程串流功能。

在浏览器地址栏中输入 https://NAS的IP:47990 访问 Sunshine 界面,注意需要使用 HTTPS 协议:

Image

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

Image

输入用户名和密码,默认凭证为 admin/admin:

Image

成功进入 Sunshine 控制面板:

Image

首先将界面语言设置为中文(保存应用后需要等待页面重新加载):

Image

根据自己使用的操作系统,下载对应的 Moonlight 客户端:
https://moonlight-stream.org/

Image

安装完成后,应用程序会自动搜索网络中的 Sunshine 服务端:

Image

如果一直无法自动搜索到服务器,可以手动输入主机 IP 地址:

Image

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

Image

切换到 Pin 码选项卡,输入配对信息(名称可以根据连接的设备类型填写):

Image

提示: 在 Sunshine 控制面板中点击“应用程序”,可以添加需要快捷打开的应用:

Image

配对成功后,就会进入应用选择界面:

Image

理论上此时应该能够正常连接,但实测中打开会导致系统卡死(VNC 和 Sunshine 网页端都无法访问,如有解决方法欢迎交流):

Image

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

打开应用后,不需要手动搜索,系统会自动发现服务器(在电脑和手机端都适用):

Image

连接后会自动切换到 Steam 大屏模式,使用手柄操作会更加方便:

Image

默认情况下没有进行手动画质设置,画面质量感觉一般(略有模糊):

Image

简单试玩游戏没有发现问题,操作延迟可以感知(通过 Wi-Fi 无线连接):

Image

由于测试游戏仅为 Demo 版本,系统资源占用并不高:

Image

独立显卡被正常调用并工作:

Image

故障排除与扩展功能

以下内容不一定所有用户都会遇到,仅作为问题记录供参考,有需要的用户可以查阅。

驱动下载卡住问题

通常卡住不是因为下载速度慢,而是进度没有更新看起来像没有运行:

Image

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

Image

VNC 连接失败处理

页面顶部显示 Failed to connect to server 错误:

Image

查看容器日志,有可能只是启动过程尚未完成(正常情况需要显示二行 INFO reaped unknown pid xxx 才算成功启动):

Image

如果使用的是带 privileged 标志的模板,可以尝试更换为普通模板:

Image

桌面加载异常解决

进入桌面后一直加载不正常,顶部状态栏没有显示:

Image

查看日志中是否有警告提示(例如这里显示 Sunshine 服务有异常):

Image

可以尝试重启容器解决:

Image

正常加载的桌面应该是这样的:

Image

桌面点击无响应

桌面顶部栏的按钮点击没有反应,可以尝试多次刷新网页:

Image

Steam 安装无反应

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

Image

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

Image

这样就会重新提示安装 Steam:

Image

如果仍然不行,可以尝试修改配置文件,重新构建项目:

Image

VNC 连接错误

提示 noVNC encountered an error,这种情况通常在长时间打开但没有操作时出现:

Image

刷新网页后通常就能恢复正常:

Image

Moonlight 串流问题

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

Image

Sunshine 的日志中显示有报错信息,目前还没有找到确切的解决方法:

Image

项目总结与评价

总体而言,Steam Headless 这款工具非常适合喜欢技术折腾的游戏玩家——通过 Docker 技术在 NAS 等设备上搭建游戏串流服务,无论是手机、电视还是其他电脑设备,都能实现远程游戏游玩的想法确实很有吸引力。特别是配合独立显卡使用,游戏体验会有明显提升,算是充分利用闲置硬件资源的好方法。不过在实际部署过程中还是会遇到不少问题,最基本的要求是安装好显卡驱动和相关工具,确保 Docker 环境能够正常调用显卡;Steam 网络访问问题需要通过修改 hosts 文件或使用网络代理解决;另外在测试过程中遇到了 Moonlight 串流问题,目前还没有找到有效的解决方法。

综合推荐指数: ⭐⭐⭐⭐(如果拥有独立显卡一定要尝试,充分榨干硬件性能)

实际使用体验: ⭐⭐⭐⭐(出乎意料地不错,除了遇到的串流问题)

部署难度评估: ⭐⭐⭐⭐(具备一定的技术门槛)