publog

Deploy Publog centralized log viewer - supports Docker Compose, Docker Swarm, Kubernetes, or standalone binary

Recipaie - utrullingsoppskrift

Malen som beskriver hvordan denne tjenesten rulles ut.

Rå JSON
{
  "$schema": "https://recipaie.com/schemas/recipaie.schema.json",
  "name": "publog",
  "version": "1.0.0",
  "description": "Deploy Publog centralized log viewer - supports Docker Compose, Docker Swarm, Kubernetes, or standalone binary",
  "prerequisites": [
    "Redis 7+ with RediSearch module (Redis Stack recommended)",
    "One of: Docker, Docker Swarm, Kubernetes, or a Linux server for standalone deployment",
    "Network access to log.dixt.io for MCP client, or self-hosted instance"
  ],
  "steps": [
    {
      "order": 1,
      "what": "Determine deployment method",
      "why": "Publog can run in multiple environments - choose what fits your infrastructure",
      "when": "Before starting deployment",
      "how": "Assess your environment: (1) Docker Compose for single-node dev/small prod, (2) Docker Swarm for multi-node clusters, (3) Kubernetes for K8s clusters, (4) Standalone binary for non-containerized servers",
      "verify": "Deployment method chosen and noted",
      "comments": [
        "All methods use the same publog binary from binary.dixt.io",
        "Standalone binary is simplest - just download and run",
        "Container methods provide isolation and orchestration"
      ]
    },
    {
      "order": 2,
      "what": "Ensure Redis with RediSearch is available",
      "why": "Publog requires Redis Stack (Redis + RediSearch) for full-text log search",
      "when": "Before deploying publog service",
      "skip_if": "Redis with RediSearch already running and accessible",
      "how": "Deploy Redis Stack: (Docker) docker run -d --name redis-stack redis/redis-stack:latest, (K8s) use redis-stack helm chart, (Standalone) install redis-stack-server package",
      "verify": "redis-cli PING returns PONG, and FT._LIST works (RediSearch loaded)",
      "comments": [
        "Standard Redis without RediSearch will NOT work - search features require RediSearch",
        "Redis Stack includes Redis + RediSearch + RedisJSON",
        "For production: configure persistence and memory limits"
      ]
    },
    {
      "order": 3,
      "what": "Download publog binary",
      "why": "Publog is distributed as a static Go binary via pubbin",
      "when": "When deploying new or updating existing installation",
      "skip_if": "Current publog version matches target version",
      "how": "Download from https://binary.dixt.io/download/publog/{version}/{platform} where platform is linux-amd64, linux-arm64, darwin-amd64, or darwin-arm64",
      "verify": "./publog --version shows expected version",
      "comments": [
        "Binary is ~15-20MB, statically compiled (CGO_ENABLED=0)",
        "For containers: mount binary into Alpine container",
        "Auto-update available if BINARY_REPO_KEY is configured"
      ]
    },
    {
      "order": 4,
      "what": "Configure environment variables",
      "why": "Publog needs Redis connection and optional settings",
      "when": "Before starting the service",
      "how": "Set environment variables: REDIS_HOST (required), REDIS_PORT (default 6379), PORT (HTTP port, default 8080), BINARY_REPO_KEY (optional, for auto-updates)",
      "verify": "Environment variables are set and accessible to the service",
      "comments": [
        "For Docker: use -e flags or env_file",
        "For K8s: use ConfigMap/Secret",
        "For systemd: use Environment= in unit file",
        "For standalone: export in shell or .env file"
      ]
    },
    {
      "order": 5,
      "what": "Deploy the service",
      "why": "Start publog using your chosen deployment method",
      "when": "After configuration is ready",
      "how": "Choose method: (Docker Compose) docker compose up -d, (Docker Swarm) docker stack deploy -c compose.yml publog, (Kubernetes) kubectl apply -f publog-deployment.yaml, (Standalone) ./publog or use systemd service",
      "verify": "curl http://localhost:8080/health returns {\"status\":\"ok\"}",
      "comments": [
        "For production: place behind reverse proxy (Traefik, nginx, Ingress)",
        "Health endpoint doesn't require authentication",
        "Logs available at stdout (Docker) or via journalctl (systemd)"
      ]
    },
    {
      "order": 6,
      "what": "Verify log ingestion",
      "why": "Confirm services can send logs to publog",
      "when": "After service is running",
      "how": "Send a test log via API or configure Publifye Logger in your services to point to this publog instance",
      "verify": "Query logs via API or MCP - logs should appear within seconds"
    }
  ],
  "step_count": 6
}
Versjon: 1.0.0
Steg: 6

