redis

Deploy Redis in-memory data store - supports Docker, Kubernetes, package manager, or source build

Recipaie - 배포 레시피

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

원본 JSON
{
  "$schema": "https://recipaie.com/schemas/recipaie.schema.json",
  "name": "redis",
  "version": "1.0.0",
  "description": "Deploy Redis in-memory data store - supports Docker, Kubernetes, package manager, or source build",
  "prerequisites": [
    "One of: Docker, Kubernetes cluster, Linux package manager (apt/yum), or build tools for source compilation",
    "Sufficient memory for your dataset (Redis keeps data in RAM)",
    "Persistent storage if data durability is required"
  ],
  "steps": [
    {
      "order": 1,
      "what": "Choose Redis variant and deployment method",
      "why": "Redis comes in multiple flavors with different features",
      "when": "Before installation",
      "how": "Decide: (1) Standard Redis - basic key-value, (2) Redis Stack - includes RediSearch, RedisJSON, RedisGraph, (3) Redis Cluster - for horizontal scaling. Then choose deployment: Docker, K8s, package manager, or source build",
      "verify": "Variant and method documented",
      "comments": [
        "Redis Stack recommended if you need search or JSON support",
        "Standard Redis is lighter (~5MB) vs Redis Stack (~50MB)",
        "For production: always configure persistence (RDB/AOF)"
      ]
    },
    {
      "order": 2,
      "what": "Create data directory for persistence",
      "why": "Redis can persist data to disk for durability",
      "when": "If data persistence is required",
      "skip_if": "Using ephemeral/cache-only Redis, or directory already exists",
      "how": "Create directory with appropriate permissions: mkdir -p /var/lib/redis && chown redis:redis /var/lib/redis (Linux), or use named volume (Docker), or PersistentVolumeClaim (K8s)",
      "verify": "Directory exists and is writable by Redis process",
      "comments": [
        "Path varies by environment - /var/lib/redis is Linux convention",
        "Docker: use named volumes for persistence across container restarts",
        "K8s: use PVC with appropriate storage class"
      ]
    },
    {
      "order": 3,
      "what": "Install or deploy Redis",
      "why": "Get Redis running in your environment",
      "when": "After prerequisites are ready",
      "skip_if": "Redis already installed and running at target version",
      "how": "Choose method: (Docker) docker run -d --name redis -p 6379:6379 redis:7-alpine, (Docker Stack) redis:7-alpine with volume mounts, (K8s) use Bitnami Redis Helm chart, (Ubuntu/Debian) apt install redis-server, (RHEL/CentOS) dnf install redis, (macOS) brew install redis, (Source) download from redis.io and make install",
      "verify": "redis-cli ping returns PONG",
      "comments": [
        "Use redis:7-alpine for minimal image size (~30MB)",
        "For Redis Stack: redis/redis-stack:latest or redis/redis-stack-server:latest",
        "Production: always set maxmemory and eviction policy"
      ]
    },
    {
      "order": 4,
      "what": "Configure Redis settings",
      "why": "Default settings are for development - production needs tuning",
      "when": "Before exposing to production traffic",
      "skip_if": "Using Redis only for development/testing",
      "how": "Edit redis.conf or pass config via command line: Set maxmemory (e.g., 2gb), maxmemory-policy (e.g., allkeys-lru), save intervals for RDB, appendonly yes for AOF, requirepass for authentication",
      "verify": "redis-cli CONFIG GET maxmemory shows expected value",
      "comments": [
        "Docker: mount custom redis.conf or use --redis-server args",
        "K8s: use ConfigMap for redis.conf",
        "Critical settings: maxmemory, persistence, authentication"
      ]
    },
    {
      "order": 5,
      "what": "Enable authentication",
      "why": "Protect Redis from unauthorized access",
      "when": "If Redis is network-accessible (not just localhost)",
      "skip_if": "Redis bound to localhost only and not exposed externally",
      "how": "Set password: redis-cli CONFIG SET requirepass 'your-secure-password', or in redis.conf: requirepass your-secure-password",
      "verify": "redis-cli AUTH your-secure-password returns OK, unauthenticated commands fail with NOAUTH",
      "comments": [
        "Redis 6+ supports ACLs for fine-grained permissions",
        "Never expose Redis to public internet without authentication",
        "Use strong passwords - Redis is fast at trying passwords too"
      ]
    },
    {
      "order": 6,
      "what": "Verify Redis is operational",
      "why": "Confirm the deployment is working correctly",
      "when": "After deployment and configuration",
      "how": "Test basic operations: SET testkey testvalue, GET testkey, DEL testkey. Check memory: INFO memory. Check persistence: LASTSAVE",
      "verify": "All operations succeed, memory usage within limits"
    }
  ],
  "step_count": 6
}
버전: 1.0.0
단계 수: 6

