Deployment
Docker
Section titled “Docker”docker run -d --name frogdb \ -p 6379:6379 \ -v frogdb-data:/data \ -e FROGDB_SERVER__BIND=0.0.0.0 \ frogdb/frogdb:latestWith custom config:
docker run -d --name frogdb \ -p 6379:6379 -p 9090:9090 \ -v frogdb-data:/data \ -v $(pwd)/frogdb.toml:/etc/frogdb/frogdb.toml:ro \ frogdb/frogdb:latest --config /etc/frogdb/frogdb.tomlDocker Compose:
services: frogdb: image: frogdb/frogdb:latest ports: - "6379:6379" - "9090:9090" volumes: - frogdb-data:/data - ./frogdb.toml:/etc/frogdb/frogdb.toml:ro command: ["frogdb-server", "--config", "/etc/frogdb/frogdb.toml"] restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "-p", "6379", "ping"] interval: 10s retries: 3 deploy: resources: limits: memory: 4G
volumes: frogdb-data:systemd
Section titled “systemd”[Unit]Description=FrogDB ServerAfter=network.target
[Service]Type=simpleUser=frogdbGroup=frogdbExecStart=/usr/local/bin/frogdb-server --config /etc/frogdb/frogdb.tomlExecReload=/bin/kill -HUP $MAINPIDRestart=on-failureRestartSec=5NoNewPrivileges=yesProtectSystem=strictProtectHome=yesPrivateTmp=yesReadWritePaths=/var/lib/frogdbLimitNOFILE=65535
[Install]WantedBy=multi-user.targetsudo useradd --system --home-dir /var/lib/frogdb --shell /bin/false frogdbsudo mkdir -p /var/lib/frogdb /etc/frogdbsudo chown frogdb:frogdb /var/lib/frogdbsudo systemctl daemon-reload && sudo systemctl enable --now frogdbKubernetes
Section titled “Kubernetes”apiVersion: apps/v1kind: StatefulSetmetadata: name: frogdbspec: serviceName: frogdb replicas: 1 selector: matchLabels: app: frogdb template: metadata: labels: app: frogdb annotations: prometheus.io/scrape: "true" prometheus.io/port: "9090" spec: containers: - name: frogdb image: frogdb/frogdb:latest ports: - containerPort: 6379 name: redis - containerPort: 9090 name: metrics resources: requests: memory: "1Gi" cpu: "500m" limits: memory: "4Gi" volumeMounts: - name: data mountPath: /data - name: config mountPath: /etc/frogdb readOnly: true livenessProbe: httpGet: path: /health/live port: 9090 initialDelaySeconds: 10 readinessProbe: httpGet: path: /health/ready port: 9090 initialDelaySeconds: 5 volumes: - name: config configMap: name: frogdb-config volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 50GiOS Tuning
Section titled “OS Tuning”# File descriptorsecho "* soft nofile 65535" >> /etc/security/limits.confecho "* hard nofile 65535" >> /etc/security/limits.conf
# TCP backlogecho "net.core.somaxconn = 65535" >> /etc/sysctl.confsysctl -pProduction Configuration
Section titled “Production Configuration”[server]bind = "0.0.0.0"port = 6379num-shards = 0 # Auto-detect CPU cores
[persistence]enabled = truedata-dir = "/var/lib/frogdb"durability-mode = "periodic"sync-interval-ms = 1000
[snapshot]snapshot-dir = "/var/lib/frogdb/snapshots"snapshot-interval-secs = 3600
[memory]maxmemory = 4294967296 # 4 GBmaxmemory-policy = "allkeys-lru"
[security]requirepass = "your-secure-password"
[logging]level = "info"format = "json"
[metrics]enabled = trueport = 9090Verify
Section titled “Verify”redis-cli -p 6379 ping # PONGcurl http://localhost:9090/metrics # Prometheus metrics