Forutsetning

Steg

1 Determine deployment method
Hvorfor
Publog can run in multiple environments - choose what fits your infrastructure
Når
Before starting deployment
Hvordan
Assess your environment: (1) Docker Compose for single-node dev/small prod, (2) Docker Swarm for multi-node clusters, (3) Kubernetes for K8s clusters, (4) Standalone binary for non-containerized servers
Verifiser
Deployment method chosen and noted
Kommentarer
  • All methods use the same publog binary from binary.dixt.io
  • Standalone binary is simplest - just download and run
  • Container methods provide isolation and orchestration
2 Ensure Redis with RediSearch is available
Hvorfor
Publog requires Redis Stack (Redis + RediSearch) for full-text log search
Når
Before deploying publog service
Hopp over hvis
Redis with RediSearch already running and accessible
Hvordan
Deploy Redis Stack: (Docker) docker run -d --name redis-stack redis/redis-stack:latest, (K8s) use redis-stack helm chart, (Standalone) install redis-stack-server package
Verifiser
redis-cli PING returns PONG, and FT._LIST works (RediSearch loaded)
Kommentarer
  • Standard Redis without RediSearch will NOT work - search features require RediSearch
  • Redis Stack includes Redis + RediSearch + RedisJSON
  • For production: configure persistence and memory limits
3 Download publog binary
Hvorfor
Publog is distributed as a static Go binary via pubbin
Når
When deploying new or updating existing installation
Hopp over hvis
Current publog version matches target version
Hvordan
Download from https://binary.dixt.io/download/publog/{version}/{platform} where platform is linux-amd64, linux-arm64, darwin-amd64, or darwin-arm64
Verifiser
./publog --version shows expected version
Kommentarer
  • Binary is ~15-20MB, statically compiled (CGO_ENABLED=0)
  • For containers: mount binary into Alpine container
  • Auto-update available if BINARY_REPO_KEY is configured
4 Configure environment variables
Hvorfor
Publog needs Redis connection and optional settings
Når
Before starting the service
Hvordan
Set environment variables: REDIS_HOST (required), REDIS_PORT (default 6379), PORT (HTTP port, default 8080), BINARY_REPO_KEY (optional, for auto-updates)
Verifiser
Environment variables are set and accessible to the service
Kommentarer
  • For Docker: use -e flags or env_file
  • For K8s: use ConfigMap/Secret
  • For systemd: use Environment= in unit file
  • For standalone: export in shell or .env file
5 Deploy the service
Hvorfor
Start publog using your chosen deployment method
Når
After configuration is ready
Hvordan
Choose method: (Docker Compose) docker compose up -d, (Docker Swarm) docker stack deploy -c compose.yml publog, (Kubernetes) kubectl apply -f publog-deployment.yaml, (Standalone) ./publog or use systemd service
Verifiser
curl http://localhost:8080/health returns {"status":"ok"}
Kommentarer
  • For production: place behind reverse proxy (Traefik, nginx, Ingress)
  • Health endpoint doesn't require authentication
  • Logs available at stdout (Docker) or via journalctl (systemd)
6 Verify log ingestion
Hvorfor
Confirm services can send logs to publog
Når
After service is running
Hvordan
Send a test log via API or configure Publifye Logger in your services to point to this publog instance
Verifiser
Query logs via API or MCP - logs should appear within seconds

Prodaie - utførelsesrapport

Hva som skjedde da en KI kjørte denne oppskriften i ulike miljøer.

Viktig forskjell: Hvert steg legger til

success

(bool) og

details

(string)-felter for å registrere hva som faktisk skjedde.

