Marketplace infrastructure
Infrastructure as Code patterns for deploying Guts nodes using Terraform, Docker, and Kubernetes
install
source · Clone the upstream repo
git clone https://github.com/aiskillstore/marketplace
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/abdelstark/infrastructure" ~/.claude/skills/aiskillstore-marketplace-infrastructure && rm -rf "$T"
manifest:
skills/abdelstark/infrastructure/SKILL.mdsource content
Infrastructure Skill for Guts
You are managing infrastructure for a decentralized application with multiple node types.
Deployment Targets
- Local Development: Docker Compose
- Testing: Kubernetes (k3s/kind)
- Production: Cloud-agnostic Kubernetes + Terraform
Terraform Patterns
Module Structure
infra/ ├── terraform/ │ ├── modules/ │ │ ├── network/ │ │ ├── compute/ │ │ └── storage/ │ ├── environments/ │ │ ├── dev/ │ │ ├── staging/ │ │ └── prod/ │ └── main.tf
Example Module
# modules/guts-node/main.tf variable "node_count" { type = number description = "Number of Guts nodes to deploy" default = 3 } variable "instance_type" { type = string description = "Instance type for nodes" default = "t3.medium" } resource "aws_instance" "guts_node" { count = var.node_count ami = data.aws_ami.ubuntu.id instance_type = var.instance_type tags = { Name = "guts-node-${count.index}" Environment = var.environment Project = "guts" } }
Docker Best Practices
Multi-stage Builds
# Build stage FROM rust:1.75-slim as builder WORKDIR /app COPY . . RUN cargo build --release --bin guts-node # Runtime stage FROM debian:bookworm-slim RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* COPY --from=builder /app/target/release/guts-node /usr/local/bin/ EXPOSE 8080 9000 ENTRYPOINT ["guts-node"]
Docker Compose for Development
version: '3.8' services: node1: build: . ports: - "8081:8080" environment: - GUTS_NODE_ID=node1 - GUTS_PEERS=node2:9000,node3:9000 volumes: - node1-data:/data node2: build: . ports: - "8082:8080" environment: - GUTS_NODE_ID=node2 - GUTS_PEERS=node1:9000,node3:9000 volumes: - node2-data:/data node3: build: . ports: - "8083:8080" environment: - GUTS_NODE_ID=node3 - GUTS_PEERS=node1:9000,node2:9000 volumes: - node3-data:/data volumes: node1-data: node2-data: node3-data:
Kubernetes Patterns
StatefulSet for Nodes
apiVersion: apps/v1 kind: StatefulSet metadata: name: guts-node spec: serviceName: guts-nodes replicas: 3 selector: matchLabels: app: guts-node template: metadata: labels: app: guts-node spec: containers: - name: guts-node image: guts/node:latest ports: - containerPort: 8080 name: api - containerPort: 9000 name: p2p volumeMounts: - name: data mountPath: /data volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 100Gi
Monitoring Stack
- Metrics: Prometheus with custom Rust metrics
- Logs: Loki + Grafana
- Tracing: Jaeger with OpenTelemetry
Security Checklist
- TLS certificates via cert-manager
- Network policies for pod isolation
- Secrets management with external-secrets
- Regular security scanning with Trivy
- RBAC for Kubernetes access