Deploy on Kubernetes
Run Outpost on a local Kubernetes cluster using Minikube and Helm. This setup includes:
- Outpost services (API, Delivery, and Log)
- Redis for KV and entity storage
- PostgreSQL for log storage
- RabbitMQ for message queuing
Prerequisites
Setup
Clone the Outpost repository:
git clone https://github.com/hookdeck/outpost.gitStart Minikube and create a namespace:
minikube start kubectl create namespace outpost kubectl config set-context --current --namespace=outpostInstall dependencies (Redis, PostgreSQL, RabbitMQ):
cd outpost/examples/kubernetes ./setup-dependencies.shInstall Outpost via Helm:
helm install outpost ../../deployments/kubernetes/charts/outpost -f outpost.yaml
Verify Installation
Enable ingress and start the 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 tunnelIn a new terminal, add the local domain to
/etc/hosts:echo "127.0.0.1 outpost.acme.local" | sudo tee -a /etc/hostsGet your API key:
export OUTPOST_API_KEY=$(kubectl get secret outpost-secrets \ -o jsonpath='{.data.API_KEY}' | base64 -d) echo $OUTPOST_API_KEYCreate a tenant and verify the API:
curl --request PUT 'http://outpost.acme.local/api/v1/hookdeck' \ --header "Authorization: Bearer $OUTPOST_API_KEY" curl 'http://outpost.acme.local/api/v1/hookdeck' \ --header "Authorization: Bearer $OUTPOST_API_KEY"
Explore Further
Publish events and inspect delivery via the API or portal:
# Access Redis CLI
kubectl exec -it outpost-redis-master-0 -- redis-cli
# Access PostgreSQL
kubectl exec -it outpost-postgresql-0 -- psql -U outpost
# RabbitMQ Management UI at http://localhost:15672
kubectl port-forward outpost-rabbitmq-0 15672:15672
Cleanup
kubectl delete namespace outpost
kubectl config set-context --current --namespace=default
sudo sed -i '' '/outpost.acme.local/d' /etc/hosts