Kener
Kener is an open-source status page system for monitoring and alerting. It provides a modern interface for tracking service uptime and sending notifications.
Configuration
services:
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
expose:
- 6379
kener:
image: rajnandan1/kener:4.1.1
environment:
- TZ=${TZ}
- KENER_SECRET_KEY=${KENER_SECRET_KEY} # 🔐 API key / secret
- ORIGIN=${ORIGIN}
- REDIS_URL=${REDIS_URL}
- DATABASE_URL=${DATABASE_URL}
- RESEND_API_KEY=${RESEND_API_KEY} # 🔐 API key
- RESEND_SENDER_EMAIL=${RESEND_SENDER_EMAIL}
expose:
- 3000
volumes:
- data:/app/database
- ../files/uploads:/app/uploads
depends_on:
redis:
condition: service_healthy
restart: unless-stopped
volumes:
data:
redis_data:[variables]
main_domain = "${domain}"
KENER_SECRET_KEY = "${password:64}"
[config]
[[config.domains]]
serviceName = "kener"
port = 3000
host = "${main_domain}"
[config.env]
TZ = "Etc/UTC"
KENER_SECRET_KEY = "${KENER_SECRET_KEY}" # 🔐 API key / secret
ORIGIN = "http://localhost:3000"
REDIS_URL = "redis://redis:6379"
DATABASE_URL = "sqlite://./database/kener.sqlite.db"
RESEND_API_KEY = ""
RESEND_SENDER_EMAIL = ""
[[config.mounts]]
type = "volume"
source = "data"
target = "/app/database"
[[config.mounts]]
type = "volume"
source = "redis_data"
target = "/data"
[[config.mounts]]
type = "bind"
source = "../files/uploads"
target = "/app/uploads"Base64
To import this template in Dokploy: create a Compose service → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInNlcnZpY2VzOlxuICByZWRpczpcbiAgICBpbWFnZTogcmVkaXM6Ny1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIHJlZGlzX2RhdGE6L2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRFwiLCBcInJlZGlzLWNsaVwiLCBcInBpbmdcIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG4gICAgZXhwb3NlOlxuICAgICAgLSA2Mzc5XG5cbiAga2VuZXI6XG4gICAgaW1hZ2U6IHJham5hbmRhbjEva2VuZXI6NC4xLjFcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gVFo9JHtUWn1cbiAgICAgIC0gS0VORVJfU0VDUkVUX0tFWT0ke0tFTkVSX1NFQ1JFVF9LRVl9ICMg8J+UkCBBUEkga2V5IC8gc2VjcmV0XG4gICAgICAtIE9SSUdJTj0ke09SSUdJTn1cbiAgICAgIC0gUkVESVNfVVJMPSR7UkVESVNfVVJMfVxuICAgICAgLSBEQVRBQkFTRV9VUkw9JHtEQVRBQkFTRV9VUkx9XG4gICAgICAtIFJFU0VORF9BUElfS0VZPSR7UkVTRU5EX0FQSV9LRVl9ICMg8J+UkCBBUEkga2V5XG4gICAgICAtIFJFU0VORF9TRU5ERVJfRU1BSUw9JHtSRVNFTkRfU0VOREVSX0VNQUlMfVxuICAgIGV4cG9zZTpcbiAgICAgIC0gMzAwMFxuICAgIHZvbHVtZXM6XG4gICAgICAtIGRhdGE6L2FwcC9kYXRhYmFzZVxuICAgICAgLSAuLi9maWxlcy91cGxvYWRzOi9hcHAvdXBsb2Fkc1xuICAgIGRlcGVuZHNfb246XG4gICAgICByZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuXG52b2x1bWVzOlxuICBkYXRhOlxuICByZWRpc19kYXRhOlxuIiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbktFTkVSX1NFQ1JFVF9LRVkgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcblxuW2NvbmZpZ11cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcImtlbmVyXCJcbnBvcnQgPSAzMDAwXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiXG5cbltjb25maWcuZW52XVxuVFogPSBcIkV0Yy9VVENcIlxuS0VORVJfU0VDUkVUX0tFWSA9IFwiJHtLRU5FUl9TRUNSRVRfS0VZfVwiICMg8J+UkCBBUEkga2V5IC8gc2VjcmV0XG5PUklHSU4gPSBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiXG5SRURJU19VUkwgPSBcInJlZGlzOi8vcmVkaXM6NjM3OVwiXG5EQVRBQkFTRV9VUkwgPSBcInNxbGl0ZTovLy4vZGF0YWJhc2Uva2VuZXIuc3FsaXRlLmRiXCJcblJFU0VORF9BUElfS0VZID0gXCJcIlxuUkVTRU5EX1NFTkRFUl9FTUFJTCA9IFwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbnR5cGUgPSBcInZvbHVtZVwiXG5zb3VyY2UgPSBcImRhdGFcIlxudGFyZ2V0ID0gXCIvYXBwL2RhdGFiYXNlXCJcblxuW1tjb25maWcubW91bnRzXV1cbnR5cGUgPSBcInZvbHVtZVwiXG5zb3VyY2UgPSBcInJlZGlzX2RhdGFcIlxudGFyZ2V0ID0gXCIvZGF0YVwiXG5cbltbY29uZmlnLm1vdW50c11dXG50eXBlID0gXCJiaW5kXCJcbnNvdXJjZSA9IFwiLi4vZmlsZXMvdXBsb2Fkc1wiXG50YXJnZXQgPSBcIi9hcHAvdXBsb2Fkc1wiXG4iCn0=Links
Tags
monitoring, status-page, alerting, self-hosted
Version: 4.1.1