Back to Rivet

Deploying to Kubernetes

website/src/content/docs/connect/kubernetes.mdx

2.2.12.8 KB
Original Source

Steps

<Steps> <Step title="Prerequisites"> </Step> <Step title="Package Your App">

Create a Dockerfile in your project root:

dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
ENV PORT=8080
CMD ["node", "server.js"]
</Step> <Step title="Build and Push the Image">
bash
docker build -t registry.example.com/your-team/rivetkit-app:latest .
docker push registry.example.com/your-team/rivetkit-app:latest

Replace registry.example.com/your-team with your registry path. Auth with docker login first if needed.

</Step> <Step title="Set Environment Variables">

After creating your project on the Rivet dashboard, select Kubernetes as your provider. You'll be provided RIVET_ENDPOINT and RIVET_PUBLIC_ENDPOINT environment variables.

Create a rivetkit-secrets.yaml for your environment variables:

yaml
apiVersion: v1
kind: Secret
metadata:
  name: rivetkit-secrets
type: Opaque
stringData:
  RIVET_ENDPOINT: <your-rivet-endpoint>
  RIVET_PUBLIC_ENDPOINT: <your-rivet-public-endpoint>
</Step> <Step title="Deploy to Kubernetes">

Create a deployment.yaml:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rivetkit-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rivetkit-app
  template:
    metadata:
      labels:
        app: rivetkit-app
    spec:
      # Allow enough time for actors to gracefully stop on SIGTERM.
      # The runner waits up to 120s for actors to finish; 130s provides buffer.
      # See: /docs/actors/versions#graceful-shutdown-sigterm
      terminationGracePeriodSeconds: 130
      containers:
        - name: rivetkit-app
          image: registry.example.com/your-team/rivetkit-app:latest
          envFrom:
            - secretRef:
                name: rivetkit-secrets

Apply both manifests:

bash
kubectl apply -f rivetkit-secrets.yaml
kubectl apply -f deployment.yaml
</Step> <Step title="Connect to Rivet">
  1. Add a Service and Ingress to expose your app externally (e.g. my-app.example.com)
  2. On the Rivet dashboard, paste your domain with the /api/rivet path into the connect form (e.g. https://my-app.example.com/api/rivet)
  3. Click "Done"
</Step> <Step title="Verify">

Check that the pod is running:

bash
kubectl get pods -l app=rivetkit-app

Your app should appear as connected on the Rivet dashboard once the pod is ready.

</Step> </Steps>