apiVersion: apps/v1 kind: Deployment metadata: name: signal-cli-rest-api namespace: connections labels: app.kubernetes.io/name: signal-cli-rest-api app.kubernetes.io/component: messaging-gateway app.kubernetes.io/version: "0.85" # Pin version initially spec: replicas: 1 # MUST be 1 - signal-cli state is not multi-instance safe strategy: type: Recreate # Avoid PVC split-brain during updates selector: matchLabels: app.kubernetes.io/name: signal-cli-rest-api template: metadata: labels: app.kubernetes.io/name: signal-cli-rest-api spec: hostNetwork: true # Use host network for Signal WebSocket connectivity containers: - name: signal-cli-rest-api image: bbernhard/signal-cli-rest-api:latest # Using latest to match astro-orbiter signal-cli 0.14.3 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 name: http protocol: TCP env: - name: MODE value: "json-rpc" # json-rpc mode for API compatibility volumeMounts: - name: signal-data mountPath: /home/.local/share/signal-cli resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "512Mi" cpu: "500m" livenessProbe: httpGet: path: /v1/health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: httpGet: path: /v1/health port: 8080 initialDelaySeconds: 10 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 2 volumes: - name: signal-data persistentVolumeClaim: claimName: signal-cli-data