seedling-classifier / python-api /SUPABASE_SETUP.md
hanya70999's picture
Upload 13 files
72b9a21 verified
# πŸ”— Setup Koneksi Supabase untuk Python API
Python API sekarang bisa menyimpan hasil prediksi langsung ke Supabase database.
## πŸ“‹ Yang Dibutuhkan
Anda perlu 2 environment variables:
1. `SUPABASE_URL` - URL project Supabase Anda
2. `SUPABASE_ANON_KEY` - Anonymous key dari Supabase
## πŸ”‘ Cara Mendapatkan Credentials
### Dari File .env Project
Credentials sudah ada di file `.env` project Anda:
```
SUPABASE_URL=https://xyddxrfiacdcnipdclas.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
### Atau dari Supabase Dashboard
1. Login ke https://supabase.com
2. Pilih project Anda
3. Sidebar β†’ Settings β†’ API
4. Copy:
- **Project URL** β†’ `SUPABASE_URL`
- **anon public** key β†’ `SUPABASE_ANON_KEY`
## πŸš€ Setup per Platform Deployment
### Hugging Face Spaces
1. **Via Web Interface:**
- Buka Space Settings
- Tab "Variables and secrets"
- Klik "New secret"
- Tambahkan 2 secrets:
```
Name: SUPABASE_URL
Value: https://xyddxrfiacdcnipdclas.supabase.co
Name: SUPABASE_ANON_KEY
Value: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
2. **Restart Space** untuk apply changes
### Railway
```bash
# Set secrets via CLI
railway variables set SUPABASE_URL=https://xyddxrfiacdcnipdclas.supabase.co
railway variables set SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
# Atau via Dashboard:
# Project β†’ Variables β†’ Add Variable
```
### Google Cloud Run
```bash
gcloud run services update palm-classifier \
--set-env-vars SUPABASE_URL=https://xyddxrfiacdcnipdclas.supabase.co,SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
### Local Testing
Buat file `.env` di folder `python-api/`:
```env
PORT=5000
SUPABASE_URL=https://xyddxrfiacdcnipdclas.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
Lalu jalankan dengan:
```bash
cd python-api
pip install python-dotenv
python -c "from dotenv import load_dotenv; load_dotenv(); import app"
# Atau install dan gunakan python-dotenv di app.py
```
## βœ… Verifikasi Setup
### 1. Check Logs saat Startup
Setelah deploy/restart, cek logs. Anda harus melihat:
```
βœ“ Supabase client initialized
βœ“ SVM model loaded successfully
βœ“ Metadata loaded: ['3 Bulan', '6 Bulan', '9 Bulan']
```
Jika **TIDAK** melihat "βœ“ Supabase client initialized", berarti credentials belum diset dengan benar.
### 2. Test API Endpoint
```bash
# Health check
curl https://your-api-url.com/health
# Response harus include supabase status
{
"status": "healthy",
"model_loaded": true,
"device": "cpu",
"classes": ["3 Bulan", "6 Bulan", "9 Bulan"]
}
```
### 3. Test Classification & Save
```bash
# Classify image (dengan base64 image)
curl -X POST https://your-api-url.com/classify \
-H "Content-Type: application/json" \
-d '{"image": "data:image/jpeg;base64,..."}'
# Response harus include:
{
"predicted_class": "6 Bulan",
"confidence": 0.8543,
"probabilities": {...},
"mode": "real",
"saved_to_db": true, ← Ini yang penting!
"id": "uuid-here" ← ID dari database
}
```
Jika `saved_to_db: false`, berarti ada masalah dengan koneksi Supabase.
### 4. Check Database
1. Login Supabase Dashboard
2. Table Editor β†’ predictions
3. Anda harus melihat record baru setiap kali classify
## πŸ“Š Data yang Disimpan
Setiap prediction menyimpan:
```json
{
"id": "uuid",
"predicted_class": "6 Bulan",
"confidence": 0.8543,
"probabilities": {
"3 Bulan": 0.0812,
"6 Bulan": 0.8543,
"9 Bulan": 0.0645
},
"mode": "real",
"image_data": "data:image/...", // First 1000 chars
"created_at": "2024-01-01T12:00:00Z"
}
```
## ⚠️ Troubleshooting
### "Supabase credentials not found"
**Problem:** Environment variables tidak diset
**Solution:**
- Cek apakah sudah set `SUPABASE_URL` dan `SUPABASE_ANON_KEY`
- Restart service setelah set env vars
- Verifikasi nilai env vars tidak ada typo
### "Failed to initialize Supabase"
**Problem:** Credentials salah atau URL tidak valid
**Solution:**
- Double check URL dan key dari Supabase Dashboard
- Pastikan URL format: `https://xxx.supabase.co`
- Pastikan key adalah anon key (public), bukan service role key
### "saved_to_db: false"
**Problem:** API tidak bisa save ke database
**Solution:**
- Cek RLS policies di table `predictions`
- Pastikan anon role punya permission INSERT
- Cek logs untuk error message detail
### RLS Policy Error
Jika ada error "new row violates row-level security policy":
```sql
-- Tambahkan policy di Supabase SQL Editor:
CREATE POLICY "Allow anon insert"
ON predictions
FOR INSERT
TO anon
WITH CHECK (true);
```
## πŸ” Security Notes
1. **NEVER commit credentials** ke git (sudah di .gitignore)
2. **Use environment variables** untuk semua secrets
3. **Anon key is safe** untuk public API karena dilindungi RLS
4. **Monitor usage** via Supabase Dashboard
## πŸ’‘ Optional: Disable Database Saving
Jika Anda tidak ingin save ke database, cukup **jangan set** environment variables.
API akan tetap berjalan normal, tapi tidak save predictions ke database.
Response akan include: `"saved_to_db": false`
## πŸ“š Reference
- [Supabase Python Client Docs](https://supabase.com/docs/reference/python/introduction)
- [Environment Variables Best Practices](https://12factor.net/config)
- [RLS Policies Guide](https://supabase.com/docs/guides/auth/row-level-security)