Dokploy

Rustrak (Full Stack)

Self-hosted error tracking compatible with Sentry SDKs. Includes server, web dashboard UI, and PostgreSQL. Written in Rust with <100MB memory footprint.

Rustrak (Full Stack) logo

Configuration

version: "3.8"

services:
  rustrak-server:
    image: abians7/rustrak-server:v0.2.1-postgres
    restart: unless-stopped
    environment:
      - HOST=0.0.0.0
      - PORT=8080
      - RUST_LOG=info
      - SSL_PROXY=true
      - DATABASE_URL=postgres://rustrak:${POSTGRES_PASSWORD}@postgres:5432/rustrak
      - SESSION_SECRET_KEY=${SESSION_SECRET_KEY}
      - CREATE_SUPERUSER=${CREATE_SUPERUSER}
    ports:
      - 8080
    depends_on:
      postgres:
        condition: service_healthy

  rustrak-ui:
    image: abians7/rustrak-ui:v0.1.6
    restart: unless-stopped
    environment:
      - RUSTRAK_API_URL=${RUSTRAK_API_URL}
    ports:
      - 3000
    depends_on:
      - rustrak-server

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_USER=rustrak
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=rustrak
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U rustrak -d rustrak"]
      interval: 10s
      timeout: 5s
      retries: 5
    expose:
      - 5432

volumes:
  postgres_data:
[variables]
main_domain = "${domain}"
api_domain = "${domain}"
postgres_password = "${password:32}"
session_secret_key = "${password:64}"
admin_email = "${email}"
admin_password = "${password:16}"
create_superuser = "${admin_email}:${admin_password}"
rustrak_api_url = "https://${api_domain}"

[config]
env = [
  "POSTGRES_PASSWORD=${postgres_password}",
  "SESSION_SECRET_KEY=${session_secret_key}",
  "CREATE_SUPERUSER=${create_superuser}",
  "RUSTRAK_API_URL=${rustrak_api_url}",
]

[[config.domains]]
serviceName = "rustrak-ui"
port = 3000
host = "${main_domain}"

[[config.domains]]
serviceName = "rustrak-server"
port = 8080
host = "${api_domain}"

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuc2VydmljZXM6XG4gIHJ1c3RyYWstc2VydmVyOlxuICAgIGltYWdlOiBhYmlhbnM3L3J1c3RyYWstc2VydmVyOnYwLjIuMS1wb3N0Z3Jlc1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIEhPU1Q9MC4wLjAuMFxuICAgICAgLSBQT1JUPTgwODBcbiAgICAgIC0gUlVTVF9MT0c9aW5mb1xuICAgICAgLSBTU0xfUFJPWFk9dHJ1ZVxuICAgICAgLSBEQVRBQkFTRV9VUkw9cG9zdGdyZXM6Ly9ydXN0cmFrOiR7UE9TVEdSRVNfUEFTU1dPUkR9QHBvc3RncmVzOjU0MzIvcnVzdHJha1xuICAgICAgLSBTRVNTSU9OX1NFQ1JFVF9LRVk9JHtTRVNTSU9OX1NFQ1JFVF9LRVl9XG4gICAgICAtIENSRUFURV9TVVBFUlVTRVI9JHtDUkVBVEVfU1VQRVJVU0VSfVxuICAgIHBvcnRzOlxuICAgICAgLSA4MDgwXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHBvc3RncmVzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuXG4gIHJ1c3RyYWstdWk6XG4gICAgaW1hZ2U6IGFiaWFuczcvcnVzdHJhay11aTp2MC4xLjZcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBSVVNUUkFLX0FQSV9VUkw9JHtSVVNUUkFLX0FQSV9VUkx9XG4gICAgcG9ydHM6XG4gICAgICAtIDMwMDBcbiAgICBkZXBlbmRzX29uOlxuICAgICAgLSBydXN0cmFrLXNlcnZlclxuXG4gIHBvc3RncmVzOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNi1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBQT1NUR1JFU19VU0VSPXJ1c3RyYWtcbiAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9JHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIC0gUE9TVEdSRVNfREI9cnVzdHJha1xuICAgIHZvbHVtZXM6XG4gICAgICAtIHBvc3RncmVzX2RhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTUQtU0hFTExcIiwgXCJwZ19pc3JlYWR5IC1VIHJ1c3RyYWsgLWQgcnVzdHJha1wiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcbiAgICBleHBvc2U6XG4gICAgICAtIDU0MzJcblxudm9sdW1lczpcbiAgcG9zdGdyZXNfZGF0YTpcbiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5hcGlfZG9tYWluID0gXCIke2RvbWFpbn1cIlxucG9zdGdyZXNfcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbnNlc3Npb25fc2VjcmV0X2tleSA9IFwiJHtwYXNzd29yZDo2NH1cIlxuYWRtaW5fZW1haWwgPSBcIiR7ZW1haWx9XCJcbmFkbWluX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjE2fVwiXG5jcmVhdGVfc3VwZXJ1c2VyID0gXCIke2FkbWluX2VtYWlsfToke2FkbWluX3Bhc3N3b3JkfVwiXG5ydXN0cmFrX2FwaV91cmwgPSBcImh0dHBzOi8vJHthcGlfZG9tYWlufVwiXG5cbltjb25maWddXG5lbnYgPSBbXG4gIFwiUE9TVEdSRVNfUEFTU1dPUkQ9JHtwb3N0Z3Jlc19wYXNzd29yZH1cIixcbiAgXCJTRVNTSU9OX1NFQ1JFVF9LRVk9JHtzZXNzaW9uX3NlY3JldF9rZXl9XCIsXG4gIFwiQ1JFQVRFX1NVUEVSVVNFUj0ke2NyZWF0ZV9zdXBlcnVzZXJ9XCIsXG4gIFwiUlVTVFJBS19BUElfVVJMPSR7cnVzdHJha19hcGlfdXJsfVwiLFxuXVxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJydXN0cmFrLXVpXCJcbnBvcnQgPSAzMDAwXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInJ1c3RyYWstc2VydmVyXCJcbnBvcnQgPSA4MDgwXG5ob3N0ID0gXCIke2FwaV9kb21haW59XCJcbiIKfQ==

Tags

monitoring, error-tracking, sentry, rust, observability, postgresql


Version: 0.2.1

On this page