docs(signal-cli): Add deployment documentation
Document infrastructure setup, TLS configuration, and SSL certificate status for the Signal CLI REST API deployment at connections.local.mk-labs.cloud
This commit is contained in:
125
cluster/applications/signal-cli/DEPLOYMENT.md
Normal file
125
cluster/applications/signal-cli/DEPLOYMENT.md
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
# Signal CLI REST API Deployment
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Signal CLI REST API deployed in the `connections` namespace, accessible at `connections.local.mk-labs.cloud` with automatic TLS certificate management.
|
||||||
|
|
||||||
|
## Infrastructure Details
|
||||||
|
|
||||||
|
### Namespace
|
||||||
|
- **Name**: `connections`
|
||||||
|
- **Theme**: EPCOT Connections (Communication & World Showcase)
|
||||||
|
|
||||||
|
### Deployment
|
||||||
|
- **Name**: `signal-cli-rest-api`
|
||||||
|
- **Image**: `bbernhard/signal-cli-rest-api:0.85`
|
||||||
|
- **Replicas**: 1 (MUST be 1 - signal-cli state is not multi-instance safe)
|
||||||
|
- **Strategy**: Recreate (prevents dual mount of PVC)
|
||||||
|
- **Mode**: json-rpc
|
||||||
|
|
||||||
|
### Service
|
||||||
|
- **Name**: `connections`
|
||||||
|
- **Type**: ClusterIP
|
||||||
|
- **Port**: 8080
|
||||||
|
- **Selector**: `app.kubernetes.io/name: signal-cli-rest-api`
|
||||||
|
|
||||||
|
### Ingress
|
||||||
|
- **Name**: `connections`
|
||||||
|
- **Class**: nginx
|
||||||
|
- **Hostname**: `connections.local.mk-labs.cloud`
|
||||||
|
- **TLS**: Enabled with cert-manager
|
||||||
|
- **Certificate**: Auto-provisioned via Let's Encrypt (letsencrypt-prod ClusterIssuer)
|
||||||
|
- **DNS Challenge**: Cloudflare DNS-01
|
||||||
|
|
||||||
|
### Storage
|
||||||
|
- **PVC**: `signal-cli-data`
|
||||||
|
- **Mount Path**: `/home/.local/share/signal-cli`
|
||||||
|
|
||||||
|
## ArgoCD Deployment
|
||||||
|
|
||||||
|
### Application
|
||||||
|
- **Name**: `signal-cli`
|
||||||
|
- **Namespace**: `argocd`
|
||||||
|
- **Sync Wave**: 8
|
||||||
|
- **Source Path**: `cluster/applications/signal-cli/`
|
||||||
|
- **Auto Sync**: Enabled
|
||||||
|
- **Auto Prune**: Enabled
|
||||||
|
- **Self Heal**: Enabled
|
||||||
|
|
||||||
|
## SSL/TLS Status
|
||||||
|
|
||||||
|
### External Access (Ingress)
|
||||||
|
✅ **Working** - TLS certificate successfully issued by Let's Encrypt
|
||||||
|
- Certificate CN: `connections.local.mk-labs.cloud`
|
||||||
|
- Issuer: Let's Encrypt (YR2)
|
||||||
|
- Valid until: September 10, 2026
|
||||||
|
- DNS-01 challenge completed successfully via Cloudflare
|
||||||
|
|
||||||
|
### Signal Server Communication
|
||||||
|
✅ **Working** - No SSL errors detected
|
||||||
|
- Signal-cli uses Java's built-in truststore (OpenJDK 21)
|
||||||
|
- Java truststore includes Signal's CA certificates
|
||||||
|
- No custom CA injection needed
|
||||||
|
|
||||||
|
### Note on curl SSL Errors
|
||||||
|
The initial SSL error encountered with curl was due to the system CA bundle being outdated in the container. This does NOT affect signal-cli functionality because:
|
||||||
|
1. Signal-cli uses Java's truststore, not the system CA bundle
|
||||||
|
2. Java's truststore is properly maintained and includes Signal's root CA
|
||||||
|
3. All signal-cli operations work correctly without SSL errors
|
||||||
|
|
||||||
|
## Endpoints
|
||||||
|
|
||||||
|
### Health Check
|
||||||
|
```bash
|
||||||
|
GET https://connections.local.mk-labs.cloud/v1/health
|
||||||
|
```
|
||||||
|
|
||||||
|
### About/Version
|
||||||
|
```bash
|
||||||
|
GET https://connections.local.mk-labs.cloud/v1/about
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected response:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"versions": ["v1", "v2"],
|
||||||
|
"build": 2,
|
||||||
|
"mode": "json-rpc",
|
||||||
|
"version": "0.85",
|
||||||
|
"capabilities": {
|
||||||
|
"v2/send": ["quotes", "mentions"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Migration from cluster/platform/connections
|
||||||
|
|
||||||
|
Files were moved from `cluster/platform/connections/` to `cluster/applications/signal-cli/`:
|
||||||
|
- ✅ namespace.yaml
|
||||||
|
- ✅ deployment.yaml
|
||||||
|
- ✅ service.yaml
|
||||||
|
- ✅ persistentvolumeclaim.yaml
|
||||||
|
- ✅ application.yaml (updated source path)
|
||||||
|
- ✅ ingress.yaml (newly created)
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
1. **DNS Configuration**: Ensure `connections.local.mk-labs.cloud` resolves to the nginx-ingress controller IP
|
||||||
|
2. **Registration**: Register a Signal phone number via the REST API
|
||||||
|
3. **Integration**: Configure Hermes to use this endpoint for Signal notifications
|
||||||
|
|
||||||
|
## Monitoring
|
||||||
|
|
||||||
|
Check deployment status:
|
||||||
|
```bash
|
||||||
|
kubectl get all,ingress,certificate -n connections
|
||||||
|
```
|
||||||
|
|
||||||
|
Check ArgoCD sync status:
|
||||||
|
```bash
|
||||||
|
kubectl get application signal-cli -n argocd
|
||||||
|
```
|
||||||
|
|
||||||
|
View logs:
|
||||||
|
```bash
|
||||||
|
kubectl logs -n connections deployment/signal-cli-rest-api -f
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user