+ gitignore
+ add boilerplate
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
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.
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.remote.yml pull
|
||||
docker compose -f docker-compose.remote.yml up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Building locally
|
||||
|
||||
```bash
|
||||
./gradlew build
|
||||
./gradlew test
|
||||
./gradlew installDist
|
||||
```
|
||||
Reference in New Issue
Block a user