Rå JSON
{
  "$schema": "https://recipaie.com/schemas/prodaie.schema.json",
  "name": "publog",
  "description": "Deployment record of Publog to production (Docker Swarm) and staging (Kubernetes) environments",
  "locations": [
    {
      "path": "prod-server-01 (Docker Swarm)",
      "description": "Production deployment on Docker Swarm cluster",
      "status": "complete",
      "step_count": 6,
      "steps": [
        {
          "order": 1,
          "what": "Determine deployment method",
          "why": "Publog can run in multiple environments - choose what fits your infrastructure",
          "when": "Before starting deployment",
          "how": "Assess your environment",
          "verify": "Deployment method chosen and noted",
          "success": true,
          "details": "chose Docker Swarm for multi-node HA deployment"
        },
        {
          "order": 2,
          "what": "Ensure Redis with RediSearch is available",
          "why": "Publog requires Redis Stack for full-text log search",
          "when": "Before deploying publog service",
          "skip_if": "Redis with RediSearch already running",
          "how": "Deploy Redis Stack",
          "verify": "redis-cli PING returns PONG",
          "success": true,
          "details": "Redis Stack already running at redis.internal:6379"
        },
        {
          "order": 3,
          "what": "Download publog binary",
          "why": "Publog is distributed as a static Go binary via pubbin",
          "when": "When deploying new or updating existing installation",
          "skip_if": "Current publog version matches target version",
          "how": "Download from binary.dixt.io",
          "verify": "./publog --version shows expected version",
          "success": true,
          "details": "downloaded v0.3.2 for linux-amd64"
        },
        {
          "order": 4,
          "what": "Configure environment variables",
          "why": "Publog needs Redis connection and optional settings",
          "when": "Before starting the service",
          "how": "Set environment variables in compose.yml",
          "verify": "Environment variables are set",
          "success": true,
          "details": "configured REDIS_HOST, PORT, BINARY_REPO_KEY in compose.yml"
        },
        {
          "order": 5,
          "what": "Deploy the service",
          "why": "Start publog using Docker Swarm",
          "when": "After configuration is ready",
          "how": "docker stack deploy -c compose.yml publog",
          "verify": "curl http://localhost:8080/health returns ok",
          "success": true,
          "details": "service deployed, health check passing"
        },
        {
          "order": 6,
          "what": "Verify log ingestion",
          "why": "Confirm services can send logs to publog",
          "when": "After service is running",
          "how": "Check logs via MCP",
          "verify": "Query logs via API or MCP",
          "success": true,
          "details": "logs from 12 services visible within seconds"
        }
      ]
    },
    {
      "path": "staging-k8s (Kubernetes)",
      "description": "Staging deployment on Kubernetes cluster",
      "status": "complete",
      "step_count": 6,
      "steps": [
        {
          "order": 1,
          "what": "Determine deployment method",
          "why": "Publog can run in multiple environments",
          "when": "Before starting deployment",
          "how": "Assess your environment",
          "verify": "Deployment method chosen",
          "success": true,
          "details": "chose Kubernetes for integration with existing K8s cluster"
        },
        {
          "order": 2,
          "what": "Ensure Redis with RediSearch is available",
          "why": "Publog requires Redis Stack for full-text log search",
          "when": "Before deploying publog service",
          "skip_if": "Redis with RediSearch already running",
          "how": "Deploy Redis Stack via Helm",
          "verify": "redis-cli PING returns PONG",
          "success": true,
          "details": "deployed Bitnami Redis Stack helm chart to redis namespace"
        },
        {
          "order": 3,
          "what": "Download publog binary",
          "why": "Publog is distributed as a static Go binary",
          "when": "When deploying new or updating",
          "skip_if": "Current version matches target",
          "how": "Build container image with binary",
          "verify": "Container image built successfully",
          "success": true,
          "details": "built publog:0.3.2 image with alpine base"
        },
        {
          "order": 4,
          "what": "Configure environment variables",
          "why": "Publog needs Redis connection",
          "when": "Before starting the service",
          "how": "Create ConfigMap and Secret",
          "verify": "kubectl get configmap publog-config",
          "success": true,
          "details": "created ConfigMap with REDIS_HOST pointing to redis-stack.redis.svc"
        },
        {
          "order": 5,
          "what": "Deploy the service",
          "why": "Start publog using Kubernetes",
          "when": "After configuration is ready",
          "how": "kubectl apply -f publog-deployment.yaml",
          "verify": "kubectl get pods -l app=publog shows Running",
          "success": true,
          "details": "2 replicas running behind ClusterIP service"
        },
        {
          "order": 6,
          "what": "Verify log ingestion",
          "why": "Confirm services can send logs",
          "when": "After service is running",
          "how": "Port-forward and check",
          "verify": "Logs visible via API",
          "success": true,
          "details": "ingress configured, logs flowing from staging apps"
        }
      ]
    }
  ]
}
Steder: 2

