Skip to content

Deployment

github-actions[bot] edited this page Sep 6, 2026 · 1 revision

Deployment

Docker Compose (Development)

# Minimal: PostgreSQL only
docker compose -f docker/docker-compose.yml up -d postgres

# Full stack with all services
docker compose -f docker/docker-compose.yml up --build

Services

Service Port Always Profile
PostgreSQL 5432 Yes —
App 8080 Yes —
MySQL 3306 No mysql
MongoDB 27017 No mongodb
Redis 6379 No redis
Kafka 9092 No kafka
Prometheus 9090 No monitoring
Grafana 3000 No monitoring

Kubernetes (Kustomize)

Base manifests in k8s/base/:

# Apply base configuration
kubectl apply -k k8s/base/

# Or with overlays
kubectl apply -k k8s/overlays/production/

Resources

Resource Purpose
deployment.yaml Application pods
service.yaml ClusterIP service
ingress.yaml NGINX ingress
configmap.yaml Non-sensitive configuration
externalsecret.yaml External Secrets for sensitive values
hpa.yaml Horizontal Pod Autoscaler
keda-scaledobject.yaml KEDA event-driven autoscaling
pdb.yaml Pod Disruption Budget
networkpolicy.yaml Network policies
prometheusrule.yaml Prometheus alerting rules

Helm

helm install syncflow helm/syncflow/ \
  --set image.tag=latest \
  --set postgres.host=your-pg-host

Terraform

Infrastructure provisioning in terraform/:

cd terraform
terraform init
terraform plan
terraform apply

ArgoCD

kubectl apply -f argocd/application.yaml

Multi-Region

Single-primary, multi-replica architecture:

  • RTO: 1-2 minutes (automatic failover)
  • RPO: < 30 seconds (continuous logical replication)
  • Failover: RegionalFailoverManager with Postgres advisory locks
  • DNS: Route53 failover routing

See docs/deployment/F17_MULTI_REGION_DEPLOYMENT.md for details.

Production Checklist

  • Set SYNCFLOW_ENCRYPTION_KEY (AES-256)
  • Set SYNCFLOW_JWT_SECRET (HMAC, >= 32 bytes)
  • Change default admin password
  • Enable TLS termination at ingress
  • Configure syncflow.region.replication-enabled for multi-region
  • Set appropriate HikariCP pool sizes
  • Configure Prometheus scraping
  • Set up Grafana dashboards
  • Review NetworkPolicies
  • Configure PodDisruptionBudget

Clone this wiki locally