Files
Orchestra/README.md
T
2026-05-08 14:05:53 +00:00

5.0 KiB

Orchestra

A simple one binary orchestrator for game server hosting, written in Go with a solidjs frontend.

Table of Contents

Project Synopsys

Orchestra is an visual orchestrator that allows you to setup services quickly.

This project is born out a need to host game services and to make it simple for friends and family and to keep it in one binary without the setup hassle. I would like it to be compliant to Pelican/Pterodactyl's Egg system so you can ingest those files and set up the game servers like a breeze.

TODO: Write more.

INFO: Code organization: https://go.dev/doc/modules/layout

ENV Variables

ENV Naming Breakdown

To ensure all env variables have a consistent naming scheme, I enforce the following for Orchestra:

ORCHESTRA_{API|WEB}_{ENV_VAR}

ENV Settings

ORCHESTRA_API_PORT=9810
ORCHESTRA_API_SECRET_KEY=string

ORCHESTRA_API_OPENTOFU_VERSION=string

ORCHESTRA_API_LOCAL_USERS_ENABLED=bool
ORCHESTRA_API_LOCAL_USERS_REGISTRATION=bool

ORCHESTRA_API_SQLITE_DATABASE_PATH=string // Not used when POSTGRES_ENABLED is set to true.

ORCHESTRA_API_POSTGRES_ENABLED=bool
ORCHESTRA_API_POSTGRES_HOST=string
ORCHESTRA_API_POSTGRES_USER=string
ORCHESTRA_API_POSTGRES_PASSWORD=string
ORCHESTRA_API_POSTGRES_DBNAME=string
ORCHESTRA_API_POSTGRES_PORT=string
ORCHESTRA_API_POSTGRES_TIMEZONE=string 

ORCHESTRA_API_OAUTH_ENABLED=bool
ORCHESTRA_API_OAUTH_SECRET=string
ORCHESTRA_API_OAUTH_AUTH_URL=string
ORCHESTRA_API_OAUTH_TOKEN_URL=string
ORCHESTRA_API_OAUTH_CLIENT_ID=string
ORCHESTRA_API_OAUTH_REDIRECT_URL=string

ORCHESTRA_WEB_PORT=9800

User Stories (Functionalities)

All marked user stories are implemented, those that are not are WIP.

User

  • As a user I want to access my service through a website to be able to see my services.
  • As a user I want to register myself (If OAuth is disabled) through the website to be able to see my services.
  • As a user I want to set 2FA myself through the website to be able to see my services.
  • As a user I want to login to the service to setup a server.
  • As a user I want to login to the service through my OAuth2 provider to setup a server.
  • As a user I want to have a dashboard to see all assigned services that I own.
  • As a user I want to start/stop a service.
  • As a user I want to connect to SSH and browse my containers filesystem to check mods.
  • As a user I want to import a Pelican/Pterodactyl Egg to setup a new service.
  • As a user I want to setup a new service like the above egg setup.
  • As a user I want to export a newly made egg so I can share it with a friend.
  • As a user I want to access my game server through \$URL/\$USER/\$GAME-UNIQUE-ID

Admin

  • As an administrator I want to invite a user to a service if OAuth is disabled.
  • As an administrator I want to recover a user if OAuth is disabled.
  • As an administrator I want to assign a service to a user.
  • As an administrator I want to see who is using the resources on the server.
  • As an administrator I want to set default limits so people can't abuse the service.
  • As an administrator I want to change limits so I can grant extended limits to friends.
  • As an administrator I want to access a service
  • As an administrator I want to disable a service
  • As an administrator I want to remove a service.

Service owner

  • As the owner of the service I want to host services on Docker/Podman/K3s/K8s.
  • As the owner of the service I want to make Orchestra use terraform to spawn services independently of backend.
  • As the owner of the service I want to select how to login and register, local or OAUTH2.
  • As the owner of the service I want to be able to register an account without OAuth2 authorizor.
  • As the owner of the service I want to restrict sign-ups.
  • As the owner of the service I want to have Orchestra make use of a public or private OAuth2 authorizor.
  • As the owner of the service I want to use Caddy as my reverse proxy.
  • As the owner of the service I want to make it simple to deploy on my own server via a container.
  • As the owner of the service I want to be able to check the logs for any suspicious behaviour with services.
  • As the owner of the service I want to ban access from countries/vpns that are known for hacking services.

Other

  • As an {$ACTOR} I want {$FUNCTION} because {$REASON}

Q & A

European Made

The author is European and living in the European Union. The software was created in Europe.