Steder

prod-server-01 (Docker Swarm) complete

Production deployment on Docker Swarm cluster

Steg: 6
1 Determine deployment method
Hvorfor
Publog can run in multiple environments - choose what fits your infrastructure
Når
Before starting deployment
Hvordan
Assess your environment
Verifiser
Deployment method chosen and noted
Resultat
chose Docker Swarm for multi-node HA deployment
2 Ensure Redis with RediSearch is available
Hvorfor
Publog requires Redis Stack for full-text log search
Når
Before deploying publog service
Hopp over hvis
Redis with RediSearch already running
Hvordan
Deploy Redis Stack
Verifiser
redis-cli PING returns PONG
Resultat
Redis Stack already running at redis.internal:6379
3 Download publog binary
Hvorfor
Publog is distributed as a static Go binary via pubbin
Når
When deploying new or updating existing installation
Hopp over hvis
Current publog version matches target version
Hvordan
Download from binary.dixt.io
Verifiser
./publog --version shows expected version
Resultat
downloaded v0.3.2 for linux-amd64
4 Configure environment variables
Hvorfor
Publog needs Redis connection and optional settings
Når
Before starting the service
Hvordan
Set environment variables in compose.yml
Verifiser
Environment variables are set
Resultat
configured REDIS_HOST, PORT, BINARY_REPO_KEY in compose.yml
5 Deploy the service
Hvorfor
Start publog using Docker Swarm
Når
After configuration is ready
Hvordan
docker stack deploy -c compose.yml publog
Verifiser
curl http://localhost:8080/health returns ok
Resultat
service deployed, health check passing
6 Verify log ingestion
Hvorfor
Confirm services can send logs to publog
Når
After service is running
Hvordan
Check logs via MCP
Verifiser
Query logs via API or MCP
Resultat
logs from 12 services visible within seconds
staging-k8s (Kubernetes) complete

Staging deployment on Kubernetes cluster

Steg: 6
1 Determine deployment method
Hvorfor
Publog can run in multiple environments
Når
Before starting deployment
Hvordan
Assess your environment
Verifiser
Deployment method chosen
Resultat
chose Kubernetes for integration with existing K8s cluster
2 Ensure Redis with RediSearch is available
Hvorfor
Publog requires Redis Stack for full-text log search
Når
Before deploying publog service
Hopp over hvis
Redis with RediSearch already running
Hvordan
Deploy Redis Stack via Helm
Verifiser
redis-cli PING returns PONG
Resultat
deployed Bitnami Redis Stack helm chart to redis namespace
3 Download publog binary
Hvorfor
Publog is distributed as a static Go binary
Når
When deploying new or updating
Hopp over hvis
Current version matches target
Hvordan
Build container image with binary
Verifiser
Container image built successfully
Resultat
built publog:0.3.2 image with alpine base
4 Configure environment variables
Hvorfor
Publog needs Redis connection
Når
Before starting the service
Hvordan
Create ConfigMap and Secret
Verifiser
kubectl get configmap publog-config
Resultat
created ConfigMap with REDIS_HOST pointing to redis-stack.redis.svc
5 Deploy the service
Hvorfor
Start publog using Kubernetes
Når
After configuration is ready
Hvordan
kubectl apply -f publog-deployment.yaml
Verifiser
kubectl get pods -l app=publog shows Running
Resultat
2 replicas running behind ClusterIP service
6 Verify log ingestion
Hvorfor
Confirm services can send logs
Når
After service is running
Hvordan
Port-forward and check
Verifiser
Logs visible via API
Resultat
ingress configured, logs flowing from staging apps