사전 조건

단계

1 Choose Redis variant and deployment method
이유
Redis comes in multiple flavors with different features
시점
Before installation
방법
Decide: (1) Standard Redis - basic key-value, (2) Redis Stack - includes RediSearch, RedisJSON, RedisGraph, (3) Redis Cluster - for horizontal scaling. Then choose deployment: Docker, K8s, package manager, or source build
검증
Variant and method documented
비고
  • Redis Stack recommended if you need search or JSON support
  • Standard Redis is lighter (~5MB) vs Redis Stack (~50MB)
  • For production: always configure persistence (RDB/AOF)
2 Create data directory for persistence
이유
Redis can persist data to disk for durability
시점
If data persistence is required
건너뛰는 조건
Using ephemeral/cache-only Redis, or directory already exists
방법
Create directory with appropriate permissions: mkdir -p /var/lib/redis && chown redis:redis /var/lib/redis (Linux), or use named volume (Docker), or PersistentVolumeClaim (K8s)
검증
Directory exists and is writable by Redis process
비고
  • Path varies by environment - /var/lib/redis is Linux convention
  • Docker: use named volumes for persistence across container restarts
  • K8s: use PVC with appropriate storage class
3 Install or deploy Redis
이유
Get Redis running in your environment
시점
After prerequisites are ready
건너뛰는 조건
Redis already installed and running at target version
방법
Choose method: (Docker) docker run -d --name redis -p 6379:6379 redis:7-alpine, (Docker Stack) redis:7-alpine with volume mounts, (K8s) use Bitnami Redis Helm chart, (Ubuntu/Debian) apt install redis-server, (RHEL/CentOS) dnf install redis, (macOS) brew install redis, (Source) download from redis.io and make install
검증
redis-cli ping returns PONG
비고
  • Use redis:7-alpine for minimal image size (~30MB)
  • For Redis Stack: redis/redis-stack:latest or redis/redis-stack-server:latest
  • Production: always set maxmemory and eviction policy
4 Configure Redis settings
이유
Default settings are for development - production needs tuning
시점
Before exposing to production traffic
건너뛰는 조건
Using Redis only for development/testing
방법
Edit redis.conf or pass config via command line: Set maxmemory (e.g., 2gb), maxmemory-policy (e.g., allkeys-lru), save intervals for RDB, appendonly yes for AOF, requirepass for authentication
검증
redis-cli CONFIG GET maxmemory shows expected value
비고
  • Docker: mount custom redis.conf or use --redis-server args
  • K8s: use ConfigMap for redis.conf
  • Critical settings: maxmemory, persistence, authentication
5 Enable authentication
이유
Protect Redis from unauthorized access
시점
If Redis is network-accessible (not just localhost)
건너뛰는 조건
Redis bound to localhost only and not exposed externally
방법
Set password: redis-cli CONFIG SET requirepass 'your-secure-password', or in redis.conf: requirepass your-secure-password
검증
redis-cli AUTH your-secure-password returns OK, unauthenticated commands fail with NOAUTH
비고
  • Redis 6+ supports ACLs for fine-grained permissions
  • Never expose Redis to public internet without authentication
  • Use strong passwords - Redis is fast at trying passwords too
6 Verify Redis is operational
이유
Confirm the deployment is working correctly
시점
After deployment and configuration
방법
Test basic operations: SET testkey testvalue, GET testkey, DEL testkey. Check memory: INFO memory. Check persistence: LASTSAVE
검증
All operations succeed, memory usage within limits

Prodaie - 실행 기록

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

핵심 차이: 각 단계에는

success

(bool) 및

details

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

