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