# GitOps stack for abrban.com ## DNS (A record → cluster IP `78.157.39.52`) | Host | Purpose | |------|---------| | `abrban.com` | Landing / frontend | | `panel.abrban.com` | Authenticated panel | | `api.abrban.com` | Backend API | | `registry.abrban.com` | Harbor | | `git.abrban.com` | Gitea | | `argocd.abrban.com` | Argo CD | ## Harbor proxy-cache (بدون mirror دستی) Harbor ایمیج‌های upstream را on-demand می‌کشد و cache می‌کند: | پروژه Harbor | upstream | مثال | |--------------|----------|------| | `proxy-dockerhub` | docker.io | `registry.abrban.com/proxy-dockerhub/alpine/git:2.43.0` | | `proxy-quay` | quay.io | `registry.abrban.com/proxy-quay/argoproj/argocd:v3.4.4` | | `proxy-k8s` | registry.k8s.io | CSI sidecarها | | `proxy-gitea` | docker.gitea.com | `registry.abrban.com/proxy-gitea/gitea:1.26.1-rootless` | | `proxy-gcr` | gcr.io | `registry.abrban.com/proxy-gcr/kaniko-project/executor:v1.23.2` | | `abrban` | — | ایمیج‌های ساخته‌شده (backend/frontend) | اولین pull هر ایمیج کمی طول می‌کشد (Harbor از upstream می‌کشد). **نیازی به Job skopeo جداگانه نیست.** k3s باید `registry.abrban.com` را به Harbor داخلی route کند: ```bash ./scripts/apply-k3s-registries.sh ``` ## Install order ```bash # 1. k3s → Harbor داخلی (بدون Traefik timeout) ./scripts/apply-k3s-registries.sh # 2. Argo CD helm upgrade --install argocd argo/argo-cd -n argocd --create-namespace \ -f gitops/argocd/values-bootstrap.yaml --timeout 15m --wait # 3. Gitea (ایمیج‌ها از Harbor proxy-gitea) helm upgrade --install gitea gitea-charts/gitea -n gitea --create-namespace \ -f gitops/gitea/values.yaml --timeout 15m --wait # 4. TLS + registry secrets در namespaceهای argocd/gitea/cloudhost-builds for ns in argocd gitea cloudhost-builds; do kubectl -n cloudhost get secret abrban-wildcard-tls -o yaml | sed "s/namespace: cloudhost/namespace: ${ns}/" | kubectl apply -f - kubectl -n cloudhost get secret registry-pull-secret -o yaml | sed "s/namespace: cloudhost/namespace: ${ns}/" | kubectl apply -f - done # پروکسی egress برای act-runner (دانلود kubectl در initContainer) kubectl -n cloudhost get secret registry-egress-proxy -o yaml | sed 's/namespace: cloudhost/namespace: gitea/' | kubectl apply -f - # 5. git push سورس به Gitea (نه docker push) # git remote add gitea https://git.abrban.com/abrban/cloud-host.git # git push gitea main # 6. اولین build در کلاستر (Kaniko → abrban/) ./scripts/trigger-platform-build.sh # 7. Deploy ./scripts/gitops-deploy.sh # 8. Gitea Actions runner # توکن ثبت: SealedSecret در ریپوی cloud-host-gitops (sealed-secrets/gitea-act-runner-token.yaml) # یا دستی: kubectl -n gitea create secret generic gitea-act-runner-token --from-literal=token='' kubectl apply -f gitops/gitea/act-runner.yaml # 9. Argo CD Application kubectl apply -f gitops/argocd/application-platform.yaml ``` ## CI/CD Gitea Actions: [.gitea/workflows/build-deploy.yaml](../.gitea/workflows/build-deploy.yaml) Push به `main` → Kaniko → push به `abrban/` → کامیت tag در ریپوی [cloud-host-gitops](https://git.abrban.com/abrban/cloud-host-gitops) → ArgoCD sync. - مقادیر Production در ریپوی جدا `abrban/cloud-host-gitops` است (`platform/values-abrban.yaml`)؛ Application به‌صورت multi-source تعریف شده. - Secretهای CI به‌صورت SealedSecret در همان ریپو هستند (کنترلر در `kube-system`، values در `gitops/sealed-secrets/values.yaml`). - مستند کامل: [RUNBOOK-CICD.fa.md](../RUNBOOK-CICD.fa.md)