Files
vlad.os d562b07027 + gitignore
+ add boilerplate
2026-07-18 15:07:47 +03:00

3.4 KiB

Barotrauma Admin

Ktor + Exposed + PostgreSQL backend for managing game-server tasks and executing remote commands.


Project Structure

src/main/kotlin/com/nano/
├── main.kt              # Application entry point + DI wiring
├── Routing.kt           # HTTP routes (tasks, exec)
├── model/
│   ├── Task.kt          # Task domain model + TaskStatus enum
│   └── ExecutorResult.kt
├── db/
│   ├── DatabaseConfig.kt # HikariCP + Exposed Database setup
│   └── Tables.kt         # Exposed Table definitions (TaskTable)
├── repository/
│   └── TaskRepository.kt # CRUD operations on TaskTable, returns model objects
├── service/
│   └── TaskService.kt    # Business logic: create, list, cancel tasks
└── executor/
    └── Executor.kt       # Bash command runner with log streaming

Layer flow

Model  →  DB (connection + table)  →  Repository  →  Service  →  Route

Local Development

# Start PostgreSQL + app
docker compose up --build

# Or run app without Docker (needs local Postgres)
./gradlew run

App is served at http://localhost:8080.

Environment variables

Variable Default Description
DATABASE_JDBC_URL jdbc:postgresql://localhost:5432/barotrauma-admin PostgreSQL JDBC URL
DATABASE_USER postgres DB user
DATABASE_PASSWORD postgres DB password
DATABASE_POOL_SIZE 10 HikariCP pool size

API Endpoints

Method Path Description
GET / Health check
GET /tasks List all tasks (?status=RUNNING to filter)
GET /tasks/{id} Get task by UUID
POST /tasks Create task {"name":"...", "payload":"..."}
POST /tasks/{id}/cancel Cancel task
DELETE /tasks/{id} Delete task
POST /exec Run bash command {"command":"ls -la"}

CI/CD (Gitea Actions)

The pipeline in .gitea/workflows/ci.yaml does:

  1. Build — compiles the project, runs tests
  2. Docker — builds image, pushes to registry
  3. Deploy — SSHes to target host, pulls image, restarts via docker-compose.remote.yml

Required secrets in Gitea

Secret Description
REGISTRY_URL Container registry host (e.g. gitea.example.com)
REGISTRY_USER Registry username
REGISTRY_PASSWORD Registry token / password
DEPLOY_HOST Remote server hostname
DEPLOY_PORT SSH port (default 22)
DEPLOY_USER Remote SSH user
DEPLOY_SSH_KEY Private SSH key for deployment
DEPLOY_PATH Target directory on remote host
DATABASE_JDBC_URL Production JDBC URL
DATABASE_USER Production DB user
DATABASE_PASSWORD Production DB password

Required variables in Gitea

Variable Default Description
DATABASE_POOL_SIZE 10 Connection pool size
HOST_PORT 8080 Host port mapping

Runner tag

Pipeline uses runs-on: ubuntu-24.04. Register your Gitea runner with:

gitea actions runner register --labels "ubuntu-24.04:docker://node:20-bookworm"

Remote deployment

On the target host, place docker-compose.remote.yml and a .env file with the variables listed above.

docker compose -f docker-compose.remote.yml pull
docker compose -f docker-compose.remote.yml up -d

Building locally

./gradlew build
./gradlew test
./gradlew installDist