Build and Docker Image
TKeeper is a Java 21 application built with Gradle.
Requirements
- JDK 21
- Docker
- Gradle wrapper (
./gradlew) is included in the repository
Clone the repository
git clone https://github.com/exploit-org/tkeeper
cd tkeeper
Build the runnable JAR
From the repository root:
./gradlew shadowJar
The output JAR is produced under:
build/libs/
Example:
build/libs/tkeeper-1.0.0.jar
Build the Docker image
Build the runnable JAR and the Docker image:
./gradlew dockerBuild
Image will have following tags:
exploit/tkeeper:{currentVersion}exploit/tkeeper:latest
Ports
TKeeper uses two TCP ports:
- 8080: external/client-facing API surface
- 9090: internal keeper-to-keeper communication
Warning
Treat the internal port (9090) as cluster-internal. Publish it only where required for keeper-to-keeper connectivity, and avoid exposing it to untrusted or public networks.
Docker Compose example
The example below publishes the public API port to the host and keeps the internal port available only on the Compose network.
services:
keeper-1:
image: exploit/tkeeper:1.0.0
container_name: keeper-1
environment:
KEEPER_DEV_ENABLED: "false"
KEEPER_CONFIG_LOCATION: /etc/tkeeper
volumes:
- ./config/keeper-1:/etc/tkeeper:ro
ports:
- "8081:8080"
expose:
- "9090" # INTERNAL PORT
networks: [tkeeper-net]
keeper-2:
image: exploit/tkeeper:1.0.0
container_name: keeper-2
environment:
KEEPER_DEV_ENABLED: "false"
KEEPER_CONFIG_LOCATION: /etc/tkeeper
volumes:
- ./config/keeper-2:/etc/tkeeper:ro
ports:
- "8082:8080"
expose:
- "9090" # INTERNAL PORT
networks: [tkeeper-net]
networks:
tkeeper-net:
driver: bridge
Note
TKeeper can load configuration from multiple sources. See Configuration.