OpenLogs

All tools

Kener

Status page generator that shows service uptime and incidents.

Replaces

Paid status page services, such as Statuspage.

All open-source alternatives to Statuspage

Difficulty

Difficulty: Medium

2 services (1 database or broker: redis), 2 volume mounts, no env values to set, no elevated host access. Heuristic score 3 of 11: medium.

Stack

TypeScript (language), Redis (database)

Deployment

docker_compose

Requirements

Not stated.

License

MIT (OSI-approved open source)

Read from github.com/rajnandan1/kener/blob/5bc658b/LICENSE

Business model

Unknown

The README at the pinned commit does not state a business model, so it stays unknown.

Source: github.com/rajnandan1/kener/blob/5bc658b/README.md, read on .

Repository

rajnandan1/kener

GitHub stats

Stars
5,212
Forks
311
Open issues and pull requests
64
Last push
2026-10-22
Latest release
v4.1.8
Released
2026-10-22

From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as MIT.

Compose file

Config check passed docker compose config exited 0 on this exact file on 2026-10-22.
docker-compose.yml Version 1
# =============================================================================
# Kener v4 — Production Docker Compose
#
# Usage:
#   docker compose up -d
#
# Defaults to the published image. To use a local build instead:
#   docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
# =============================================================================

services:
  # ---------------------------------------------------------------------------
  # Redis — required for BullMQ queues, caching, and scheduler
  # ---------------------------------------------------------------------------
  redis:
    image: redis:7-alpine
    container_name: kener-redis
    restart: unless-stopped
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  # ---------------------------------------------------------------------------
  # Kener — Status Page Application
  # ---------------------------------------------------------------------------
  kener:
    image: rajnandan1/kener:latest
    # For Alpine variant use: rajnandan1/kener:alpine
    container_name: kener
    environment:
      # ── Required ──
      KENER_SECRET_KEY: replace_me_with_a_random_string # generate: openssl rand -base64 32
      ORIGIN: http://localhost:3000 # public URL of your Kener instance (required for CSRF protection)
      REDIS_URL: redis://redis:6379

      # ── Database (default: SQLite) ──
      # DATABASE_URL: sqlite://./database/kener.sqlite.db
      # DATABASE_URL: postgresql://user:password@postgres:5432/kener
      # DATABASE_URL: mysql://user:password@mysql:3306/kener

      # ── Email (optional) ──
      # RESEND_API_KEY:
      # RESEND_SENDER_EMAIL:
      # SMTP_HOST:
      # SMTP_PORT:
      # SMTP_USER:
      # SMTP_PASSWORD:
      # SMTP_SENDER:
      # SMTP_SECURE: 0

      # ── Advanced (you likely don't need to change these) ──
      # PORT: 3000
      # KENER_BASE_PATH:
      # NODE_ENV: production          # already set in the image
    ports:
      - "3000:3000"
    volumes:
      - data:/app/database
    depends_on:
      redis:
        condition: service_healthy
    restart: unless-stopped

  # ---------------------------------------------------------------------------
  # Optional: PostgreSQL (uncomment and set DATABASE_URL above)
  # ---------------------------------------------------------------------------
  # postgres:
  #   image: postgres:16-alpine
  #   container_name: kener-postgres
  #   environment:
  #     POSTGRES_USER: kener
  #     POSTGRES_PASSWORD: change_me        # use a strong password
  #     POSTGRES_DB: kener
  #   volumes:
  #     - postgres_data:/var/lib/postgresql/data
  #   restart: unless-stopped
  #   healthcheck:
  #     test: ["CMD-SHELL", "pg_isready -U kener"]
  #     interval: 10s
  #     timeout: 5s
  #     retries: 5

  # ---------------------------------------------------------------------------
  # Optional: MySQL / MariaDB (uncomment and set DATABASE_URL above)
  # ---------------------------------------------------------------------------
  # mysql:
  #   image: mariadb:11
  #   container_name: kener-mysql
  #   environment:
  #     MYSQL_USER: kener
  #     MYSQL_PASSWORD: change_me            # use a strong password
  #     MYSQL_DATABASE: kener
  #     MYSQL_RANDOM_ROOT_PASSWORD: "true"
  #   volumes:
  #     - mysql_data:/var/lib/mysql
  #   restart: unless-stopped
  #   healthcheck:
  #     test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
  #     interval: 10s
  #     timeout: 5s
  #     retries: 5

volumes:
  data:
    name: kener_db
  redis_data:
    name: kener_redis
  # postgres_data:
  #   name: kener_postgres
  # mysql_data:
  #   name: kener_mysql

From the app's own repository: github.com/rajnandan1/kener/blob/5bc658b/docker-compose.yml.

Compose file from the app repository.

Install

  1. Docker with the Compose plugin (github.com/rajnandan1/kener/blob/5bc658b/docker-compose.yml)

    A host with Docker and the Docker Compose plugin. This entry runs from a compose file.

  2. Save the compose file as docker-compose.yml (github.com/rajnandan1/kener/blob/5bc658b/docker-compose.yml)

    Use the compose file shown above.

  3. Set the values the compose file needs (github.com/rajnandan1/kener/blob/5bc658b/docker-compose.yml)

    Replace the placeholder values listed under Gotchas.

  4. Start it (github.com/rajnandan1/kener/blob/5bc658b/docker-compose.yml)
    docker compose up -d
  5. Open the app (github.com/rajnandan1/kener/blob/5bc658b/docker-compose.yml)

    Open http://localhost:3000. The compose file publishes host port 3000 for the kener service.

Compose file check: config_ok on 2026-10-22.

Gotchas and maintenance

Gotchas

Signals

  • Open issues and pull requests: 64
  • Last push: 2026-10-22 (0 days before this page was built)
  • Latest release: v4.1.8 on 2026-10-22 (0 days before this page was built)