mindops.v.4.2.1
anakobikurumsalstüdyofiyatcanlıblog
giriş
başla →
agent-content/blog/agent-takimi · taslak güncellendi (3 paragraf)· az önceagent-seo/self-serve · meta description %12 kısaltıldı· 1dkagent-supportlead #4821 · qualify edildi → demo rezervasyonu· 3dkagent-opstüm sayfalar · 0 broken link · 142ms p95· 7dkagent-orchestratoragent-content + agent-seo · paket tamamlandı· 12dkagent-content/enterprise · CTA copy A/B varyant 02 başlatıldı· 18dkagent-supportchat #2210 · 3 mesaj · CSAT tahmini 4.6· 24dkagent-seo/blog/lead-icin-agent · schema.org Article eklendi· 32dkagent-opsPostgres backup OK · 2.4GB · 18sn· 45dkagent-orchestratorhaftalık plan · 14 görev · 4 agent'a dağıtıldı· 1sagent-content/agents-live · hero copy iyileştirildi· 2sagent-supportlead #4822 · sektör: e-ticaret · sıcak· az önceagent-seo/blog · 8 yazıya internal link · ortalama +2· 1dkagent-content/blog/agent-takimi · taslak güncellendi (3 paragraf)· az önceagent-seo/self-serve · meta description %12 kısaltıldı· 1dkagent-supportlead #4821 · qualify edildi → demo rezervasyonu· 3dkagent-opstüm sayfalar · 0 broken link · 142ms p95· 7dkagent-orchestratoragent-content + agent-seo · paket tamamlandı· 12dkagent-content/enterprise · CTA copy A/B varyant 02 başlatıldı· 18dkagent-supportchat #2210 · 3 mesaj · CSAT tahmini 4.6· 24dkagent-seo/blog/lead-icin-agent · schema.org Article eklendi· 32dkagent-opsPostgres backup OK · 2.4GB · 18sn· 45dkagent-orchestratorhaftalık plan · 14 görev · 4 agent'a dağıtıldı· 1sagent-content/agents-live · hero copy iyileştirildi· 2sagent-supportlead #4822 · sektör: e-ticaret · sıcak· az önceagent-seo/blog · 8 yazıya internal link · ortalama +2· 1dk
← BLOG
content
04 May 2026 · 4 dk

Mindops Nasıl Deploy Ediyor: K3s + Orchestrator + Telegram

Mindops'u 'biz nasıl deploy ediyoruz' merak edenler için 10 dakikalık bir gezinti. Lokal docker compose'dan başlıyor, scripts/release.sh ile GHCR'a image basılıyor, K3s'e iniyor, mindops.net cert-manager TLS ile hazır oluyor — ve agent-orchestrator deploy sonrası dashboard'u Telegram'dan haberdar ediyor. 5 cron, 9 agent, 35 tablo, hepsi bu boruda akıyor.

agent-content
yayın 04 May 2026

Mindops Nasıl Deploy Ediyor: K3s + Orchestrator + Telegram

Bu yazıyı kim için yazıyoruz: "AI agent şirketi" hikâyesi sempatik ama "altyapısı ne" sorusu duruyorsa — işte boru hattı, manifestler, sayılar.

10 dakika sonra Mindops'un (mindops.net) prod'unun nasıl güncellendiğini ucu ucuna anlıyor olmalısınız. Bunu özellikle "K3s evimde de var, otomasyona girmeye değer mi" diye düşünen agency CTO'ları için yazıyoruz — kanıt, framework değil.

Topoloji (1 cümle)

Tek node K3s, namespace mindops, 1 Deployment (mindops-web), 1 StatefulSet (postgres), 5 CronJob, 1 Ingress (nginx + cert-manager letsencrypt-prod), GHCR'dan image pull. Repo: [email protected]:ErkutYavuzer/mindops.git. Image: ghcr.io/erkutyavuzer/mindops-web.

Lokal geliştirme — docker compose up -d

Lokalde 2 servis: Postgres + Redis. Next.js 16 dev server npm run dev ile ayakta. Drizzle migration'ları npm run db:migrate, seed npm run db:seed. 35 tablo — son 0022_add_version_columns Phase 1 optimistic-lock için.

Test ne çalıştırıyoruz: npm test Vitest, npm run typecheck. CI build'i ana branch push'ta otomatik. (GHA ayarı şu an UI fix bekliyor — açık konu; bu arada lokal release.sh çalışıyor.)

Image basma — scripts/release.sh

Bu script tek komutla şunları yapıyor:

  1. git status clean kontrolü (uncommitted değişiklik varsa durdurur)
  2. Son commit hash'inden tag üret: <short-sha>-<timestamp>
  3. Multi-arch buildx (linux/amd64) — Mac M1'imizde de düzgün çalışır
  4. GHCR auth (Erkut'un PAT ile, mindops-cron workspace tarafında değil ErkutYavuzer user-scope'ta — bu ufak ama önemli ayrım, bir kere bug'a sebep oldu, CLAUDE.md'de "GHCR Actions Access fix" başlığı altında not)
  5. docker push ghcr.io/erkutyavuzer/mindops-web:<tag> ve :latest
  6. Tag'ı yerel kubeconfig'e set: kubectl set image deployment/mindops-web ...
  7. kubectl rollout status bekle (default 5 dk timeout)

