Devidian / docker-spaceengineers

A Docker for Space Engineers Dedicated Server
82 stars 20 forks source link

Health check fails #58

Open imstupidwithlinux opened 4 months ago

imstupidwithlinux commented 4 months ago

tried putting my domain there the ipv4 localhost 127.0.0.1, nothing works

Status | starting

Failure count | 0

Last output | % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 42 100 42 0 0 106 0 --:--:-- --:--:-- --:--:-- 106
Status | unhealthy

Failure count | 477

Last output | % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 117 100 117 0 0 481 0 --:--:-- --:--:-- --:--:-- 479
Devidian commented 4 months ago

Hmm okay, im sorry to hear that. Im currently not running a server because of my heavy workload, so i can't say if it should work or it is broken currently. Maybe someone else can help here.

Devidian commented 1 month ago

maybe try my latest image image: devidian/spaceengineers:winestaging i recently updated os and wine to latest version. Might go into main soon.

TwirreM commented 1 week ago

I'm also having problems with this. The Steam GetServersAtAddress API responds with {"response":{"success":true,"servers":[]}} even though my server is running (I can play on it).

I devised a different health check script:

#!/bin/bash

# Payload is "TSource Engine Query" padded by ffffffff and with null terminator.
PAYLOAD="\xff\xff\xff\xff\x54\x53\x6f\x75\x72\x63\x65\x20\x45\x6e\x67\x69\x6e\x65\x20\x51\x75\x65\x72\x79\x00"

RESPONSE=$(printf $PAYLOAD | nc -u -w1 $PUBLIC_IP "27016") # Hardcoded port

if [ -n "$RESPONSE" ]; then
    exit 0
else
    exit 1
fi

I formulated this by inspecting the traffic between client and server as it connects. It seems as though the client sends "TSource Engine Query" to the server, which then responds with nine bytes which the client echoes. A handshake I guess. The above script only checks whether the server responds (within one second "-w1"), and does not echo the response back.

The port is hardcoded. Perhaps that should be an environment variable like the PUBLIC_IP.

It does add a dependency: netcat. It's only 140 kB though. Aside from the current healtcheck, curl only seems to be used once in Dockerfile which can be replaced by wget, so 480 kB can be saved by removing it if I'm right.