- Docker Desktop
- Go 1.26+
- Node 20+
cp .env.example .env
docker compose up -d postgres redis
./scripts/migrate.sh upCreate and manage maps through the web map administration UI.
docker compose up -d gameplay-node match-coordinator realtime-gateway apiThis starts the core playable backend services defined in docker-compose.yml.
To rebuild/recreate containers before starting them:
docker compose up -d --force-recreate gameplay-node match-coordinator realtime-gateway apiStart background workers when exercising moderation or Discord integration:
docker compose up -d moderation-worker
docker compose up -d discord-workerdiscord-worker requires the Discord bot, guild, channel, and role IDs in .env.
moderation-worker can run without the private risk engine. To exercise private
detector integration locally, run the sibling ../geoduels-risk-engine service
and set RISK_ENGINE_URL=http://host.docker.internal:8096 plus
RISK_ENGINE_TOKEN before starting Docker Compose.
Run the Next.js app separately:
cd apps/web
npm ci
cp .env.local.example .env.local
npm run devThe browser connects directly to the local backend services. Next.js does not proxy API, coordinator, or realtime traffic in development.
- Web:
http://localhost:3000 - API health:
http://localhost:8080/health - Queue health:
http://localhost:8090/health - Gameplay health:
http://localhost:8091/health - Realtime websocket base:
ws://localhost:8092/ws/{node} - Moderation worker health, when started:
http://localhost:8093/health - Discord worker health, when started:
http://localhost:8094/health
Start local PostgreSQL container:
docker compose up -d postgresRun migrations with the repository helper, which uses the pinned migration container:
MIGRATIONS_DB_URL='postgres://geoduels:geoduels@127.0.0.1:5432/geoduels?sslmode=disable' \
./scripts/migrate.sh upSet backend DB URL in .env:
POSTGRES_URL=postgres://geoduels:geoduels@localhost:5432/geoduels?sslmode=disableRestart backend services after changing .env:
docker compose up -d --force-recreate gameplay-node match-coordinator realtime-gateway apiStop local PostgreSQL:
docker compose stop postgresdocker compose downgo test ./...For a local multi-node Kubernetes test of websocket routing and gameplay-node scaling, use infra/k3s/overlays/k3d with a k3d cluster that has 3 agent nodes. The overlay expects PostgreSQL and Redis to stay on the host and be reachable from the cluster through host.k3d.internal.