원본 JSON
{
  "$schema": "https://recipaie.com/schemas/prodaie.schema.json",
  "name": "redis",
  "description": "Deployment record showing Redis in different environments: Docker, Kubernetes, and package manager",
  "locations": [
    {
      "path": "dev-laptop (Docker)",
      "description": "Local development using Docker",
      "status": "complete",
      "step_count": 6,
      "steps": [
        {
          "order": 1,
          "what": "Choose Redis variant and deployment method",
          "why": "Redis comes in multiple flavors with different features",
          "when": "Before installation",
          "how": "Decide variant and deployment method",
          "verify": "Variant and method documented",
          "success": true,
          "details": "chose Redis Stack for RediSearch support, Docker for isolation"
        },
        {
          "order": 2,
          "what": "Create data directory for persistence",
          "why": "Redis can persist data to disk for durability",
          "when": "If data persistence is required",
          "skip_if": "Using ephemeral Redis",
          "how": "Create named Docker volume",
          "verify": "Volume exists",
          "success": true,
          "details": "created volume: docker volume create redis-dev-data"
        },
        {
          "order": 3,
          "what": "Install or deploy Redis",
          "why": "Get Redis running in your environment",
          "when": "After prerequisites are ready",
          "skip_if": "Redis already running at target version",
          "how": "docker run with Redis Stack image",
          "verify": "redis-cli ping returns PONG",
          "success": true,
          "details": "docker run -d --name redis-dev -p 6379:6379 -v redis-dev-data:/data redis/redis-stack:latest"
        },
        {
          "order": 4,
          "what": "Configure Redis settings",
          "why": "Default settings are for development",
          "when": "Before exposing to production traffic",
          "skip_if": "Using Redis only for development",
          "how": "Set maxmemory and persistence",
          "verify": "CONFIG GET maxmemory shows value",
          "success": true,
          "details": "development use only, defaults are fine"
        },
        {
          "order": 5,
          "what": "Enable authentication",
          "why": "Protect Redis from unauthorized access",
          "when": "If Redis is network-accessible",
          "skip_if": "Redis bound to localhost only",
          "how": "Set requirepass",
          "verify": "Unauthenticated commands fail",
          "success": true,
          "details": "bound to localhost only via -p 127.0.0.1:6379:6379"
        },
        {
          "order": 6,
          "what": "Verify Redis is operational",
          "why": "Confirm the deployment is working correctly",
          "when": "After deployment and configuration",
          "how": "Test basic operations",
          "verify": "All operations succeed",
          "success": true,
          "details": "SET/GET/DEL working, FT._LIST confirms RediSearch loaded"
        }
      ]
    },
    {
      "path": "prod-cluster (Kubernetes)",
      "description": "Production Kubernetes cluster with HA",
      "status": "complete",
      "step_count": 6,
      "steps": [
        {
          "order": 1,
          "what": "Choose Redis variant and deployment method",
          "why": "Redis comes in multiple flavors",
          "when": "Before installation",
          "how": "Decide variant and deployment",
          "verify": "Variant and method documented",
          "success": true,
          "details": "chose standard Redis 7 with Sentinel for HA, Bitnami Helm chart"
        },
        {
          "order": 2,
          "what": "Create data directory for persistence",
          "why": "Redis can persist data to disk",
          "when": "If data persistence required",
          "skip_if": "Using PVC in Helm chart",
          "how": "Create PersistentVolumeClaim",
          "verify": "PVC bound",
          "success": true,
          "details": "Bitnami chart creates PVCs automatically"
        },
        {
          "order": 3,
          "what": "Install or deploy Redis",
          "why": "Get Redis running",
          "when": "After prerequisites ready",
          "skip_if": "Redis already running at target version",
          "how": "helm install redis bitnami/redis --set replica.replicaCount=3",
          "verify": "kubectl get pods shows all replicas Running",
          "success": true,
          "details": "1 master + 3 replicas deployed in redis namespace"
        },
        {
          "order": 4,
          "what": "Configure Redis settings",
          "why": "Production needs tuning",
          "when": "Before production traffic",
          "skip_if": "Using Helm values for config",
          "how": "Configure via Helm values",
          "verify": "CONFIG GET maxmemory shows expected",
          "success": true,
          "details": "set maxmemory=4gb, maxmemory-policy=allkeys-lru via values.yaml"
        },
        {
          "order": 5,
          "what": "Enable authentication",
          "why": "Protect Redis from unauthorized access",
          "when": "If network-accessible",
          "skip_if": "Password set via Helm",
          "how": "Helm chart creates Secret with password",
          "verify": "AUTH required to connect",
          "success": true,
          "details": "password in k8s secret redis-password, injected via REDIS_PASSWORD env"
        },
        {
          "order": 6,
          "what": "Verify Redis is operational",
          "why": "Confirm deployment works",
          "when": "After configuration",
          "how": "Port-forward and test",
          "verify": "All operations succeed",
          "success": true,
          "details": "kubectl port-forward svc/redis-master 6379:6379, all tests passed"
        }
      ]
    },
    {
      "path": "legacy-server (Ubuntu package)",
      "description": "Legacy Ubuntu server using apt package",
      "status": "complete",
      "step_count": 6,
      "steps": [
        {
          "order": 1,
          "what": "Choose Redis variant and deployment method",
          "why": "Redis comes in multiple flavors",
          "when": "Before installation",
          "how": "Decide variant and deployment",
          "verify": "Method documented",
          "success": true,
          "details": "chose standard Redis from Ubuntu repos, systemd for management"
        },
        {
          "order": 2,
          "what": "Create data directory for persistence",
          "why": "Redis needs persistent storage",
          "when": "If data persistence required",
          "skip_if": "Using default /var/lib/redis",
          "how": "Use default package paths",
          "verify": "Directory exists",
          "success": true,
          "details": "apt creates /var/lib/redis automatically"
        },
        {
          "order": 3,
          "what": "Install or deploy Redis",
          "why": "Get Redis running",
          "when": "After prerequisites ready",
          "skip_if": "Redis already at target version",
          "how": "apt install redis-server",
          "verify": "redis-cli ping returns PONG",
          "success": true,
          "details": "apt update && apt install -y redis-server, version 7.0.15"
        },
        {
          "order": 4,
          "what": "Configure Redis settings",
          "why": "Production needs tuning",
          "when": "Before production traffic",
          "skip_if": "Development only",
          "how": "Edit /etc/redis/redis.conf",
          "verify": "CONFIG GET maxmemory shows value",
          "success": true,
          "details": "set maxmemory 2gb, appendonly yes in /etc/redis/redis.conf"
        },
        {
          "order": 5,
          "what": "Enable authentication",
          "why": "Protect Redis",
          "when": "If network-accessible",
          "skip_if": "Localhost only",
          "how": "Set requirepass in config",
          "verify": "AUTH required",
          "success": true,
          "details": "added requirepass to /etc/redis/redis.conf, restarted service"
        },
        {
          "order": 6,
          "what": "Verify Redis is operational",
          "why": "Confirm deployment",
          "when": "After configuration",
          "how": "Test with redis-cli",
          "verify": "All operations succeed",
          "success": true,
          "details": "systemctl status redis-server shows active, SET/GET working"
        }
      ]
    }
  ]
}
설치 위치: 3

