# FieldWitness Org Server — Full deployment with persistent storage. # For newsroom or trusted infrastructure deployment. apiVersion: apps/v1 kind: Deployment metadata: name: fieldwitness-server namespace: fieldwitness labels: app.kubernetes.io/name: fieldwitness app.kubernetes.io/component: server spec: replicas: 1 # Single writer — do not scale horizontally strategy: type: Recreate # Not RollingUpdate — SQLite + append-only logs need single writer selector: matchLabels: app.kubernetes.io/name: fieldwitness app.kubernetes.io/component: server template: metadata: labels: app.kubernetes.io/name: fieldwitness app.kubernetes.io/component: server spec: securityContext: runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 containers: - name: fieldwitness image: fieldwitness-server:latest ports: - containerPort: 5000 name: web - containerPort: 8000 name: federation env: - name: FIELDWITNESS_DATA_DIR value: /data - name: FIELDWITNESS_GOSSIP_INTERVAL value: "60" volumeMounts: - name: data mountPath: /data resources: requests: memory: "512Mi" cpu: "250m" limits: memory: "2Gi" cpu: "2000m" livenessProbe: httpGet: path: /health port: 5000 initialDelaySeconds: 15 periodSeconds: 30 readinessProbe: httpGet: path: /health port: 5000 initialDelaySeconds: 10 periodSeconds: 10 volumes: - name: data persistentVolumeClaim: claimName: fieldwitness-data --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fieldwitness-data namespace: fieldwitness spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi --- apiVersion: v1 kind: Service metadata: name: fieldwitness-server namespace: fieldwitness spec: selector: app.kubernetes.io/name: fieldwitness app.kubernetes.io/component: server ports: - name: web port: 5000 targetPort: 5000 - name: federation port: 8000 targetPort: 8000 type: ClusterIP