Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_MONITOR_VERSION} --var app=mc-monitor --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz

ARG MC_SERVER_RUNNER_VERSION=1.13.5
ARG MC_SERVER_RUNNER_VERSION=1.14.0
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
Expand Down
4 changes: 2 additions & 2 deletions docs/commands.md → docs/sending-commands/commands.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Sending commands
title: With Docker
---

[RCON](http://wiki.vg/RCON) is enabled by default, so you can `exec` into the container to
Expand Down Expand Up @@ -66,4 +66,4 @@ and then Control-p Control-q to **detach**.

!!! info "RCON is required for fully interactive, color console"

RCON must be enabled, which is the default, in order to use a fully interactive console with auto-completion and colorized log output.
RCON must be enabled, which is the default, in order to use a fully interactive console with auto-completion and colorized log output.
76 changes: 76 additions & 0 deletions docs/sending-commands/websocket.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
title: With websocket
---

With `WEBSOCKET_CONSOLE` set to `true`, logs can be streamed, and commands sent, over a websocket connection.

## Password
A password must be supplied using the `Sec-WebSocket-Protocol` header. This is done by putting `mc-server-runner-ws-v1` in the first slot, and the password in the second. The password can be set with `RCON_PASSWORD` or `WEBSOCKET_PASSWORD`. The latter overwrites the former. Authentication can be disabled with `WEBSOCKET_DISABLE_AUTHENTICATION`.

## Allowed origins
A list of allowed origins should be supplied with `WEBSOCKET_ALLOWED_ORIGINS`. Origin checking can be disabled with `WEBSOCKET_DISABLE_ORIGIN_CHECK`.

## Listen address
The listen address and port can be set with `WEBSOCKET_ADDRESS` (defaults to `0.0.0.0:80`), but it's recommended to listen on all interfaces when running in Docker.

## Log history
When a connection is established, the last 50 (by default, configurable with `WEBSOCKET_LOG_BUFFER_SIZE`) log lines are sent with a `logHistory` type message.

## Docker port forwarding
Remember to forward the websocket port to the host:
```yaml title="compose.yaml"
services:
mc:
ports:
- '25565:25565'
- '80:80'
```

## Environment variables
| Environment Variable | Usage | Default |
| ---------------------------------- | ---------------------------------------------------------- | ------------ |
| `WEBSOCKET_CONSOLE` | Allow remote shell over websocket | `false` |
| `WEBSOCKET_ADDRESS` | Bind address for websocket server | `0.0.0.0:80` |
| `WEBSOCKET_DISABLE_ORIGIN_CHECK` | Disable checking if origin is trusted | `false` |
| `WEBSOCKET_ALLOWED_ORIGINS` | Comma-separated list of trusted origins | ` ` |
| `WEBSOCKET_PASSWORD` | Password will be the same as RCON_PASSWORD if unset | ` ` |
| `WEBSOCKET_DISABLE_AUTHENTICATION` | Disable websocket authentication | `false` |
| `WEBSOCKET_LOG_BUFFER_SIZE` | Number of log lines to save and send to connecting clients | `50` |

## API Schema
```ts title="API Schema"
interface StdinMessage {
type: "stdin";
data: string;
}

interface StdoutMessage {
type: "stdout";
data: string;
}

interface StderrMessage {
type: "stderr";
data: string;
}

interface LogHistoryMessage {
type: "logHistory";
lines: string[];
}

interface AuthFailureMessage {
type: "authFailure";
reason: string;
}

// Messages sent from Client -> Server
export type ClientMessage = StdinMessage;

// Messages sent from Server -> Client
export type ServerMessage =
| StdoutMessage
| StderrMessage
| LogHistoryMessage
| AuthFailureMessage;
```
Loading