Remove obsolete scripts and configuration files for self-hosting and database migrations
- Deleted `pnpm-workspace.yaml` as it is no longer needed. - Removed `apply-migrations.sh` script that handled database migrations. - Eliminated `generate-full-stack-env.mjs` script for environment variable generation. - Deleted `selfhost-backup.sh` script for creating backups of the self-hosted environment. - Removed `selfhost-doctor.sh` script for health checks of the self-hosted services. - Deleted `selfhost-restore.sh` script for restoring backups in the self-hosted environment.
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
---
|
||||
title: Storage ve Dosyalar
|
||||
description: Avatar ve proje görselleri için Supabase Storage kullanımı.
|
||||
order: 12
|
||||
---
|
||||
|
||||
# Storage ve Dosyalar
|
||||
|
||||
Neta'da dosya saklama için Supabase Storage kullanılır. Şu an iki temel dosya ihtiyacı var: profil fotoğrafları ve proje kapak görselleri.
|
||||
|
||||
Bu dosyaları uygulama reposu içinde tutmuyorum. Çünkü production ortamında dosya upload'larının kalıcı ve güvenli bir storage alanında durması gerekir. Supabase Storage bu iş için yeterli ve pratik bir çözüm sağlıyor.
|
||||
|
||||
## Gerekli Bucket'lar
|
||||
|
||||
Neta iki bucket bekler:
|
||||
|
||||
| Bucket | Public | Kullanım |
|
||||
| --- | --- | --- |
|
||||
| `avatars` | Evet | Profil fotoğrafları |
|
||||
| `project-assets` | Hayır | Proje kapak görselleri |
|
||||
|
||||
## `avatars` Bucket
|
||||
|
||||
Profil fotoğrafları için kullanılır.
|
||||
|
||||
Önerilen ayar:
|
||||
|
||||
- Bucket adı: `avatars`
|
||||
- Public: Evet
|
||||
- MIME kısıtı: Gerekirse image türleriyle sınırlandırılabilir
|
||||
|
||||
Avatar görselleri public URL ile gösterilir. Bu yüzden bucket public olabilir.
|
||||
|
||||
Profil fotoğrafı upload işlemi Ayarlar ekranından yapılır:
|
||||
|
||||
```txt
|
||||
/settings
|
||||
```
|
||||
|
||||
Server action tarafında service role client kullanılır ve upload sonrası public URL profile kaydına yazılır.
|
||||
|
||||
## `project-assets` Bucket
|
||||
|
||||
Proje kapak görselleri için kullanılır.
|
||||
|
||||
Önerilen ayar:
|
||||
|
||||
- Bucket adı: `project-assets`
|
||||
- Public: Hayır
|
||||
- File size limit: 5 MB
|
||||
- Allowed MIME types:
|
||||
- `image/jpeg`
|
||||
- `image/png`
|
||||
- `image/webp`
|
||||
- `image/gif`
|
||||
|
||||
Bu bucket private kalmalıdır. Proje detay sayfasında görsel gerektiğinde server tarafında signed URL üretilir.
|
||||
|
||||
## Dosya Yolları
|
||||
|
||||
Proje görselleri şu mantıkla saklanır:
|
||||
|
||||
```txt
|
||||
{user_id}/projects/{project_id}/{file_name}
|
||||
```
|
||||
|
||||
Bu yapı storage policy yazmayı kolaylaştırır. Çünkü dosya yolunun ilk segmenti kullanıcının id değeridir.
|
||||
|
||||
## Signed URL Kullanımı
|
||||
|
||||
Private bucket içindeki proje görselleri doğrudan public URL ile gösterilmez. Bunun yerine server tarafında kısa süreli signed URL üretilir.
|
||||
|
||||
Bu yaklaşım şu avantajları sağlar:
|
||||
|
||||
- Proje dosyaları herkese açık olmaz.
|
||||
- URL süresi sınırlıdır.
|
||||
- Yetkisiz kullanıcılar dosya yolunu bilse bile doğrudan erişemez.
|
||||
|
||||
## Service Role Neden Kullanılıyor?
|
||||
|
||||
Upload işlemlerinde service role client kullanılır. Bunun sebebi storage policy karmaşıklığını azaltmak ve server-side işlemleri güvenli tutmaktır.
|
||||
|
||||
Yine de service role key sadece server tarafında kalmalıdır.
|
||||
|
||||
## Storage Policy Mantığı
|
||||
|
||||
Policy'ler şu iki durumu desteklemelidir:
|
||||
|
||||
- Kullanıcı kendi klasöründeki dosyaları yönetebilmeli.
|
||||
- Service role server-side işlemler için erişebilmeli.
|
||||
|
||||
`project-assets` için tipik yol kontrolü:
|
||||
|
||||
```txt
|
||||
auth.uid()::text = storage.foldername(name)[1]
|
||||
```
|
||||
|
||||
Service role için ayrıca bypass izni verilmelidir.
|
||||
|
||||
## Sık Karşılaşılan Hatalar
|
||||
|
||||
### Upload Başarısız
|
||||
|
||||
Kontrol edilecekler:
|
||||
|
||||
- Bucket adı doğru mu?
|
||||
- Bucket var mı?
|
||||
- MIME type izinli mi?
|
||||
- Dosya boyutu limiti aşılıyor mu?
|
||||
- Service role key doğru mu?
|
||||
|
||||
### Görsel Yükleniyor Ama Görünmüyor
|
||||
|
||||
`project-assets` private olduğu için public URL beklemeyin. Signed URL üretimi çalışıyor mu kontrol edin.
|
||||
|
||||
### Avatar Görünmüyor
|
||||
|
||||
`avatars` bucket public değilse public URL görüntülenmeyebilir. Ya bucket public yapılmalı ya da avatar için de signed URL yaklaşımı kullanılmalıdır.
|
||||
|
||||
## Production Notu
|
||||
|
||||
Storage ayarları deploy platformundan bağımsızdır. Vercel, Coolify veya Dokploy fark etmez; dosya tarafındaki davranışı Supabase bucket ve policy ayarları belirler.
|
||||
Reference in New Issue
Block a user