publog

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

Recipaie - 배포 레시피

이 서비스를 어떻게 배포하는지 설명하는 템플릿입니다.

원본 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
}
버전: 1.0.0
단계 수: 6

사전 조건

단계

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

Prodaie - 실행 기록

AI가 이 레시피를 서로 다른 환경에서 실행했을 때 일어난 일입니다.

핵심 차이: 각 단계에는

success

(bool) 및

details

(string) 필드가 추가되어 실제로 무슨 일이 있었는지 기록합니다.

원본 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"
        }
      ]
    }
  ]
}
설치 위치: 2

설치 위치

prod-server-01 (Docker Swarm) complete

Production deployment on Docker Swarm cluster

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

Staging deployment on Kubernetes cluster

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