在minecraft面板服务器部署owncast
在挂机刷游戏时,为了实时监控脚本运行状态,我们通常会使用远程桌面或直接开启显示器.但这些操作往往会触发分辨率刷新或鼠标位移,导致脚本失效.
虽然可以通过 OBS 推流至 YouTube 等平台解决,但在游戏中包含背景版权音乐时,容易触发版权限制.因此,自建 Owncast 成了最优解.鉴于常规 VPS 价格及线路延迟问题,利用便宜大碗的 Minecraft 面板服务器 部署推流服务是一个极具性价比的方案.
🚀 工作原理
Minecraft 面板通常通过 Docker 容器运行 java -jar server.jar.服务器主机通过将预分配的端口转发至该容器来实现玩家连接.
利用这一原理,我们可以将 server.jar 替换为自定义的二进制文件或脚本:
- 引导程序:将一个自定义的 JAR 包重命名为
server.jar. - 劫持执行:该 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 包的安全性,可以根据工作原理自行编写并编译.
📂 环境配置与文件上传
- 初始化环境:在面板中安装任意版本的 Minecraft (建议选择 Java 1.21 镜像).
- 清理文件:删除
worlds目录及其他不必要的文件. - 替换核心:将下载的“引导 JAR”上传并重命名为
server.jar. 创建目录结构:
worlds/etc(存放配置文件)worlds/usr/bin(存放二进制文件)worlds/usr/local/owncast(存放 Owncast 主程序)worlds/var/log(存放日志文件)
归位二进制文件 (请确保文件名准确):
supervisord->worlds/usr/bin/supervisordowncast->worlds/usr/local/owncast/owncastffmpeg->worlds/usr/bin/ffmpeghaproxy->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]
如果面板支持多端口,请将webserverport和rtmpport替换为你记录的实际端口.
🔗 端口复用 (HAProxy)
如果面板仅提供一个端口,必须利用 HAProxy 根据流量协议进行转发.
- 创建
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- 在
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.sh的whoami下方增加apt update && apt install haproxy -y. 路径调整:
- 路径前缀应为
/workspace. - HAProxy 的
command路径通常为/usr/sbin/haproxy. - 面板默认端口请设为
25565.
- 路径前缀应为
xserver
懒的写了
都能用上xserver了,那应该能自己改好配置文件和解决问题.
🎬 最后
现在你可以启动面板并尝试推流了.
注意:通过 HAProxy 转发后,推流地址中的端口应填入 面板分配的外部端口,而非 Owncast 默认的端口