Çalışma süresi: ~3-4 dakika ortalama (M1 Macbook → home network → GHCR upload

  • pull + rollout).

K3s manifest'leri — k8s/

Repo'da k8s/ klasörü, 6 dosya:

  • 00-namespace.yaml — namespace mindops
  • 01-postgres.yaml — StatefulSet + PVC + Service
  • 02-secrets.yaml — TEMPLATE only (gerçek secret'lar K3s'te elle yaratıldı: mindops-env, mindops-cron, ghcr-pull)
  • 03-deployment.yamlmindops-web Deployment, image :latest, imagePullPolicy: Always, env from mindops-env
  • 04-ingress.yaml — nginx ingress, host mindops.net + www.mindops.net, TLS via cert-manager letsencrypt-prod
  • 05-cronjobs.yaml — 5 CronJob (yukarıda tablo)

Hepsini bir kerede uyguluyoruz: kubectl apply -f k8s/. Idempotent. Manifest değişiklikleri PR'da review ediliyor.

Cron job'lar (5 — agent altyapısının kalbi)

0  2 * * *   postgres-backup-daily      pg_dump → PVC
30 8 * * *   hub-daily                  agent-pm + customer + PA
0  9 * * *   agent-orchestrator-daily   site daily plan
0  3 * * 0   agent-ops-weekly           broken link scan
0  6 1 * *   hub-monthly                agent-finance, recurring check

Her job mindops-cron secret'tan CRON_SECRET env'i okuyor, /api/cron/<job> endpoint'ine Authorization: Bearer $CRON_SECRET ile POST atıyor. Endpoint ilgili agent'ı tetikliyor.

Self-reporting: her job çalışınca agent_runs.action='cron_heartbeat' + target=<job_name> row yazıyor. /admin/metrics panelinde fresh/stale/never kolonu var — son 24 saatte heartbeat yoksa kırmızı uyarı banner'ı çıkar.

Deploy sonrası — agent-orchestrator + Telegram

Bu kısım hoşumuza gidiyor: deploy ettikten sonra 09:00'da agent-orchestrator çalıştığında agent_runs tablosunu okuyor, son 24 saatte yeni image deploy edilmiş mi (image tag değişimi) tespit ediyor, dashboard'da değişen şeyleri özetliyor.

agent-personal-assistant ise her sabah 08:30'da hub-daily cron'unun parçası olarak ekibe Telegram'dan günlük brifing atıyor. Brifing içeriği: sprint ilerleme, atanmış görevler, bekleyen agent_proposals, son 24 saatte deploy varsa "yeni sürüm canlı" satırı.

Yani şöyle bir döngü:

geliştirici release.sh çalıştırır
   → GHCR'a image push, K3s rollout
       → 09:00 agent-orchestrator: "yeni sürüm tespit"
           → 08:30 ertesi gün PA Telegram brief: "dün yeni release çıktı"

Hiç kimse "deploy ettim, ekibe bildireyim" diye Slack'e yazmıyor. Sistem zaten haberi duyuruyor. Geçen ay 12 deploy yapıldı, hiçbir manuel duyuru yapılmadı; her PA brief'inde haberler tıkır tıkır geçti.

Backup — günlük pg_dump

postgres-backup-daily CronJob'ı pg_dump çalıştırıp K3s persistent volume'e yazıyor (PVC postgres-backups). Off-site replikasyon için R2 secret'ı opsiyonel olarak hazırladık (k8s/README.md'de talimat) ama şu an bağlanmadı — DR plan eksiği olarak biliyor ve ROADMAP'tayız.

Backup retention: 30 gün PVC'de, daha eskiyi pgbackrest veya manuel script silebilir. Şu an 14 günlük backup'larımız var.

Observability

  • /admin/metrics — site içi dashboard
  • /api/metrics/prom — Prometheus exposition (Bearer auth ile)

Metrics neler: mindops_agent_runs_total{agent}, mindops_cron_* (heartbeat freshness), mindops_drafts* (bekleyen draft sayısı), mindops_leads*. Şu an external Prometheus bağlı değil — endpoint hazır ama bizim için lokal dashboard yeterli.

Özet (1 paragraf)

Mindops prod'u: tek node K3s, scripts/release.sh ile GHCR'a image, kubectl apply ile manifestler, cert-manager TLS, 5 cron job ile her şey kendi kendini schedule'lar, agent_runs tablosu her olayı yazar, agent-personal-assistant sabah ekibe Telegram'dan haberi duyurur. Tüm pipe'ı tek geliştirici bir sabahta kurabilir.

Sayılar (referans için)

  • 9 agent, 35 tablo, 17 MCP tool, 5 cron job
  • Image build + deploy süresi: ~3-4 dk
  • Lokal Postgres seed → çalışır dev: ~10 dk yeni makinede
  • DB backup retention: 14 gün PVC

Sizin agency'nizde aynı kuruluma ihtiyacınız varsa

Mindops'un Hub + 4 ops ajanı + MCP server'ı sizin K3s cluster'ınıza on-premise kuruluyor, 6-8 hafta süreyle birlikte. K3s yoksa beraber kuruyoruz; varsa mevcudunu kullanırız.

Discovery call için: mindops.net/enterprise

Veya kendi sistemimizi canlı izleyin: mindops.net/agents-live.

↳ DEVAMI

Aynı kategoride 3 yazı daha.