설치 위치

dev-laptop (Docker) complete

Local development using Docker

단계 수: 6
1 Choose Redis variant and deployment method ✓
이유
Redis comes in multiple flavors with different features
시점
Before installation
방법
Decide variant and deployment method
검증
Variant and method documented
결과
✓ chose Redis Stack for RediSearch support, Docker for isolation
2 Create data directory for persistence ✓
이유
Redis can persist data to disk for durability
시점
If data persistence is required
건너뛰는 조건
Using ephemeral Redis
방법
Create named Docker volume
검증
Volume exists
결과
✓ created volume: docker volume create redis-dev-data
3 Install or deploy Redis ✓
이유
Get Redis running in your environment
시점
After prerequisites are ready
건너뛰는 조건
Redis already running at target version
방법
docker run with Redis Stack image
검증
redis-cli ping returns PONG
결과
✓ docker run -d --name redis-dev -p 6379:6379 -v redis-dev-data:/data redis/redis-stack:latest
4 Configure Redis settings ✓
이유
Default settings are for development
시점
Before exposing to production traffic
건너뛰는 조건
Using Redis only for development
방법
Set maxmemory and persistence
검증
CONFIG GET maxmemory shows value
결과
✓ development use only, defaults are fine
5 Enable authentication ✓
이유
Protect Redis from unauthorized access
시점
If Redis is network-accessible
건너뛰는 조건
Redis bound to localhost only
방법
Set requirepass
검증
Unauthenticated commands fail
결과
✓ bound to localhost only via -p 127.0.0.1:6379:6379
6 Verify Redis is operational ✓
이유
Confirm the deployment is working correctly
시점
After deployment and configuration
방법
Test basic operations
검증
All operations succeed
결과
✓ SET/GET/DEL working, FT._LIST confirms RediSearch loaded
prod-cluster (Kubernetes) complete

