Skip to content

Kurulum

Founder @dakicksoft edited this page Aug 17, 2026 · 3 revisions

Kurulum

Geliştirme ortamı — tek komut (.NET Aspire)

Gereksinimler: .NET 10 SDK · Docker

git clone https://github.com/Dakicksoft/poyra.git && cd poyra
dotnet run --project src/Poyra.AppHost

Bu komut Postgres 18'i, API'yi, Panel'i ve Checkout'u birlikte ayağa kaldırır.

Kaynak Adres
Aspire panosu http://localhost:15080 (konsolda tek kullanımlık giriş bağlantısı yazar)
API http://localhost:5080 — Scalar dokümantasyonu: /docs · sağlık: /health/live, /health/ready
Panel http://localhost:5090
Checkout http://localhost:5095/l/{slug}
Postgres 18 localhost:5442 (poyra sahip rolü + poyra_app uygulama rolü)

AppHost neyi garanti eder?

  1. Sıra: Postgres ayağa kalkar → docker/initdb betikleri poyra_app rolünü açar → API şemayı uygular → Panel/Checkout ancak API sağlıklı olunca başlar.
  2. İki rollü veritabanı: uygulamalar poyra_app (NOBYPASSRLS) ile bağlanır; sahip rol poyra yalnız migration koşar. İki katmanlı işyeri izolasyonu geliştirmede de gerçek koşullarda çalışır.
  3. Adresler koddan üretilir: üç host'un birbirine verdiği mutlak adresler (Poyra__PublicBaseUrl, Poyra__CheckoutBaseUrl, Poyra__PanelBaseUrl) Aspire uç noktalarından gelir; elle yazılan localhost portu kalmaz.
  4. Tek ekran: günlük, iz ve ölçüm panoda birleşir — üçü de (API, Panel, Checkout) OpenTelemetry ile kendi izlerini gönderir. Telemetri uygulamaların kendi kurulumundadır, Aspire'a bağımlı değildir: dışa aktarıcı yalnız OTEL_EXPORTER_OTLP_ENDPOINT tanımlıysa devreye girer, bu yüzden üretimde de kendi koleksiyoncunuza aynı şekilde akar.

Tanım tek dosyadadır: src/Poyra.AppHost/Program.cs.

Not: Aspire üretim aracı değildir — üretim kurulumu docker-compose.prod.yml iledir (aşağıda).

Aspire'sız kurulum (eski yol)

docker compose up -d                      # Postgres 18 (localhost:5442) + poyra_app rolü
dotnet run --project src/Poyra.Api        # Development: migration'ları açılışta kendisi uygular

Ayrı terminallerde:

dotnet run --project src/Poyra.Panel      # işyeri paneli
dotnet run --project src/Poyra.Checkout   # müşteriye bakan ödeme sayfası

İkisi aynı anda çalıştırılmaz: hem compose hem Aspire 5442 portunu ister. Aspire kendi veri hacmini (poyra-aspire-pgdata) kullanır — compose'daki veriniz ayrı durur.

İlk işyeri ve ilk ödeme

# 1) İşyeri aç (geliştirme platform anahtarı: dev-platform-key)
curl -X POST http://localhost:5080/v1/tenants \
  -H "Content-Type: application/json" -H "X-Platform-Key: dev-platform-key" \
  -d '{"name":"Deneme İşyeri","slug":"deneme","ownerEmail":"sahip@ornek.com","ownerPassword":"en-az-10-karakter","ownerName":"Sahip"}'
# → yanıttaki apiKey YALNIZ BİR KEZ gösterilir

# 2) Sanal POS bağla (geliştirmede mockbank)
curl -X POST http://localhost:5080/v1/connector-accounts \
  -H "Content-Type: application/json" -H "X-Api-Key: sk_test_..." \
  -d '{"connectorKey":"mockbank","label":"Mock POS","credentials":{"secret":"s3cret"},"priority":1}'

# 3) Ödeme aç + onayla → rota kararı + bankaya gidecek 3DS formu döner
curl -X POST http://localhost:5080/v1/payments \
  -H "Content-Type: application/json" -H "X-Api-Key: sk_test_..." \
  -d '{"amountMinor":149900,"currency":"TRY","installments":3,"confirm":true}'

Panele sahip@ornek.com ile girin; Güvenlik sayfasından TOTP 2FA kurabilirsiniz.

MockBank sihirli tutarları: kuruş %100 == 99 → kart reddi (05) · %100 == 98 → 3DS başarısız · diğerleri onay. Failover senaryosu için kimliklere fail_initiate=true ekleyin.

Üretim (self-host) özeti

Poyra tek Postgres ve üç web süreciyle çalışır; kurulum yarım saatlik iştir:

cp .env.example .env
./scripts/anahtar-uret.sh >> .env     # 3 ayrı AES-256 anahtarı + platform sırları üretir
docker compose -f docker-compose.prod.yml up -d

Bilmeniz gereken üretim ilkeleri:

  • Üç ayrı anahtar üretilir (banka kimlikleri / kart kasası / JWT) — biri sızarsa diğerleri açılmaz.
  • Migration'lar ayrı bir işle, sahip rolüyle koşar; uygulama yalnız poyra_app (NOBYPASSRLS) rolüyle bağlanır ve bunu açılışta canlı doğrular.
  • Açılışta sır doğrulaması vardır: zayıf/eksik anahtar varsa uygulama hiç açılmaz.
  • TLS bilinçli olarak kompozisyon dışındadır: üç host 127.0.0.1:8080'de dinler; önüne Caddy/nginx/Traefik koyup üç alan adına sertifika bağlarsınız.
  • Kurumsal kurulumda .env yerine Docker secrets / Vault / KMS kullanın — PCI bunu ister.

Testler

./scripts/test-hizli.sh    # birim + mimari — Docker gerekmez, saniyeler
./scripts/test-kapsam.sh   # tüm katmanlar + kapsam raporu (Docker gerekir)
dotnet test                # hepsi, kapsam olmadan

Saha uygulaması (MAUI)

# JDK 21 gerekir; çözüm dosyasında DEĞİL, ayrı derlenir.
# Release şart: Debug paketi Fast Deployment kullanır, adb install ile açılmaz.
dotnet build src/Poyra.Field.App -f net10.0-android -c Release

Clone this wiki locally