Hosting Open Stage Control in a Docker Container

| 2 min read

I love Docker and hosting control applications in a central location so they can be accessed anywhere on the network. So I was very surprised to find no real solution available to host Open Stage Control in a Docker container. So I made one.

Advertisement

The problem with Open Stage Control

I love Open Stage Control; I even did an entire tutorial series on using it with Unreal. However, it's rather annoying, especially in my testing setup, to have to keep finding new versions, downloading them to new devices, and copying sessions around.

It seems like the perfect app to host somewhere centrally and access remotely. It is a web server, after all. Bring it up on an iPad, a laptop, or another source on your network. Despite a Node version being available for download, there don't seem to be any Docker containers online that host it.

Well, except for an 8-year-old image on Docker Hub. It looks pretty stale, though.

The Solution

So that's where I decided to step in.

It's pretty simple: just a Node slim image with OSC in it. The real benefit is in the action. The repo contains a standard CI/CD action that checks for an updated release of Open Stage Control every week, and if there is one, it builds a new Docker image with that release. Then Komodo, my Docker manager of choice, automatically picks up that there's an update, and I can update it with a single button press (or have it auto-update if I'm feeling dangerous).

How to use it

Docker Compose is probably the most straightforward way to get this set up and running.

services:
  open-stage-control:
    image: git.f-40.com/aiden/osc-docker:latest
    ports:
      - "8080:8080/tcp"
      - "8080:8080/udp"
    environment:
      OSC_PORT: 8080
      OSC_OSC_PORT: 8080
      OSC_REMOTE_ROOT: /data
      OSC_CACHE_DIR: /config
    volumes:
      - ./config:/config
      - ./data:/data

This is the basic setup. The TCP port, as well as OSC_PORT, is the port you use to access the Open Stage Control interface, where you're doing the controlling.

The UDP/OSC_OSC_PORT is the port used to receive incoming data via OSC, like what I did here: having Unreal send messages back to your control layout.

The setup doesn't really have a way to specify the IP and port of the thing you want to send OSC messages to. For that, you should use the target parameter either on the root of the Open Stage Control session or on each individual widget.

A screenshot of the OSC target section showing a ip and port selection entered.

Firewalls

They are great for security but a pain for sending random UDP and TCP packets around the network.

Ideally, if all your machines are on an air-gapped, non-internet network that you control, and you know all the devices that are on it, then it is generally pretty safe to disable your firewall.* The more secure and security-minded approach would be to allow the application you are trying to talk to through your firewall and allow it to receive UDP packets on the port you are using.

*I'm no network security expert so do your own homework.


Advertisement