apiVersion: apps/v1 kind: Deployment metadata: name: connections namespace: connections labels: app.kubernetes.io/name: connections 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 # Prevents dual mount of PVC selector: matchLabels: app.kubernetes.io/name: connections template: metadata: labels: app.kubernetes.io/name: connections app.kubernetes.io/component: messaging-gateway spec: containers: - name: signal-cli-rest-api image: bbernhard/signal-cli-rest-api:0.85 # Pin version, test upgrades imagePullPolicy: IfNotPresent securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL seccompProfile: type: RuntimeDefault ports: - containerPort: 8080 name: http protocol: TCP env: - name: MODE value: "json-rpc" # json-rpc mode for API compatibility - name: SIGNAL_CLI_UID value: "0" # Disable UID change - name: SIGNAL_CLI_GID value: "0" # Disable GID change 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