Repository navigation
Kurulum
Gereksinimler: .NET 10 SDK · Docker
git clone https://github.com/Dakicksoft/poyra.git && cd poyra
dotnet run --project src/Poyra.AppHostBu 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ü) |
-
Sıra: Postgres ayağa kalkar →
docker/initdbbetikleripoyra_approlünü açar → API şemayı uygular → Panel/Checkout ancak API sağlıklı olunca başlar. -
İki rollü veritabanı: uygulamalar
poyra_app(NOBYPASSRLS) ile bağlanır; sahip rolpoyrayalnız migration koşar. İki katmanlı işyeri izolasyonu geliştirmede de gerçek koşullarda çalışır. -
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. -
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_ENDPOINTtanı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.ymliledir (aşağıda).
docker compose up -d # Postgres 18 (localhost:5442) + poyra_app rolü
dotnet run --project src/Poyra.Api # Development: migration'ları açılışta kendisi uygularAyrı 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.
# 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.
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 -dBilmeniz 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
.envyerine Docker secrets / Vault / KMS kullanın — PCI bunu ister.
./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# 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 ReleasePoyra — Türkiye'nin açık kaynak ödeme mühendisliği platformu · AGPL-3.0 · Güvenlik açığı için: özel bildirim