Skip to content

FinnGrndl/Nuclear-Option-Server-Panel

 
 

Repository files navigation

Nuclear Option Server Panel

A Flask control panel for running Nuclear Option dedicated servers. The recommended hosting path is Linux x86_64 with Docker. macOS is useful for development and Docker syntax checks. Windows process hosting is kept as a legacy/local option.

The panel binds to 127.0.0.1 by default. Do not put the Flask panel directly on the public internet.

Pick Your Start Path

  • Linux server: use Docker. This is the intended public hosting path.
  • macOS: run the panel locally for development, or use Docker Desktop for dry-runs/build checks.
  • Windows: use the legacy launchers for local/process hosting.

Public game hosting still needs normal game-server networking: forward/open the game UDP port and query UDP port. Keep the panel HTTP port and command TCP port private unless you have a VPN, Zero Trust tunnel, or hardened reverse proxy in front of them.

Linux Docker Hosting

Use a current Debian/Ubuntu x86_64 host with Docker Engine and the Docker Compose plugin.

cp .env.example .env

Edit .env before the first hosted start:

PANEL_BOOTSTRAP_USERNAME=owner
PANEL_BOOTSTRAP_PASSWORD=replace-with-a-long-random-password
SERVER_NAME=Public Server 1
GAME_PORT=7777
QUERY_PORT=7778
COMMAND_PORT=7779
ENABLE_COMMAND_PORT=false

Build the images:

docker compose -f docker/compose/base.yml -f docker/compose/linux.yml build

Install or update the game files into the persistent server volume:

docker compose -f docker/compose/base.yml -f docker/compose/linux.yml run --rm nuclear-option-server update

Start the panel:

docker compose -f docker/compose/base.yml -f docker/compose/linux.yml up -d panel

Start the example game server:

docker compose -f docker/compose/base.yml -f docker/compose/linux.yml --profile servers up -d nuclear-option-server

Open the panel from the host or through your private admin path:

http://127.0.0.1:5000

Useful Linux Docker commands:

docker compose -f docker/compose/base.yml -f docker/compose/linux.yml logs --tail=200 panel
docker compose -f docker/compose/base.yml -f docker/compose/linux.yml logs --tail=200 nuclear-option-server
docker compose -f docker/compose/base.yml -f docker/compose/linux.yml run --rm nuclear-option-server update
docker compose -f docker/compose/base.yml -f docker/compose/linux.yml down

More detail: Linux Docker Quickstart.

macOS Local Development

macOS can run the panel UI and tests. It cannot natively validate NuclearOptionServer.x86_64; real server validation needs Linux x86_64.

python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install -e .
python -m server_panel.app

Open:

http://127.0.0.1:5000

With Docker Desktop on macOS, you can still check Compose and build paths:

docker compose -f docker/compose/base.yml -f docker/compose/macos.yml config --quiet
SKIP_STEAMCMD=true docker compose -f docker/compose/base.yml -f docker/compose/macos.yml build nuclear-option-server
docker build -f docker/panel/Dockerfile -t nuclear-option-panel:local .

Dry-run validation:

scripts/validate_docker_server.sh --dry-run --platform linux/amd64
scripts/validate_nuclear_option_linux_server.sh --dry-run

More detail: macOS Docker Validation.

Windows Legacy Local Hosting

Windows process hosting is still available for local/legacy use. For public hosted servers, prefer Linux Docker.

Install Python 3, then run one of the launchers from the repository root:

start-panel.bat

or:

.\Start-Panel.ps1

The launchers self-elevate for firewall rule automation, install Python dependencies, set PYTHONPATH to src, and start:

python -m server_panel.app

Open:

http://127.0.0.1:5000

First Login

On first run the panel creates a bootstrap owner account and forces a password change. For hosted use, set PANEL_BOOTSTRAP_USERNAME and PANEL_BOOTSTRAP_PASSWORD before the first start. The Docker path reads these from .env.

Validate The Real Server

Real validation should be done on Linux x86_64 with network access to SteamCMD:

./scripts/validate_nuclear_option_linux_server.sh --verbose --no-cache
./scripts/validate_docker_server.sh --platform linux/amd64 --verbose --no-cache

Reports are written under:

data/validation/

Related docs:

Development Checks

python -m pip install -r requirements-dev.txt
python -m pip install -e .
python -m pytest
ruff check src tests
ruff format --check src tests
bandit -q -c pyproject.toml -r src/server_panel/config src/server_panel/runtime src/server_panel/security src/server_panel/services src/server_panel/storage

Current local validation notes are in Testing Status.

Documentation

Project Layout

  • src/server_panel/: panel source package
  • docker/panel/Dockerfile: panel image
  • docker/nuclear-option-server/: dedicated server image
  • docker/compose/base.yml: base Compose stack
  • docker/compose/linux.yml: Linux hosting overlay
  • docker/compose/macos.yml: macOS validation overlay
  • scripts/: validation scripts
  • docs/: deeper docs and investigation notes

About

A custom Nuclear Option server panel making it easier for everyone to build their own experience.

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 58.0%
  • JavaScript 26.8%
  • HTML 6.4%
  • Shell 4.9%
  • CSS 3.3%
  • Dockerfile 0.3%
  • Other 0.3%