publog

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

Recipaie - Receta de despliegue

La plantilla que describe cómo desplegar este servicio.

JSON sin procesar
{
  "$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
}
Versión: 1.0.0
Pasos: 6

Requisito previo

Pasos

1 Determine deployment method
Por qué
Publog can run in multiple environments - choose what fits your infrastructure
Cuándo
Before starting deployment
Cómo
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
Verificar
Deployment method chosen and noted
Comentarios
  • 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
Por qué
Publog requires Redis Stack (Redis + RediSearch) for full-text log search
Cuándo
Before deploying publog service
Omitir si
Redis with RediSearch already running and accessible
Cómo
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
Verificar
redis-cli PING returns PONG, and FT._LIST works (RediSearch loaded)
Comentarios
  • 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
Por qué
Publog is distributed as a static Go binary via pubbin
Cuándo
When deploying new or updating existing installation
Omitir si
Current publog version matches target version
Cómo
Download from https://binary.dixt.io/download/publog/{version}/{platform} where platform is linux-amd64, linux-arm64, darwin-amd64, or darwin-arm64
Verificar
./publog --version shows expected version
Comentarios
  • 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
Por qué
Publog needs Redis connection and optional settings
Cuándo
Before starting the service
Cómo
Set environment variables: REDIS_HOST (required), REDIS_PORT (default 6379), PORT (HTTP port, default 8080), BINARY_REPO_KEY (optional, for auto-updates)
Verificar
Environment variables are set and accessible to the service
Comentarios
  • 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
Por qué
Start publog using your chosen deployment method
Cuándo
After configuration is ready
Cómo
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
Verificar
curl http://localhost:8080/health returns {"status":"ok"}
Comentarios
  • 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
Por qué
Confirm services can send logs to publog
Cuándo
After service is running
Cómo
Send a test log via API or configure Publifye Logger in your services to point to this publog instance
Verificar
Query logs via API or MCP - logs should appear within seconds

Prodaie - Registro de ejecución

Qué ocurrió cuando una IA ejecutó esta receta en distintos entornos.

Diferencia clave: Cada paso añade los campos

success

(bool) y

details

(string) para registrar lo que ocurrió realmente.

JSON sin procesar
{
  "$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"
        }
      ]
    }
  ]
}
Ubicaciones: 2

Ubicaciones

prod-server-01 (Docker Swarm) complete

Production deployment on Docker Swarm cluster

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

Staging deployment on Kubernetes cluster

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