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