Quickstarts

Outpost Quickstart: Kubernetes with RabbitMQ

Local Kubernetes setup for Outpost using Minikube. This setup includes:

  • Outpost services (API, delivery, and log processors). See the architecture for more details.
  • Redis as KV and entity storage
  • PostgreSQL as log storage
  • RabbitMQ for message queuing

Prerequisites

Setup

  1. Clone the Outpost repository:

    git clone https://github.com/hookdeck/outpost.git
    sh
  2. Start Minikube and create a namespace:

    minikube start kubectl create namespace outpost kubectl config set-context --current --namespace=outpost
    sh
  3. Install dependencies:

    cd outpost/deployments/kubernetes ./setup-dependencies.sh
    sh
  4. Install Outpost:

    Helm charts will have versioned releases in the future.

    helm install outpost ../../deployments/kubernetes/charts/outpost -f values.yaml
    sh

Verify Installation

  1. Set up ingress and tunnel (keep this terminal open):

    minikube addons enable ingress kubectl wait --namespace ingress-nginx \ --for=condition=ready pod \ --selector=app.kubernetes.io/component=controller \ --timeout=90s sudo minikube tunnel
    sh
  2. In a new terminal, add local domain to /etc/hosts:

    echo "127.0.0.1 outpost.acme.local" | sudo tee -a /etc/hosts
    sh
  3. Get your Outpost API key:

    export OUTPOST_API_KEY=$(kubectl get secret outpost-secrets -o jsonpath='{.data.API_KEY}' | base64 -d) echo $OUTPOST_API_KEY
    sh
  4. Test the Outpost API:

    # Create tenant curl --location --request PUT 'http://outpost.acme.local/api/v1/hookdeck' \ --header "Authorization: Bearer $OUTPOST_API_KEY" # Query tenant curl http://outpost.acme.local/api/v1/hookdeck \ --header "Authorization: Bearer $OUTPOST_API_KEY"
    sh

Cleanup

# Remove Kubernetes resources kubectl delete namespace outpost kubectl config set-context --current --namespace=default # Remove local domain sudo sed -i '' '/outpost.acme.local/d' /etc/hosts
sh

Explore Further

  • Publish events to test the delivery and log services

  • Access infrastructure:

    # Redis CLI kubectl exec -it outpost-redis-master-0 -- redis-cli # PostgreSQL kubectl exec -it outpost-postgresql-0 -- psql -U outpost # RabbitMQ Management: http://localhost:15672 kubectl port-forward outpost-rabbitmq-0 15672:15672
    sh