Ana içeriğe atla

Genel Bakış

Azalt şu depolama seçeneklerini destekler:
  • AWS S3 (varsayılan)
  • S3 uyumlu servisler (MinIO, özel bulut S3, vb.)
Dosya depolama isteğe bağlıdır. Yapılandırılmazsa dosya yükleme özellikleri devre dışı kalır.

Ortam Değişkenleri

Dosya Depolama için Zorunlu

DeğişkenAçıklama
S3_BUCKET_NAMES3 bucket adı
S3_ACCESS_KEY_IDAWS erişim anahtarı veya S3 uyumlu servis kimlik bilgileri
S3_SECRET_ACCESS_KEYAWS gizli anahtar veya S3 uyumlu servis kimlik bilgileri

İsteğe Bağlı Yapılandırma

DeğişkenVarsayılanAçıklama
S3_REGIONeu-central-1AWS bölgesi veya S3 uyumlu servis bölgesi
S3_ENDPOINT(yok)S3 uyumlu servisler için özel endpoint URL’i
S3_PUBLIC_ENDPOINT(yok)Presigned URL’ler için tarayıcı erişimli URL
S3_FORCE_PATH_STYLEfalseMinIO ve çoğu S3 uyumlu servis için true yapın

Yapılandırma Senaryoları

AWS S3 (Standart)

Standart AWS S3 için sadece temel kimlik bilgileri gereklidir:
S3_BUCKET_NAME=my-bucket
S3_ACCESS_KEY_ID=AKIA...
S3_SECRET_ACCESS_KEY=...
S3_REGION=eu-central-1
AWS SDK otomatik olarak genel AWS endpoint’lerini kullanır. S3_ENDPOINT veya S3_PUBLIC_ENDPOINT gerekmez.

MinIO (Tarayıcı Erişimli)

MinIO örneğiniz tarayıcılardan doğrudan erişilebiliyorsa (örneğin, genel IP veya domain üzerinden):
S3_BUCKET_NAME=azalt
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_ACCESS_KEY=minioadmin
S3_ENDPOINT=https://minio.example.com
S3_FORCE_PATH_STYLE=true
S3_ENDPOINT tarayıcı erişimli olduğu için S3_PUBLIC_ENDPOINT gerekmez.

MinIO (Docker/Kubernetes Dahili)

MinIO sadece dahili olarak erişilebiliyorsa (örneğin, Docker ağı veya Kubernetes cluster’ı):
S3_BUCKET_NAME=azalt
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_ACCESS_KEY=minioadmin
S3_ENDPOINT=http://minio:9000                    # Sunucu işlemleri için dahili URL
S3_PUBLIC_ENDPOINT=https://example.com/s3        # Tarayıcı erişimi için harici URL
S3_FORCE_PATH_STYLE=true

Özel Bulut S3

Özel bulutlardaki dahili S3 uyumlu depolama için (örneğin, banka altyapısı):
S3_BUCKET_NAME=azalt
S3_ACCESS_KEY_ID=...
S3_SECRET_ACCESS_KEY=...
S3_ENDPOINT=https://s3.internal.bank.com         # Dahili S3 endpoint'i
S3_PUBLIC_ENDPOINT=https://s3.external.bank.com  # Tarayıcı erişimli endpoint (farklıysa)
S3_FORCE_PATH_STYLE=true                         # S3 uyumlu servisler için genellikle gerekli
Dahili S3 endpoint’iniz tarayıcılardan erişilebiliyorsa (örneğin, kullanıcılar VPN’de), S3_PUBLIC_ENDPOINT’i atlayabilirsiniz.

Presigned URL’ler Nasıl Çalışır

Bir kullanıcı dosya yükleyip indirdiğinde, Azalt tarayıcının doğrudan kullandığı bir presigned URL oluşturur.

Endpoint Çözümleme Sırası

Presigned URL’ler için (tarayıcı dosya erişimi):
  1. S3_PUBLIC_ENDPOINT (ayarlıysa)
  2. S3_ENDPOINT (ayarlıysa)
  3. AWS SDK varsayılanları (standart AWS S3 için)
Sunucu işlemleri için (yüklemeler, doğrulama):
  1. S3_ENDPOINT (ayarlıysa)
  2. AWS SDK varsayılanları

Helm Values (Kubernetes)

values.yaml içinde:
env:
  secrets:
    S3_ENDPOINT: "http://minio.storage.svc.cluster.local:9000"
    S3_PUBLIC_ENDPOINT: "https://s3.example.com"
    S3_BUCKET_NAME: "azalt"
    S3_ACCESS_KEY_ID: "..."
    S3_SECRET_ACCESS_KEY: "..."
    S3_FORCE_PATH_STYLE: "true"
  config:
    S3_REGION: "eu-central-1"

Sorun Giderme

Üç zorunlu değişkenin de ayarlandığından emin olun:
  • S3_BUCKET_NAME
  • S3_ACCESS_KEY_ID
  • S3_SECRET_ACCESS_KEY
Bu uyarı, S3_ENDPOINT yapılandırıldığında ancak S3_PUBLIC_ENDPOINT yapılandırılmadığında görünür. Uygulama presigned URL’ler için S3_ENDPOINT’i kullanacaktır.İşlem gerekli ise: S3_ENDPOINT dahili bir URL’dir (Docker/Kubernetes servis adı) ve tarayıcılar erişemez. S3_PUBLIC_ENDPOINT’i tarayıcı erişimli URL olarak ayarlayın.İşlem gerekli değil ise: S3_ENDPOINT zaten tarayıcı erişimliyse (VPN’deki kullanıcılar, genel endpoint, vb.).
Bu genellikle imzalama için kullanılan URL ile tarayıcıların gerçekte eriştiği URL arasında uyumsuzluk olduğu anlamına gelir.
  1. S3_PUBLIC_ENDPOINT’in tarayıcıların S3’e ulaşabileceği yeri gösterdiğini doğrulayın
  2. Herhangi bir reverse proxy’nin yolu doğru koruduğunu kontrol edin
  3. S3_FORCE_PATH_STYLE’ın S3 servis gereksinimlerinizle eşleştiğinden emin olun
S3 bucket’ınızın uygulama domain’inizden gelen isteklere izin veren uygun CORS yapılandırmasına sahip olduğundan emin olun.