- Move Docker files to build/docker/ - Move CI/CD configs to build/ci/ - Move deployment configs to deploy/ (helm, k8s, argocd) - Move config files to config/ - Move scripts to tools/ - Consolidate assets to assets/ (Reflex compatible) - Add data/ directory for local data (gitignored) - Update all path references in Makefile, Dockerfile, CI configs - Add comprehensive README files for build/ and deploy/ - Update project documentation Benefits: - Clear separation of concerns - Cleaner root directory - Better developer experience - Enterprise-grade structure - Improved maintainability
3.7 KiB
3.7 KiB
ArgoCD Deployment
This directory contains ArgoCD Application manifests for deploying Peikarband to Kubernetes.
Files
application.yaml: Production deployment (main branch → peikarband namespace)application-staging.yaml: Staging deployment (develop branch → peikarband-staging namespace)
Prerequisites
- ArgoCD installed in your cluster
- Git repository access configured in ArgoCD
- Docker registry credentials (if using private registry)
Deployment
1. Add Git Repository to ArgoCD
# For HTTPS with token
argocd repo add https://git.peikarband.ir/ehsan-minadd/peikarband.git \
--username YOUR_USERNAME \
--password YOUR_ACCESS_TOKEN
# Or using argocd UI: Settings → Repositories → Connect Repo
2. Deploy Production
kubectl apply -f argocd/application.yaml
3. Deploy Staging
kubectl apply -f argocd/application-staging.yaml
Sync Policy
Both applications use automatic sync with:
- Auto-prune: Remove resources deleted from Git
- Self-heal: Automatically sync when cluster state differs from Git
- Retry logic: 5 attempts with exponential backoff
Monitoring
# Check application status
argocd app get peikarband
argocd app get peikarband-staging
# Watch sync progress
argocd app sync peikarband --watch
# View logs
argocd app logs peikarband
Manual Sync
# Force sync
argocd app sync peikarband --force
# Sync with prune
argocd app sync peikarband --prune
Rollback
# List history
argocd app history peikarband
# Rollback to specific revision
argocd app rollback peikarband <REVISION>
Architecture
┌─────────────────────────────────────────────────┐
│ ArgoCD │
│ ┌───────────────────┐ ┌──────────────────┐ │
│ │ Production App │ │ Staging App │ │
│ │ (main branch) │ │ (develop branch) │ │
│ └─────────┬─────────┘ └────────┬─────────┘ │
└────────────┼─────────────────────┼──────────────┘
│ │
▼ ▼
┌────────────────┐ ┌─────────────────┐
│ namespace: │ │ namespace: │
│ peikarband │ │ peikarband-stg │
└────────────────┘ └─────────────────┘
Environment Variables
Override via Helm values:
# In values-production.yaml or values-staging.yaml
env:
- name: DATABASE_URL
value: "postgresql://..."
- name: REDIS_URL
value: "redis://..."
Secrets Management
Secrets should be managed outside Git:
# Using kubectl
kubectl create secret generic peikarband-secrets \
--from-literal=database-password=xxx \
--namespace=peikarband
# Or using Sealed Secrets, External Secrets Operator, etc.
Troubleshooting
Application Out of Sync
argocd app sync peikarband --force
Image Pull Errors
Check registry credentials:
kubectl get secret regcred -n peikarband -o yaml
Health Check Failing
View pod logs:
kubectl logs -n peikarband -l app=peikarband --tail=100
Helm Values Override Not Working
Verify values file path in Application manifest:
argocd app manifests peikarband | grep valueFiles