2026-03-05 15:25:52 -06:00
<p align="center">
2026-05-07 21:06:09 -05:00
<img src="https://raw.githubusercontent.com/vxaboveground/Overlord/refs/heads/main/Overlord-Server/public/assets/overlord.png" alt="Overlord" width="280" />
2026-03-05 15:25:52 -06:00
</p>
2026-03-05 00:04:26 -06:00
# Overlord
# [TELEGRAM SERVER JOIN NOW NO EXCUSES WE GIVE SUPPORT AND IT'S FUN](https://t.me/WindowsBatch)
Hello, I made this project for fun.
2026-05-07 21:06:09 -05:00
The server is TypeScript on Node/Bun. The client is Go. Operators talk to the server through a web panel or the Electron desktop app, and agents connect over encrypted WebSockets.
Docker is the easiest way to run it.
2026-05-03 01:55:57 +01:00
2026-03-10 10:02:50 -05:00
---
2026-03-07 11:35:31 +00:00
2026-03-10 10:02:50 -05:00
- [Quick Start (Docker) ](#quick-start-docker )
2026-05-07 21:06:09 -05:00
- [Windows ](#windows )
- [Linux ](#linux )
- [macOS ](#macos )
2026-03-10 10:02:50 -05:00
- [No Docker (.bat / .sh) ](#no-docker-bat--sh )
- [Production Package Scripts ](#production-package-scripts )
- [Docker Notes (TLS, reverse proxy, cache) ](#docker-notes-tls-reverse-proxy-cache )
2026-03-07 11:35:31 +00:00
2026-03-10 10:02:50 -05:00
---
2026-03-07 11:35:31 +00:00
2026-03-10 10:02:50 -05:00
## Quick Start (Docker)
2026-03-07 11:35:31 +00:00
2026-05-07 21:06:09 -05:00
Pick your OS below. Each section is self-contained: install Docker, get the project, start it.
2026-03-07 11:35:31 +00:00
2026-05-07 21:06:09 -05:00
> Windows and macOS use `docker-compose.windows.yml`. Linux uses the default `docker-compose.yml` (host networking).
2026-04-13 13:38:13 -05:00
2026-05-07 21:06:09 -05:00
After the first start, open `https://localhost:5173` . Default login is `admin` / `admin` unless you set `OVERLORD_USER` / `OVERLORD_PASS` . First startup writes generated secrets to `data/save.json` (inside the container: `/app/data/save.json` ) — keep that file private and back it up.
2026-05-03 01:55:57 +01:00
2026-05-07 21:06:09 -05:00
---
2026-03-07 15:14:00 -06:00
2026-03-10 10:02:50 -05:00
### Windows
2026-03-07 15:14:00 -06:00
2026-05-03 01:55:57 +01:00
<details>
2026-05-07 21:06:09 -05:00
<summary>Step-by-step: Windows</summary>
<br>
**1. Install Docker Desktop**
Either from the website:
2026-03-07 15:14:00 -06:00
2026-03-10 10:02:50 -05:00
- https://docs.docker.com/desktop/setup/install/windows-install/
2026-03-07 15:14:00 -06:00
2026-05-07 21:06:09 -05:00
Or with winget:
2026-03-07 15:14:00 -06:00
2026-03-10 10:02:50 -05:00
```powershell
winget install -e - -id Docker . DockerDesktop
```
2026-03-05 00:04:26 -06:00
2026-05-07 21:06:09 -05:00
Start Docker Desktop once, then verify:
2026-03-07 16:19:04 -06:00
2026-03-10 10:02:50 -05:00
```powershell
docker - -version
docker compose version
```
2026-03-07 16:19:04 -06:00
2026-05-07 21:06:09 -05:00
**2. Get the project**
2026-04-04 20:42:54 -05:00
2026-05-07 21:06:09 -05:00
```powershell
git clone https : // github . com / vxaboveground / Overlord . git
cd Overlord
```
**3. Start it**
2026-04-04 20:42:54 -05:00
```powershell
docker compose -f docker-compose . windows . yml up -d
```
2026-05-07 21:06:09 -05:00
**4. Open the panel**
2026-04-04 20:42:54 -05:00
2026-05-07 21:06:09 -05:00
```text
https://localhost:5173
2026-04-04 20:42:54 -05:00
```
2026-05-07 21:06:09 -05:00
**5. Update later**
2026-03-07 16:19:04 -06:00
2026-05-07 21:06:09 -05:00
```powershell
docker compose -f docker-compose . windows . yml down
docker compose -f docker-compose . windows . yml pull
docker compose -f docker-compose . windows . yml up -d
```
2026-03-07 16:19:04 -06:00
2026-05-07 21:06:09 -05:00
**6. Stop**
```powershell
docker compose -f docker-compose . windows . yml down
```
</details>
---
### Linux
<details>
<summary>Step-by-step: Linux (Debian / Ubuntu / Kali)</summary>
<br>
**1. Install Docker**
Official docs: https://docs.docker.com/engine/install/debian/
2026-03-07 16:19:04 -06:00
2026-03-10 10:02:50 -05:00
Set up Docker's apt repository:
2026-03-07 16:19:04 -06:00
2026-03-10 10:02:50 -05:00
```bash
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
2026-03-07 16:19:04 -06:00
2026-03-10 10:02:50 -05:00
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
2026-03-05 00:04:26 -06:00
2026-03-10 10:02:50 -05:00
sudo apt update
```
2026-05-07 21:06:09 -05:00
On a derivative distro (e.g. Kali), replace the codename expansion with the matching Debian codename, e.g. `bookworm` .
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
Install Docker:
2026-03-10 10:02:50 -05:00
```bash
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
2026-05-07 21:06:09 -05:00
Make sure the daemon is running:
2026-03-10 10:02:50 -05:00
```bash
sudo systemctl start docker
```
2026-05-07 21:06:09 -05:00
Optional — run Docker without sudo:
2026-03-10 10:02:50 -05:00
```bash
sudo usermod -aG docker $USER
newgrp docker
```
2026-05-07 21:06:09 -05:00
Verify:
2026-03-10 10:02:50 -05:00
```bash
docker --version
docker compose version
```
2026-05-07 21:06:09 -05:00
**2. Grab the compose file**
Make a folder for it, drop in the file, and you're done:
```bash
mkdir overlord && cd overlord
wget https://raw.githubusercontent.com/vxaboveground/Overlord/refs/heads/main/docker-compose.yml
```
No `wget` ? Use `curl` :
```bash
mkdir overlord && cd overlord
curl -O https://raw.githubusercontent.com/vxaboveground/Overlord/refs/heads/main/docker-compose.yml
```
**3. Start it**
```bash
docker compose up -d
```
The image is pulled automatically from `ghcr.io/vxaboveground/overlord:latest` on first run.
**4. Open the panel**
```text
https://localhost:5173
or
https://IP:5173
```
**5. Update later**
From the same folder:
```bash
docker compose down
docker compose pull
docker compose up -d
```
**6. Stop**
```bash
docker compose down
```
2026-05-03 01:55:57 +01:00
</details>
2026-05-07 21:06:09 -05:00
---
2026-03-10 10:02:50 -05:00
### macOS
2026-05-03 01:55:57 +01:00
<details>
2026-05-07 21:06:09 -05:00
<summary>Step-by-step: macOS</summary>
<br>
2026-05-03 01:55:57 +01:00
2026-05-07 21:06:09 -05:00
**1. Install Docker Desktop**
Either from the website:
2026-03-10 10:02:50 -05:00
- https://docs.docker.com/desktop/setup/install/mac-install/
2026-05-07 21:06:09 -05:00
Or with Homebrew:
2026-03-10 10:02:50 -05:00
```bash
brew install --cask docker
```
Start Docker Desktop once, then verify:
```bash
docker --version
docker compose version
```
2026-05-07 21:06:09 -05:00
**2. Get the project**
2026-04-13 13:38:13 -05:00
2026-05-07 21:06:09 -05:00
```bash
git clone https://github.com/vxaboveground/Overlord.git
cd Overlord
```
**3. Start it**
macOS uses the same compose file as Windows:
2026-04-13 13:38:13 -05:00
```bash
docker compose -f docker-compose.windows.yml up -d
```
2026-05-07 21:06:09 -05:00
**4. Open the panel**
```text
https://localhost:5173
```
**5. Update later**
2026-04-13 13:38:13 -05:00
```bash
2026-05-07 21:06:09 -05:00
docker compose -f docker-compose.windows.yml down
docker compose -f docker-compose.windows.yml pull
docker compose -f docker-compose.windows.yml up -d
```
**6. Stop**
```bash
docker compose -f docker-compose.windows.yml down
2026-04-13 13:38:13 -05:00
```
2026-05-03 01:55:57 +01:00
</details>
2026-05-07 21:06:09 -05:00
---
2026-03-10 10:02:50 -05:00
## No Docker (.bat / .sh)
2026-05-07 21:06:09 -05:00
If you don't want Docker, use the included scripts.
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
Prerequisites:
2026-03-10 10:02:50 -05:00
- Bun in PATH
- Go 1.21+ in PATH
### Windows
Development mode (starts server + client):
```bat
start-dev.bat
```
Production mode (build + run server executable):
```bat
start-prod.bat
```
2026-05-03 01:55:57 +01:00
Build client binaries (adds client builds to the build queue):
2026-03-10 10:02:50 -05:00
```bat
build-clients.bat
```
### Linux / macOS
Make scripts executable once:
```bash
chmod +x start-dev.sh start-dev-server.sh start-dev-client.sh start-prod.sh build-prod-package.sh
```
2026-05-07 21:06:09 -05:00
Development mode (server in background, client in foreground):
2026-03-10 10:02:50 -05:00
```bash
./start-dev.sh
```
2026-05-07 21:06:09 -05:00
Only server, or only client:
2026-03-10 10:02:50 -05:00
```bash
./start-dev.sh server
./start-dev.sh client
```
Production mode:
```bash
./start-prod.sh
```
2026-05-07 21:06:09 -05:00
---
2026-05-03 01:55:57 +01:00
2026-03-10 10:02:50 -05:00
## Production Package Scripts
Build a production-ready package where the server can still build client binaries at runtime.
Windows:
2026-03-05 00:04:26 -06:00
```bat
build-prod-package.bat
```
2026-05-07 21:06:09 -05:00
Output: `release/`
Linux / macOS:
2026-03-05 00:04:26 -06:00
```bash
./build-prod-package.sh
```
2026-05-07 21:06:09 -05:00
Output: `release/prod-package/`
2026-03-05 00:04:26 -06:00
2026-05-07 21:06:09 -05:00
---
2026-03-10 10:02:50 -05:00
## Docker Notes (TLS, reverse proxy, cache)
2026-05-07 21:06:09 -05:00
Notes on configs and workarounds.
2026-05-03 01:55:57 +01:00
2026-03-10 10:02:50 -05:00
### BuildKit cache for faster rebuilds
2026-05-07 21:06:09 -05:00
`docker-compose.yml` ships with `build.cache_from` and `build.cache_to` pointing at `.docker-cache/buildx` . Local builds reuse it automatically — no extra setup.
2026-05-03 01:55:57 +01:00
2026-03-10 10:02:50 -05:00
### Runtime client build cache
2026-03-05 00:04:26 -06:00
2026-03-10 10:02:50 -05:00
The compose setup uses a persistent volume for runtime client builds:
2026-03-05 00:04:26 -06:00
2026-05-07 21:06:09 -05:00
- Volume: `overlord-client-build-cache`
- Mount: `/app/client-build-cache`
- Env: `OVERLORD_CLIENT_BUILD_CACHE_DIR` (default `/app/client-build-cache` )
2026-05-03 01:55:57 +01:00
2026-03-10 10:02:50 -05:00
### Certbot TLS
2026-05-07 21:06:09 -05:00
To use Let's Encrypt certificates in production Docker:
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
1. Set `OVERLORD_TLS_CERTBOT_ENABLED=true`
2. Set `OVERLORD_TLS_CERTBOT_DOMAIN=your-domain.com`
3. Mount letsencrypt into the container read-only, e.g. `/etc/letsencrypt:/etc/letsencrypt:ro`
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
Default cert paths:
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
```
cert: /etc/letsencrypt/live/<domain>/fullchain.pem
key: /etc/letsencrypt/live/<domain>/privkey.pem
ca: /etc/letsencrypt/live/<domain>/chain.pem
```
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
Override with:
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
- `OVERLORD_TLS_CERTBOT_LIVE_PATH`
- `OVERLORD_TLS_CERTBOT_CERT_FILE`
- `OVERLORD_TLS_CERTBOT_KEY_FILE`
- `OVERLORD_TLS_CERTBOT_CA_FILE`
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
### Reverse proxy TLS offload
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
If your platform terminates TLS before traffic reaches Overlord (Render, Caddy, nginx, etc.), set:
2026-03-10 10:02:50 -05:00
2026-05-07 21:06:09 -05:00
```
2026-03-13 15:37:18 -05:00
OVERLORD_TLS_OFFLOAD=true
OVERLORD_HEALTHCHECK_URL=http://localhost:5173/health
OVERLORD_PUBLISH_HOST=127.0.0.1
```
2026-05-07 21:06:09 -05:00
When enabled:
2026-03-13 15:37:18 -05:00
2026-05-07 21:06:09 -05:00
- Container serves internal HTTP on `0.0.0.0:$PORT`
- External URL stays `https://...` through your platform proxy
- Health checks should use `http://localhost:$PORT/health` inside the container
- Don't expose the internal container HTTP port directly to the internet
2026-03-13 15:37:18 -05:00
2026-05-07 21:06:09 -05:00
### Notes
2026-05-03 01:55:57 +01:00
2026-05-07 21:06:09 -05:00
- Keep `HOST=0.0.0.0` inside the container. Limit exposure with `OVERLORD_PUBLISH_HOST` , not the bind host.
- If your `.env` secret/password contains `$` , escape it as `$$` to avoid Docker Compose variable-expansion warnings.