Yapılandırma

Statigo, esnek uygulama yapılandırması için ortam değişkenleri ve JSON yapılandırma dosyaları kullanır.

Ortam Değişkenleri

Proje kök dizinine .env dosyası oluşturun:

# Sunucu Yapılandırması
PORT=8080
BASE_URL=http://localhost:8080

# Günlük Kaydı
LOG_LEVEL=INFO

# Önbellek
CACHE_DIR=./data/cache
DISABLE_CACHE=false

# Oran Sınırlama
RATE_LIMIT_RPS=10
RATE_LIMIT_BURST=20

# Geliştirme
DEV_MODE=false

# Kapatma Zaman Aşımı
SHUTDOWN_TIMEOUT=30

# Webhook Gizli Anahtarı (önbellek geçersiz kılma için)
WEBHOOK_SECRET=your-webhook-secret-key

# Google Etiket Yöneticisi (isteğe bağlı)
GTM_ID=GTM-XXXXX

Sunucu Yapılandırması

DeğişkenVarsayılanAçıklama
PORT8080HTTP sunucusu portu
BASE_URLhttp://localhost:8080Kanonik bağlantılar için temel URL
DEV_MODEfalseGeliştirme modunu etkinleştir

Günlük Kaydı

DeğişkenVarsayılanAçıklama
LOG_LEVELINFOGünlük seviyesi: DEBUG, INFO, WARN, ERROR

Önbellek

DeğişkenVarsayılanAçıklama
CACHE_DIR./data/cacheÖnbellek depolama dizini
DISABLE_CACHEfalseÖnbellekleme devre dışı (test için)

Oran Sınırlama

DeğişkenVarsayılanAçıklama
RATE_LIMIT_RPS10Saniye başına istek
RATE_LIMIT_BURST20Patlama boyutu

Güvenlik

DeğişkenVarsayılanAçıklama
WEBHOOK_SECRET-Webhook kimlik doğrulaması için gizli anahtar

Rota Yapılandırması

routes.json

config/routes.json içinde rotaları tanımlayın:

{
  "routes": [
    {
      "canonical": "/",
      "paths": {
        "en": "/en"
      },
      "strategy": "static",
      "template": "index.html",
      "handler": "index",
      "title": "pages.home.title"
    }
  ]
}

Rota Alanları

AlanTürGerekliAçıklama
canonicalstringEvetİsel kanonik yol
pathsobjectEvetDile özgü URL yolları
strategystringEvetÖnbellekleme stratejisi
templatestringEvetOluşturulacak şablon dosyası
handlerstringEvetcustomHandlers haritasına kayıtlı işleyici adı
titlestringHayırSayfa başlığı (i18n anahtarı veya harf olabilir)

Önbellekleme Stratejileri

  • immutable - Asla sona ermez (statik varlıklar)
  • static - Uzun önbellek, eski işaretlendiğinde yeniden doğrular
  • incremental - 24 saat sonra otomatik yeniden doğrular
  • dynamic - Her zaman eski olduğunda yeniden doğrular

Yönlendirme Yapılandırması

redirects.json

config/redirects.json içinde yönlendirmeleri tanımlayın:

{
  "redirects": [
    {
      "from": "/old-page",
      "to": "/new-page",
      "type": 301
    },
    {
      "from": "/blog/*",
      "to": "/articles/*",
      "type": 301,
      "pattern": true
    }
  ]
}

Yönlendirme Alanları

AlanTürAçıklama
fromstringKaynak yol (* joker karakterini destekler)
tostringHedef yol (eşleşen kısım için * kullanın)
typenumberHTTP durum kodu (301 veya 302)
patternbooleanJoker karakter eşleştirmeyi etkinleştir

Çeviri Yapılandırması

Çeviri dosyaları translations/ dizininde depolanır:

translations/
├── en.json    # İngilizce
├── tr.json    # Türkçe
└── de.json    # Almanca

Çeviri Dosyası Biçimi

{
  "site": {
    "name": "Sitem",
    "description": "Bir açıklama"
  },
  "nav": {
    "home": "Ana Sayfa",
    "about": "Hakkında"
  }
}

Go'da Yapılandırmaya Erişme

Ortam Değişkenleri

import "statigo/framework/utils"

port := os.Getenv("PORT")
if port == "" {
    port = "8080"
}

// Veya yardımcıyı kullan
rateLimitRPS := utils.GetEnvInt("RATE_LIMIT_RPS", 10)
rateLimitBurst := utils.GetEnvInt("RATE_LIMIT_BURST", 20)

Rotaları Yükleme

import "statigo/framework/router"

routeRegistry := router.NewRegistry([]string{"en", "tr"})

err := router.LoadRoutesFromJSON(
    configFS,
    "routes.json",
    routeRegistry,
    renderer,
    customHandlers,
    logger,
)

Yönlendirmeleri Yükleme

import "statigo/framework/middleware"

r.Use(middleware.RedirectMiddleware(
    configFS,
    "redirects.json",
    logger,
))

Yapılandırma En İyi Uygulamaları

  1. Asla .env dosyasını işlemeyin - .gitignore'a ekleyin
  2. .env.example kullanın - Gerekli değişkenler için şablon
  3. Yapılandırmayı doğrulayın - Başlangıçta gerekli değişkenleri kontrol edin
  4. Makul varsayılanlar sağlayın - İsteğe bağlı ayarlar için varsayılanlar
  5. Değişkenleri belgeleyin - Her değişkenin ne yaptığını açıklayın

Örnek Yapılandırma

Üretim (.env.production)

PORT=8080
BASE_URL=https://example.com
LOG_LEVEL=WARN
DEV_MODE=false
RATE_LIMIT_RPS=20
RATE_LIMIT_BURST=40
WEBHOOK_SECRET=prod-secret-key

Geliştirme (.env.development)

PORT=3000
BASE_URL=http://localhost:3000
LOG_LEVEL=DEBUG
DEV_MODE=true
RATE_LIMIT_RPS=100
RATE_LIMIT_BURST=200

Test (.env.test)

PORT=8081
BASE_URL=http://localhost:8081
LOG_LEVEL=ERROR
DEV_MODE=true
DISABLE_CACHE=true
RATE_LIMIT_RPS=1000

Ortam Dosyalarını Yükleme

Statigo godotenv kullanarak .env dosyalarını yükler:

import "github.com/joho/godotenv"

func main() {
    // .env dosyasını yükle
    if err := godotenv.Load(); err != nil {
        log.Println("Uyarı: .env dosyası bulunamadı, varsayılanlar kullanılıyor")
    }

    // Uygulama kodunuz...
}

Ortama özgü dosyalar için:

env := os.Getenv("APP_ENV")
if env == "" {
    env = "development"
}

godotenv.Load(".env." + env)
godotenv.Load() // Varsayılan .env için yedek