Production Kubernetes cluster with HA

단계 수: 6
1 Choose Redis variant and deployment method ✓
이유
Redis comes in multiple flavors
시점
Before installation
방법
Decide variant and deployment
검증
Variant and method documented
결과
✓ chose standard Redis 7 with Sentinel for HA, Bitnami Helm chart
2 Create data directory for persistence ✓
이유
Redis can persist data to disk
시점
If data persistence required
건너뛰는 조건
Using PVC in Helm chart
방법
Create PersistentVolumeClaim
검증
PVC bound
결과
✓ Bitnami chart creates PVCs automatically
3 Install or deploy Redis ✓
이유
Get Redis running
시점
After prerequisites ready
건너뛰는 조건
Redis already running at target version
방법
helm install redis bitnami/redis --set replica.replicaCount=3
검증
kubectl get pods shows all replicas Running
결과
✓ 1 master + 3 replicas deployed in redis namespace
4 Configure Redis settings ✓
이유
Production needs tuning
시점
Before production traffic
건너뛰는 조건
Using Helm values for config
방법
Configure via Helm values
검증
CONFIG GET maxmemory shows expected
결과
✓ set maxmemory=4gb, maxmemory-policy=allkeys-lru via values.yaml
5 Enable authentication ✓
이유
Protect Redis from unauthorized access
시점
If network-accessible
건너뛰는 조건
Password set via Helm
방법
Helm chart creates Secret with password
검증
AUTH required to connect
결과
✓ password in k8s secret redis-password, injected via REDIS_PASSWORD env
6 Verify Redis is operational ✓
이유
Confirm deployment works
시점
After configuration
방법
Port-forward and test
검증
All operations succeed
결과
✓ kubectl port-forward svc/redis-master 6379:6379, all tests passed
legacy-server (Ubuntu package) complete

Legacy Ubuntu server using apt package

단계 수: 6
1 Choose Redis variant and deployment method ✓
이유
Redis comes in multiple flavors
시점
Before installation
방법
Decide variant and deployment
검증
Method documented
결과
✓ chose standard Redis from Ubuntu repos, systemd for management
2 Create data directory for persistence ✓
이유
Redis needs persistent storage
시점
If data persistence required
건너뛰는 조건
Using default /var/lib/redis
방법
Use default package paths
검증
Directory exists
결과
✓ apt creates /var/lib/redis automatically
3 Install or deploy Redis ✓
이유
Get Redis running
시점
After prerequisites ready
건너뛰는 조건
Redis already at target version
방법
apt install redis-server
검증
redis-cli ping returns PONG
결과
✓ apt update && apt install -y redis-server, version 7.0.15
4 Configure Redis settings ✓
이유
Production needs tuning
시점
Before production traffic
건너뛰는 조건
Development only
방법
Edit /etc/redis/redis.conf
검증
CONFIG GET maxmemory shows value
결과
✓ set maxmemory 2gb, appendonly yes in /etc/redis/redis.conf
5 Enable authentication ✓
이유
Protect Redis
시점
If network-accessible
건너뛰는 조건
Localhost only
방법
Set requirepass in config
검증
AUTH required
결과
✓ added requirepass to /etc/redis/redis.conf, restarted service
6 Verify Redis is operational ✓
이유
Confirm deployment
시점
After configuration
방법
Test with redis-cli
검증
All operations succeed
결과
✓ systemctl status redis-server shows active, SET/GET working