MENU

在minecraft面板服务器部署owncast

在挂机刷游戏时,为了实时监控脚本运行状态,我们通常会使用远程桌面或直接开启显示器.但这些操作往往会触发分辨率刷新或鼠标位移,导致脚本失效.

虽然可以通过 OBS 推流至 YouTube 等平台解决,但在游戏中包含背景版权音乐时,容易触发版权限制.因此,自建 Owncast 成了最优解.鉴于常规 VPS 价格及线路延迟问题,利用便宜大碗的 Minecraft 面板服务器 部署推流服务是一个极具性价比的方案.


🚀 工作原理

Minecraft 面板通常通过 Docker 容器运行 java -jar server.jar.服务器主机通过将预分配的端口转发至该容器来实现玩家连接.

利用这一原理,我们可以将 server.jar 替换为自定义的二进制文件或脚本:

  1. 引导程序:将一个自定义的 JAR 包重命名为 server.jar.

  2. 劫持执行:该 JAR 包运行后会调用系统 Bash 执行 start.sh,从而实现在容器内运行任意程序(如 Owncast、HAProxy 等).


🛠️ 准备工作

面板要求

  • 支持上传或自定义 server.jar.

  • 容器镜像内包含 bash.

  • 已知可用面板:Pterodactyl、MCSManager、xserver.

工具清单

| 工具 | 说明 | 下载地址 |

| --- | --- | --- |

| 引导 JAR | 核心引导,用于调用 sh 脚本 | Google Drive |

| Supervisord | 进程守护,确保服务挂掉后自动重启 | GitHub Releases |

| Owncast | 开源自建直播推流服务 | GitHub Releases |

| FFmpeg | Owncast 必需的视频转码组件 | GitHub Releases |

| HAProxy | 端口复用工具(仅单端口面板需要) | GitHub Releases |

[!TIP]

如果担心引导 JAR 包的安全性,可以根据工作原理自行编写并编译.


📂 环境配置与文件上传

  1. 初始化环境:在面板中安装任意版本的 Minecraft (建议选择 Java 1.21 镜像).

  2. 清理文件:删除 worlds 目录及其他不必要的文件.

  3. 替换核心:将下载的“引导 JAR”上传并重命名为 server.jar.

  4. 创建目录结构

    • worlds/etc (存放配置文件)

    • worlds/usr/bin (存放二进制文件)

    • worlds/usr/local/owncast (存放 Owncast 主程序)

    • worlds/var/log (存放日志文件)

  5. 归位二进制文件 (请确保文件名准确):

    • supervisord -> worlds/usr/bin/supervisord

    • owncast -> worlds/usr/local/owncast/owncast

    • ffmpeg -> worlds/usr/bin/ffmpeg

    • haproxy -> worlds/usr/bin/haproxy


📝 配置文件说明

1. 启动脚本 (start.sh)

server.jar 同级目录下创建 start.sh,内容如下:


#!/bash

# 自动修改权限并启动进程守护

cur_dir=$(pwd)

echo "Current Directory: ${cur_dir}"

echo "User: $(whoami)"



chmod -R 0755 ${cur_dir}

export CUR_DIR=${cur_dir}



# 启动 Supervisor

${cur_dir}/worlds/usr/bin/supervisord -c ${cur_dir}/worlds/etc/supervisor.conf

[!IMPORTANT]

关键步骤:保存并点击面板“启动”.看到输出 Current Directory 后立即停止.记录该路径(例如 Pterodactyl 是 /home/container,MCSManager 是 /workspace),接下来的配置文件需据此修改.

2. Supervisor 配置

创建 worlds/etc/supervisor.conf


[program:owncast]

autorestart=true

directory=/home/container/worlds/usr/local/owncast

stderr_logfile=/home/container/worlds/var/log/owncast.err.log

stdout_logfile=/home/container/worlds/var/log/owncast.out.log

environment=OWNCAST_FFMPEG_PATH=/home/container/worlds/usr/bin/ffmpeg,PATH=/home/container/worlds/usr/bin:%(ENV_PATH)s

command=/home/container/worlds/usr/local/owncast/owncast -webserverport 8080 -rtmpport 1935

[!NOTE]

如果面板支持多端口,请将 webserverportrtmpport 替换为你记录的实际端口.


🔗 端口复用 (HAProxy)

如果面板仅提供一个端口,必须利用 HAProxy 根据流量协议进行转发.

  1. 创建 worlds/etc/haproxy.cfg

global

    log stdout format raw local0

    maxconn 4096

    daemon



defaults

    log     global

    mode    tcp

    timeout connect 5s

    timeout client  1m

    timeout server  1m



frontend fe_http_rtmp

    bind *:20186  # 替换为面板分配给你的实际端口

    mode tcp

    tcp-request inspect-delay 1s

    tcp-request content accept if HTTP

    use_backend http_back if HTTP

    default_backend rtmp_back



backend http_back

    server http_server 127.0.0.1:8080 check



backend rtmp_back

    server rtmp_server 127.0.0.1:1935 check
  1. supervisor.conf 末尾追加 HAProxy 守护

[program:haproxy]

command = /home/container/worlds/usr/bin/haproxy -f /home/container/worlds/etc/haproxy.cfg -db

directory = /home/container/worlds/etc

autostart = true

autorestart = true

stderr_logfile = /home/container/worlds/var/log/haproxy_err.log

stdout_logfile = /home/container/worlds/var/log/haproxy_out.log

💡 特定面板注意事项

MCSManager

  • 特权环境:MCSManager 的容器通常基于 Debian 且为 Root 权限.

  • 环境补全:在 start.shwhoami 下方增加 apt update && apt install haproxy -y.

  • 路径调整

    • 路径前缀应为 /workspace.

    • HAProxy 的 command 路径通常为 /usr/sbin/haproxy.

    • 面板默认端口请设为 25565.

xserver

懒的写了

都能用上xserver了,那应该能自己改好配置文件和解决问题.


🎬 最后

现在你可以启动面板并尝试推流了.

注意:通过 HAProxy 转发后,推流地址中的端口应填入 面板分配的外部端口,而非 Owncast 默认的端口

添加新评论